From: Nicolas Coden Date: Wed, 26 Sep 2018 20:47:56 +0000 (+0200) Subject: chore: generate dist files for v6.5.0-rc.4 X-Git-Tag: v6.5.0-rc.4^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e02d31df55ae9be8c360dbb68f68bab928dc724c;p=thirdparty%2Ffoundation%2Ffoundation-sites.git chore: generate dist files for v6.5.0-rc.4 --- diff --git a/dist/css/foundation-float.css b/dist/css/foundation-float.css index 2be224a35..def2e6bc2 100644 --- a/dist/css/foundation-float.css +++ b/dist/css/foundation-float.css @@ -1,7 +1,7 @@ @charset "UTF-8"; /** * Foundation for Sites by ZURB - * Version 6.5.0-rc.3 + * Version 6.5.0-rc.4 * foundation.zurb.com * Licensed under MIT Open Source */ @@ -302,9 +302,6 @@ input[type='search'] { ::-webkit-input-placeholder { color: #cacaca; } -:-ms-input-placeholder { - color: #cacaca; } - ::-ms-input-placeholder { color: #cacaca; } @@ -474,8 +471,6 @@ select { background-color: #f9ecea; } .is-invalid-input:not(:focus)::-webkit-input-placeholder { color: #cc4b37; } - .is-invalid-input:not(:focus):-ms-input-placeholder { - color: #cc4b37; } .is-invalid-input:not(:focus)::-ms-input-placeholder { color: #cc4b37; } .is-invalid-input:not(:focus)::placeholder { diff --git a/dist/css/foundation-float.css.map b/dist/css/foundation-float.css.map index b7f67725f..ced5db5ab 100644 --- a/dist/css/foundation-float.css.map +++ b/dist/css/foundation-float.css.map @@ -1 +1 @@ -{"version":3,"sources":["foundation-float.css","../scss/foundation.scss","../scss/util/_breakpoint.scss","../scss/components/_reveal.scss","../scss/vendor/normalize.scss","../scss/_global.scss","../scss/util/_unit.scss","../scss/util/_mixins.scss","../scss/forms/_text.scss","../scss/forms/_checkbox.scss","../scss/forms/_label.scss","../scss/forms/_help-text.scss","../scss/forms/_input-group.scss","../scss/forms/_fieldset.scss","../scss/forms/_select.scss","../scss/forms/_error.scss","../scss/typography/_base.scss","../scss/typography/_helpers.scss","../scss/typography/_alignment.scss","../scss/typography/_print.scss","../scss/grid/_classes.scss","../scss/grid/_row.scss","../scss/grid/_gutter.scss","../scss/grid/_size.scss","../scss/grid/_column.scss","../scss/grid/_position.scss","../scss/grid/_layout.scss","../scss/components/_button.scss","../scss/components/_button-group.scss","../scss/components/_close-button.scss","../scss/components/_label.scss","../scss/components/_progress-bar.scss","../scss/forms/_progress.scss","../scss/components/_slider.scss","../scss/forms/_range.scss","../scss/components/_switch.scss","../scss/components/_table.scss","../scss/util/_color.scss","../scss/components/_badge.scss","../scss/components/_breadcrumbs.scss","../scss/components/_callout.scss","../scss/components/_card.scss","../scss/components/_dropdown.scss","../scss/components/_pagination.scss","../scss/components/_tooltip.scss","../scss/components/_accordion.scss","../scss/components/_media-object.scss","../scss/components/_orbit.scss","../scss/components/_responsive-embed.scss","../scss/util/_math.scss","../scss/components/_tabs.scss","../scss/components/_thumbnail.scss","../scss/components/_menu.scss","../scss/components/_menu-icon.scss","../scss/components/_accordion-menu.scss","../scss/components/_drilldown.scss","../scss/components/_dropdown-menu.scss","../scss/components/_off-canvas.scss","../scss/components/_sticky.scss","../scss/components/_title-bar.scss","../scss/components/_top-bar.scss","../scss/components/_float.scss","../scss/components/_visibility.scss"],"names":[],"mappings":"AAAA,iBAAiB;ACAjB;;;;;GAKG;ACiKG;ECzHJ;IACE,YAAW;IACX,WAAU;IACV,eAAc,EACf,EAAA;;AChDD,4EAA4E;AAQ5E;EACE,kBAAiB;EACjB,+BAA8B,EAC/B;;AAOD;EACE,UAAS,EACV;;AAKD;EACE,eAAc;EACd,iBAAgB,EACjB;;AAQD;EACE,gCAAuB;UAAvB,wBAAuB;EACvB,UAAS;EACT,kBAAiB,EAClB;;AAKD;EACE,kCAAiC;EACjC,eAAc,EACf;;AAOD;EACE,8BAA6B,EAC9B;;AAKD;EACE,oBAAmB;EACnB,2BAA0B;EAC1B,0CAAiC;UAAjC,kCAAiC,EAClC;;AAID;;EAEE,oBAAmB,EACpB;;AAKD;;;EAGE,kCAAiC;EACjC,eAAc,EACf;;AAID;EACE,eAAc,EACf;;AAKD;;EAEE,eAAc;EACd,eAAc;EACd,mBAAkB;EAClB,yBAAwB,EACzB;;AAED;EACE,gBAAe,EAChB;;AAED;EACE,YAAW,EACZ;;AAOD;EACE,mBAAkB,EACnB;;AAQD;;;;;EAKE,qBAAoB;EACpB,gBAAe;EACf,kBAAiB;EACjB,UAAS,EACV;;AAKD;;EAEE,kBAAiB,EAClB;;AAKD;;EAEE,qBAAoB,EACrB;;AAID;;;;EAIE,2BAA0B,EAC3B;;AAID;;;;EAIE,mBAAkB;EAClB,WAAU,EACX;;AAID;;;;EAIE,+BAA8B,EAC/B;;AAID;EACE,+BAA8B,EAC/B;;AAOD;EACE,+BAAsB;UAAtB,uBAAsB;EACtB,eAAc;EACd,eAAc;EACd,gBAAe;EACf,WAAU;EACV,oBAAmB,EACpB;;AAID;EACE,yBAAwB,EACzB;;AAID;EACE,eAAc,EACf;;AJtFH;;EI6FI,+BAAsB;UAAtB,uBAAsB;EACtB,WAAU,EACX;;AJ1FH;;EIgGI,aAAY,EACb;;AJ7FH;EImGI,8BAA6B;EAC7B,qBAAoB,EACrB;;AJjGH;EIsGI,yBAAwB,EACzB;;AAKD;EACE,2BAA0B;EAC1B,cAAa,EACd;;AAOD;EACE,eAAc,EACf;;AAID;EACE,mBAAkB,EACnB;;AAOD;EACE,cAAa,EACd;;AJvHH;EI4HI,cAAa,EACd;;AC5ID;EACE,yEAAgD,EACjD;;ADpID;ECuIE,+BAAsB;UAAtB,uBAAsB;EACtB,gBCzImB,ED0IpB;;AAGD;;;EAGE,4BAAmB;UAAnB,oBAAmB,EACpB;;ADtID;EC0IE,UAAS;EACT,WAAU;EAEV,oBA5GW;EA8GX,oEAlGqE;EAmGrE,oBA/EyB;EAgFzB,iBA9ImB;EA+InB,eArHW;EAwHT,oCAAmC;EACnC,mCAAkC,EAErC;;ADvDD;EC2DE,sBAAqB;EACrB,uBAAsB;EAGtB,gBAAe;EACf,aAAY;EACZ,gCAA+B,EAChC;;AD2BD;ECvBE,aAAY;EACZ,iBAAgB;EAChB,iBAhGa,EAiGd;;AAGD;EACE,+BAAsB;UAAtB,uBAAsB;EACtB,YAAW;EACX,iBAvGa,EAwGd;;AAID;;;;;;EAKI,2BAA0B,EAC3B;;AAIH;EAEE,WAAU;EACV,yBAAgB;KAAhB,sBAAgB;UAAhB,iBAAgB;EAChB,UAAS;EACT,iBA3Ha;EA4Hb,wBAAuB;EACvB,eAAc;EACd,aAvGuB,EAwGxB;ELND;IOXE,WAAU,EACX;;AH7JD;ECiLE,eAAc,EACf;;ADlGD;;;;;EC0GE,qBAAoB,EACrB;;AAGD;EACE,0BAAyB,EAC1B;;AAED;EACE,yBAAwB,EACzB;;ALVH;;EQjJE,eAAc;EACd,+BAAsB;UAAtB,uBAAsB;EACtB,YAAW;EACX,kBALsJ;EAMtJ,iBFHuD;EEIvD,gBAtC+B;EAwC/B,0BHtDmB;EGuDnB,iBHHe;EGIf,0BH5Ca;EG6Cb,0DHjDa;UGiDb,kDHjDa;EGmDb,qBAjFyB;EAkFzB,gBFZuD;EEavD,oBHjB2B;EGkB3B,iBHhFqB;EGiFrB,eHvDa;EG0DX,4EApC8D;EAoC9D,oEApC8D;EAoC9D,4DApC8D;EAoC9D,qFApC8D;EAyD9D,yBAAgB;KAAhB,sBAAgB;UAAhB,iBAAgB,EACjB;ER2HD;;IQ5IE,cAAa;IACb,0BHpEe;IGqEf,0BH7DW;IG8DX,oCH1EiB;YG0EjB,4BH1EiB;IG6Ef,4EA/C4D;IA+C5D,oEA/C4D;IA+C5D,4DA/C4D;IA+C5D,qFA/C4D,EAiD/D;;AJ0FD;EI7EE,gBAAe,EAKhB;EAND;IAII,aAAY,EACb;;AAGH;;;EAKI,0BH5Gc;EG6Gd,oBA/E6B,EAgF9B;;AR4HL;;EQtHI,yBAAgB;KAAhB,sBAAgB;UAAhB,iBAAgB;EAChB,iBH7Da,EG8Dd;;AAGD;EACE,+BAAsB;UAAtB,uBAAsB,EACvB;;AAgBD;EACE,eHxIiB,EGyIlB;;AAFD;EACE,eHxIiB,EGyIlB;;AAFD;EACE,eHxIiB,EGyIlB;;AAFD;EACE,eHxIiB,EGyIlB;;ARwGH;;;ES7QI,iBH4EqD,EG3EtD;;ATiRH;;ES5QI,sBAAqB;EACrB,yBAAwB;EAExB,oBAAkD;EAClD,mBHkEqD;EGjErD,iBAAgB,EAKjB;ETyQD;;IS3QI,gBAAe,EAChB;;AAIH;;EAEE,qBAAmD,EACpD;;AT2QH;ESvQI,YAAW,EACZ;;ACGD;EAjBA,eAAc;EACd,UAAS;EAET,oBJ4DuD;EI3DvD,oBLuD2B;EKtD3B,iBAR0B;EAS1B,eLiBa,EKAZ;EAND;IALA,iBJmDuD;IIlDvD,qBAA8D,EAS3D;;AC1BH;EAGE,oBAFuC;EAGvC,qBL+DqD;EK9DrD,mBARwB;EASxB,eNqBW,EMpBZ;;ACFD;EACE,eAAwC;EACxC,YAAW;EACX,oBN2DqD,EM1CtD;EApBD;IAWM,uBPuDS,EOtDV;EAZL;IAiBM,uBAAiH,EAClH;;AAIL;;;;EACE,UAAS;EACT,oBAAmB;EAGjB,oBAAmB;EACnB,uBAAsB,EAEzB;;AAED;EAEE,gBAvCuB;EAwCvB,0BPrBiB;EOsBjB,oBP1BgB;EO4BhB,ePhBW;EOiBX,mBAAkB;EAClB,oBAAmB;EAQjB,UAAS;EACT,aAAY,EAYf;EA7BD;IAsBM,gBAAiC,EAClC;EAvBL;IA0BM,eAAgC,EACjC;;AAIL;EAEE,iBAAgB,EAMjB;;AAED;EAEE,eAAc;EACd,kBAAiB;EACjB,mBAAkB;EAOhB,UAAS;EACT,aAAY,EAoBf;EAhCD;;;;IA0BM,kBArGiI;IAuGnI,eAAc;IACd,kBAAiB;IACjB,gBNzCmD,EM0CpD;;AAKD;EAEI,oBAAmB,EACpB;;AR6CL;EShJE,UAAS;EACT,WAAU;EACV,UAAS,EACV;;ATsJD;ESnJE,gBAAe;EACf,sBAAkC,EACnC;;AAED;EAxBA,mBPoEW;EOnEX,iBP8DuD;EO7DvD,0BRamB,EQWlB;EAtBD;IAEE,UAAS;IACT,wBPwDqD;IOvDrD,qBPuDqD,EOtDtD;;AR8JD;ESzKA,kBAFsJ;EAGtJ,iBRgEuD;EQ/DvD,gBN6B+B;EM3B/B,yBAAgB;KAAhB,sBAAgB;UAAhB,iBAAgB;EAChB,0BTYmB;ESXnB,iBT+De;ES9Df,0BTsBa;ESpBb,qBNdyB;EMezB,gBRuDuD;EQtDvD,oBTkD2B;ESjD3B,iBTbqB;EScrB,eTYa;EEsGb,yOAAyN;EO9GvN,+BAA8B;EAC9B,wCAA0D;EAC1D,6BAA4B;EAC5B,yBAAwB;EAExB,sBAAuD;EAIvD,4ENqB8D;EMrB9D,oENqB8D;EMrB9D,4DNqB8D;EMrB9D,qFNqB8D,EMc/D;EPoED;IFwCA;MErCI,wWAAuW,EOvE1W,EAAA;EA/BD;IACE,cAAa;IACb,0BTXe;ISYf,0BTJW;ISKX,oCTjBiB;YSiBjB,4BTjBiB;ISoBf,4ENU4D;IMV5D,oENU4D;IMV5D,4DNU4D;IMV5D,qFNU4D,EMR/D;EAGD;IACE,0BT9BgB;IS+BhB,oBND+B,EMEhC;EAGD;IACE,cAAa,EACd;EAED;IACE,aAAY;IACZ,uBAAsB,EACvB;;AClCD;EACE,sBVdY;EUeZ,0BAA+D,EAKhE;EAHC;IACE,eVlBU,EUmBX;EAFD;IACE,eVlBU,EUmBX;EAFD;IACE,eVlBU,EUmBX;EAFD;IACE,eVlBU,EUmBX;;AAyBD;EACE,eV7CU,EU8CX;;AAIH;EAzBA,cAAa;EACb,oBAAgC;EAChC,oBT8BuD;ES5BvD,mBT4BuD;ES3BvD,kBV2BuB;EU1BvB,eV/Bc,EUwDb;EAND;IAII,eAAc,EACf;;ACyKH;;;;;;;;;;;;;;;;;;;EAmBE,UAAS;EACT,WAAU,EACX;;AAGD;EACE,oBAzK0B;EA2K1B,mBAAkB;EAClB,iBAhLsB;EAiLtB,mCAzKyC,EA0K1C;;AAGD;;EAEE,mBAAkB;EAClB,qBAAoB,EACrB;;AAGD;;EAEE,kBXjNqB;EWkNrB,qBAAoB,EACrB;;AZnND;EYuNE,eA5MiB;EA6MjB,qBAAoB,EACrB;;AAGD;;;;;;EAME,oEX1PqE;EW2PrE,mBAzRsB;EA0RtB,oBXxOyB;EWyOzB,eAnRkB;EAoRlB,mCA/NsC,EAqOvC;EAhBD;;;;;;IAaI,eAAc;IACd,eX1Re,EW2RhB;;AAQG;EAII,kBVvP6C;EUmQ7C,iBA7SW;EAqTX,cAAa;EAOb,sBAxTiB,EA0TpB;;AAjCD;EAII,mBVvP6C;EUmQ7C,iBA7SW;EAqTX,cAAa;EAOb,sBAxTiB,EA0TpB;;AAjCD;EAII,qBVvP6C;EUmQ7C,iBA7SW;EAqTX,cAAa;EAOb,sBAxTiB,EA0TpB;;AAjCD;EAII,oBVvP6C;EUmQ7C,iBA7SW;EAqTX,cAAa;EAOb,sBAxTiB,EA0TpB;;AAjCD;EAII,qBVvP6C;EUmQ7C,iBA7SW;EAqTX,cAAa;EAOb,sBAxTiB,EA0TpB;;AAjCD;EAII,gBVvP6C;EUmQ7C,iBA7SW;EAqTX,cAAa;EAOb,sBAxTiB,EA0TpB;;AdtMH;EcqKE;IAII,gBVvP6C,EUoRhD;EAjCD;IAII,kBVvP6C,EUoRhD;EAjCD;IAII,qBVvP6C,EUoRhD;EAjCD;IAII,qBVvP6C,EUoRhD;EAjCD;IAII,mBVvP6C,EUoRhD;EAjCD;IAII,gBVvP6C,EUoRhD,EAAA;;AZpTP;EY2TE,qBAAoB;EACpB,eXzVc;EW0Vd,sBA9NyB;EAgOzB,gBAAe,EAahB;EAlBD;IASI,eAxO2D,EA4O5D;EAbH;IAgBI,UAAS,EACV;;AZ9VH;EYmWE,YAAW;EAEX,iBVlTqD;EUmTrD,UAAS;EACT,qBArOyB;EAuOzB,cAAa;EACb,gBAAe;EACf,iCXxWiB;EWyWjB,eAAc,EACf;;AAGD;;;EAGE,oBAzS0B;EA0S1B,6BAlOyB;EAmOzB,iBA/SsB,EAgTvB;;AAGD;EACE,mBAAkB,EACnB;;AAGD;EACE,qBAzOsB;EA0OtB,sBAlPkB,EAmPnB;;AAGD;EACE,qBA/OsB,EAgPvB;;AAGD;EAEI,qBAjP2B;EAkP3B,iBAAgB,EACjB;;AAIH;EACE,oBApPyB,EA0P1B;EAPD;IAII,sBA/O8B;IAgP9B,kBXnWmB,EWoWpB;;AAIH;EACE,iBAlV0B;EAmV1B,uCV1WqD;EU2WrD,+BX3ZiB,EWialB;EATD;IAMI,iBA3VoB;IA4VpB,eX3Za,EW4Zd;;AAIH;EACE,eAAc;EACd,qBVtXqD;EUuXrD,eXnae,EWwahB;EARD;IAMI,cA/O6B,EAAA;;AAoPjC;EACE,kCXxaW;EWyaX,aAAY;EACZ,sBAAqB,EACtB;;AAGD;EACE,UAAS,EACV;;AAGD;EACE,sCV5YqD;EU8YrD,0BX9biB;EW+bjB,0BXncgB;EWqchB,6DAncmE;EAocnE,oBXtZyB;EWuZzB,eX3bW,EW4bZ;;AAGD;EACE,UAAS;EACT,4BVpZS;EUsZT,0BX/cgB;EWidhB,6DA/cmE;EAgdnE,eXtcW,EW2cZ;;AC5cD;EACE,mBAlByB;EAmBzB,sBAf4B;EAiB5B,oBZiCyB;EYhCzB,iBAlCsB;EAmCtB,eZTe,EYUhB;;AAGD;EACE,gBAhDqC;EAiDrC,iBA7CiB,EA8ClB;;AAGD;EACE,kBA1BmB;EA2BnB,eAAc,EAKf;EAHC;IACE,kBAAiB,EAClB;;AAGH;EAGI,eAAgC;EAChC,iBAAgB,EACjB;;AC/DK;EACE,iBARe,EAShB;;AAFD;EACE,kBARsB,EASvB;;AAFD;EACE,mBAR8B,EAS/B;;AAFD;EACE,oBARuC,EASxC;;AhBsJL;EgB7JI;IACE,iBAHe,EAIhB;EAFD;IACE,kBAHsB,EAIvB;EAFD;IACE,mBAH8B,EAI/B;EAFD;IACE,oBAHuC,EAIxC,EAAA;;AhB2JL;EgB7JI;IACE,iBAHe,EAIhB;EAFD;IACE,kBAHsB,EAIvB;EAFD;IACE,mBAH8B,EAI/B;EAFD;IACE,oBAHuC,EAIxC,EAAA;;ACET;EAAkB,yBAAwB,EAAI;;AAE9C;EACE;IAEI,mCAAkC;IAGpC,oCAA2B;YAA3B,4BAA2B;IAE3B,wBAAuB;IACvB,6BAA4B,EAC7B;EAZH;IAcoB,0BAAyB,EAAI;EAC/C;IAAkB,yBAAwB,EAAI;EAE9C;IAAuB,0BAAyB,EAAI;EACpD;IAAuB,uCAAsC,EAAI;EACjE;IAAuB,oCAAmC,EAAI;EAC9D;IAAoB,8BAA6B,EAAI;EACrD;IAAoB,+BAA8B,EAAI;EACtD;IAAoB,+BAA8B,EAAI;EAGtD;;IACY,2BAA0B,EAAG;EAEvC;IAAgB,6BAA4B,EAAI;EAIlD;;;IAEqB,YAAW,EAAI;EAGpC;IAAoB,8BAA6B,EAAI;EAGrD;;IAEE,0BdXa;IcYb,yBAAwB,EACzB;EAGD;IAAQ,4BAA2B,EAAI;EAEvC;;IACM,yBAAwB,EAAI;EfqDpC;IenDQ,2BAA0B,EAAI;EAEpC;IAAQ,cAAa,EAAA;EAErB;;;IAGE,WAAU;IACV,UAAS,EACV;EAGD;;IACK,wBAAuB,EAAI;EAGhC;IACE,wBAAuB,EACxB,EAAA;;ACxDH;ECsEA,iBfTuD;Ee1BrD,mBAAkB;EAClB,kBAAiB,EDSlB;EbiGD;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;Ea3JD;IELE,iBhBuES;IgBtET,gBhBsES,Ec3DN;EAPL;ICyDE,wBAF+D;IAG/D,uBAH+D,EDrC9D;IlByHC;MkB3IJ;QCyDE,yBAF+D;QAG/D,wBAH+D,EDrC9D,EAAA;IlByHC;MkB3IJ;QCyDE,yBAF+D;QAG/D,wBAH+D,EDrC9D,EAAA;IAlBH;MAeM,gBAAe;MACf,eAAc,EACf;EAjBL;ICsEA,gBAHa,EDvCV;IA5BH;MAyBM,mBAAkB;MAClB,kBAAiB,EAClB;EA3BL;ICsEA,gBAHa,EDnCV;EAhCH;IELE,wBAFqC;IAGrC,uBAHqC,EFgD9B;EAzCT;IELE,yBAFqC;IAGrC,wBAHqC,EFgD9B;;AAOT;EG7DA,YCeqD;EA+BrD,YnB8DyD;EiBpGvD,wBAFqC;EAGrC,uBAHqC,EF+DtC;ElBmFG;IkB3FJ;MErDE,yBAFqC;MAGrC,wBAHqC,EF+DtC,EAAA;EKhEC;IACE,YpBsGqD;IoBrGrD,YAAW,EACZ;EAIC;IACE,apBgGoD,EoB/FrD;EA4CL;IACE,YpBiDuD,EoBhDxD;;ALaD;EACE,YAAW,EACZ;;AAGD;EACE,gBAAe;EACf,eAAc;EACd,iBAAgB;EAChB,gBAAe,EAChB;;AAKG;EGxFJ,gBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,eAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,gBAHmD,ELgF9C;;AAMH;EKtDJ,gBDxCgC,EJgG3B;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,sBDrCqD,EJ6FhD;;AApBD;EGxFJ,WCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,UAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,WAHmD,ELgF9C;;AAMH;EKtDJ,uBDrCqD,EJ6FhD;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,iBDrCqD,EJ6FhD;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,uBDrCqD,EJ6FhD;;AApBD;EGxFJ,WCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,UAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,WAHmD,ELgF9C;;AAMH;EKtDJ,uBDrCqD,EJ6FhD;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,iBDrCqD,EJ6FhD;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,uBDrCqD,EJ6FhD;;AApBD;EGxFJ,WCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,UAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,WAHmD,ELgF9C;;AAMH;EKtDJ,uBDrCqD,EJ6FhD;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,iBDrCqD,EJ6FhD;;AApBD;EGxFJ,iBCeqD,EJ2EhD;;AAIC;EKxEJ,mBAAkB;EAClB,gBAHmD,EL4E9C;;AAED;EK5EJ,mBAAkB;EAClB,iBAHmD,ELgF9C;;AAMH;EKtDJ,uBDrCqD,EJ6FhD;;AApBD;EGxFJ,YCeqD,EJ2EhD;;AAgBD;EKtDJ,uBDrCqD,EJ6FhD;;AAKD;EMzGF,YrBoGuD;EqBnGvD,YAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,WAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,iBAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,WAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,WAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,iBAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,iBAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;ANwEC;EMzGF,YrBoGuD;EqBnGvD,aAAuB,EAiCxB;ENuEG;IMjFA,YAAW,EACZ;ENgFC;IM7EA,YAAW,EACZ;EN4EC;IMzEA,YrBoEqD,EqBnEtD;;AN8ED;EE/GA,iBhBuES;EgBtET,gBhBsES,EcyCuC;;AADhD;EAII,gBAAe;EACf,eAAc,EACf;;AAGH;EACE,gBAAe;EACf,eAAc,EACf;;AAED;EE7HA,wBAFqC;EAGrC,uBAHqC,EFgIoB;;AAIzD;EK1GA,mBAAkB;EAClB,kBAAiB,EL2GhB;EKhHD;IACE,YAAW;IACX,YAAW,EACZ;;ALgHD;;;EKnGF,iBAAgB;EAChB,gBAAe;EACf,eAAc,ELqGX;EK9ID;;;;;IACE,YpBsGqD;IoBrGrD,YAAW,EACZ;EAIC;;;IACE,apBgGoD,EoB/FrD;;AvB0ID;EkBhEA;IGxFJ,gBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,eAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,gBAHmD,ELgF9C;EAMH;IKtDJ,gBDxCgC,EJgG3B;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,sBDrCqD,EJ6FhD;EApBD;IGxFJ,WCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,UAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,WAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,iBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,WCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,UAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,WAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,iBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,WCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,UAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,WAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,iBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,YCeqD,EJ2EhD;EAgBD;IKtDJ,uBDrCqD,EJ6FhD;EAKD;IMzGF,YrBoGuD;IqBnGvD,YAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,WAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,iBAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,WAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,WAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,iBAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,iBAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,aAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;EN8ED;IE/GA,iBhBuES;IgBtET,gBhBsES,EcyCuC;EADhD;IAII,gBAAe;IACf,eAAc,EACf;EAGH;IACE,gBAAe;IACf,eAAc,EACf;EAED;IE7HA,yBAFqC;IAGrC,wBAHqC,EFgIoB;EAIzD;IK1GA,mBAAkB;IAClB,kBAAiB,EL2GhB;IKhHD;MACE,YAAW;MACX,YAAW,EACZ;ELgHD;;;IKnGF,iBAAgB;IAChB,gBAAe;IACf,eAAc,ELqGX;IK9ID;;;;;MACE,YpBsGqD;MoBrGrD,YAAW,EACZ;IAIC;;;MACE,apBgGoD,EoB/FrD,EAAA;;AvB0ID;EkBhEA;IGxFJ,gBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,eAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,gBAHmD,ELgF9C;EAMH;IKtDJ,gBDxCgC,EJgG3B;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,sBDrCqD,EJ6FhD;EApBD;IGxFJ,WCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,UAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,WAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,iBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,WCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,UAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,WAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,iBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,WCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,UAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,WAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,iBDrCqD,EJ6FhD;EApBD;IGxFJ,iBCeqD,EJ2EhD;EAIC;IKxEJ,mBAAkB;IAClB,gBAHmD,EL4E9C;EAED;IK5EJ,mBAAkB;IAClB,iBAHmD,ELgF9C;EAMH;IKtDJ,uBDrCqD,EJ6FhD;EApBD;IGxFJ,YCeqD,EJ2EhD;EAgBD;IKtDJ,uBDrCqD,EJ6FhD;EAKD;IMzGF,YrBoGuD;IqBnGvD,YAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,WAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,iBAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,WAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,WAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,iBAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,iBAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;ENwEC;IMzGF,YrBoGuD;IqBnGvD,aAAuB,EAiCxB;INuEG;MMjFA,YAAW,EACZ;INgFC;MM7EA,YAAW,EACZ;IN4EC;MMzEA,YrBoEqD,EqBnEtD;EN8ED;IE/GA,iBhBuES;IgBtET,gBhBsES,EcyCuC;EADhD;IAII,gBAAe;IACf,eAAc,EACf;EAGH;IACE,gBAAe;IACf,eAAc,EACf;EAED;IE7HA,yBAFqC;IAGrC,wBAHqC,EFgIoB;EAIzD;IK1GA,mBAAkB;IAClB,kBAAiB,EL2GhB;IKhHD;MACE,YAAW;MACX,YAAW,EACZ;ELgHD;;;IKnGF,iBAAgB;IAChB,gBAAe;IACf,eAAc,ELqGX;IK9ID;;;;;MACE,YpBsGqD;MoBrGrD,YAAW,EACZ;IAIC;;;MACE,apBgGoD,EoB/FrD,EAAA;;ALyIL;EEzGE,uBhB4BqD,Ec+EtD;EEzGC;IACE,iBAAgB,EACjB;EpBsGC;IkBDJ;MEzGE,wBhB4BqD,Ec+EtD;MEzGC;QACE,iBAAgB,EACjB,EAAA;;AKyMH;EAhLA,sBAAqB;EACrB,uBAAsB;EACtB,mBAzEkC;EAmFhC,oBAvFuB;EA0FzB,8BAA6B;EAC7B,iBtBbe;EsBcf,0EA1BuE;EA0BvE,kEA1BuE;EA2BvE,qBAjG0B;EAkG1B,kBAvDe;EAwDf,yBAAwB;EACxB,eAAc;EACd,mBAAkB;EAClB,gBAAe;EAqCf,0BtB1HgB;EsB2HhB,etBlGa,EsBgWZ;E3BspCD;IOh2CE,WAAU,EACX;EoBnDD;IACE,0BA3HuE;IA4HvE,etBtGW,EsBuGZ;EA8GD;IAMM,kBA5NM,EA6NP;EAPL;IAMM,mBA3NQ,EA4NT;EAPL;IAMM,mBAzNQ,EA0NT;EAPL;IAlJE,eAAc;IACd,YAAW;IACX,gBAAe;IACf,eAAc,EAyJyB;EAVzC;IApHA,0BtB1HgB;IsB2HhB,etBlGa,EsB6PN;IAzJP;MACE,0BAPoF;MAQpF,etBtGW,EsBuGZ;EA8GD;IApHA,0BtBzHkB;IsB0HlB,etBlGa,EsB6PN;IAzJP;MACE,0BAPoF;MAQpF,etBtGW,EsBuGZ;EA8GD;IApHA,0BtBxHgB;IsByHhB,etBtGa,EsBiQN;IAzJP;MACE,0BAPoF;MAQpF,etB1GW,EsB2GZ;EA8GD;IApHA,0BtBvHgB;IsBwHhB,etBtGa,EsBiQN;IAzJP;MACE,0BAPoF;MAQpF,etB1GW,EsB2GZ;EA8GD;IApHA,0BtBtHc;IsBuHd,etBlGa,EsB6PN;IAzJP;MACE,0BAPoF;MAQpF,etBtGW,EsBuGZ;EA8GD;IA1DA,cAhJ4B;IAiJ5B,oBAAmB,EAwHhB;IAtHH;MACE,0BtBxLc;MsByLd,etBhKW,EsBiKZ;IAoDD;MA1DA,cAhJ4B;MAiJ5B,oBAAmB,EAsHZ;MApHP;QACE,0BtBxLc;QsByLd,etBhKW,EsBiKZ;IAoDD;MA1DA,cAhJ4B;MAiJ5B,oBAAmB,EAsHZ;MApHP;QACE,0BtBvLgB;QsBwLhB,etBhKW,EsBiKZ;IAoDD;MA1DA,cAhJ4B;MAiJ5B,oBAAmB,EAsHZ;MApHP;QACE,0BtBtLc;QsBuLd,etBpKW,EsBqKZ;IAoDD;MA1DA,cAhJ4B;MAiJ5B,oBAAmB,EAsHZ;MApHP;QACE,0BtBrLc;QsBsLd,etBpKW,EsBqKZ;IAoDD;MA1DA,cAhJ4B;MAiJ5B,oBAAmB,EAsHZ;MApHP;QACE,0BtBpLY;QsBqLZ,etBhKW,EsBiKZ;EAoDD;IAnFA,0BtB3JgB;IsB4JhB,etB5JgB,EsB0TX;IArLL;MAGE,8BAA6B,EAC9B;IAIC;MAEE,8BAA6B,EAC9B;IAcH;MACE,sBAN6D;MAO7D,eAP6D,EAa9D;MALC;QAEE,0BtBnKY;QsBoKZ,etBpKY,EsBqKb;IAyEH;MAnFA,0BtB3JgB;MsB4JhB,etB5JgB,EsBwTP;MA1JT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBnKY;UsBoKZ,etBpKY,EsBqKb;IAyEH;MAnFA,0BtB1JkB;MsB2JlB,etB3JkB,EsBuTT;MA1JT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBlKc;UsBmKd,etBnKc,EsBoKf;IAyEH;MAnFA,0BtBzJgB;MsB0JhB,etB1JgB,EsBsTP;MA1JT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBjKY;UsBkKZ,etBlKY,EsBmKb;IAyEH;MAnFA,0BtBxJgB;MsByJhB,etBzJgB,EsBqTP;MA1JT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBhKY;UsBiKZ,etBjKY,EsBkKb;IAyEH;MAnFA,0BtBvJc;MsBwJd,etBxJc,EsBoTL;MA1JT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtB/JU;UsBgKV,etBhKU,EsBiKX;EAyEH;IAnFA,0BtB3JgB;IsB4JhB,etB5JgB,EsBuVX;IAlNL;MAGE,8BAA6B,EAC9B;IAIC;MAEE,8BAA6B,EAC9B;IAcH;MACE,sBAN6D;MAO7D,eAP6D,EAa9D;MALC;QAEE,0BtBnKY;QsBoKZ,etBpKY,EsBqKb;IAyEH;MAuFU,0BAAyB,EAC1B;IAxFT;MAnFA,0BtB3JgB;MsB4JhB,etB5JgB,EsBqVP;MAvLT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBnKY;UsBoKZ,etBpKY,EsBqKb;MAyEH;QAoGc,0BAAyB,EAC1B;IArGb;MAnFA,0BtB1JkB;MsB2JlB,etB3JkB,EsBoVT;MAvLT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBlKc;UsBmKd,etBnKc,EsBoKf;MAyEH;QAoGc,0BAAyB,EAC1B;IArGb;MAnFA,0BtBzJgB;MsB0JhB,etB1JgB,EsBmVP;MAvLT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBjKY;UsBkKZ,etBlKY,EsBmKb;MAyEH;QAoGc,0BAAyB,EAC1B;IArGb;MAnFA,0BtBxJgB;MsByJhB,etBzJgB,EsBkVP;MAvLT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtBhKY;UsBiKZ,etBjKY,EsBkKb;MAyEH;QAoGc,0BAAyB,EAC1B;IArGb;MAnFA,0BtBvJc;MsBwJd,etBxJc,EsBiVL;MAvLT;QACE,sBAN6D;QAO7D,eAP6D,EAa9D;QALC;UAEE,0BtB/JU;UsBgKV,etBhKU,EsBiKX;MAyEH;QAoGc,0BAAyB,EAC1B;EA7Ib;IpBvLA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,oBoB+KY;IpB7KZ,YAAW;IAGT,uBAAsB;IACtB,wBAAuB;IACvB,8CAAqD;IoB8KrD,mBAAkB;IAClB,WAAU;IAEV,sBAAqB;IACrB,aAAO;IACP,iBA1NuB,EA2NxB;EAgCD;IAwHQ,0BtBtWQ,EsBuWT;EAzHP;IA8HY,0BtB5WI,EsB6WL;EA/HX;IA8HY,0BtB3WM,EsB4WP;EA/HX;IA8HY,0BtB1WI,EsB2WL;EA/HX;IA8HY,0BtBzWI,EsB0WL;EA/HX;IA8HY,0BtBxWE,EsByWH;EA/HX;IAuII,YAAW;IACX,YAAW;IACX,eAAgC,EACjC;;AAGH;EAGI,sBAAqB,EACtB;;ACrNH;EAjKA,oBA1BuB;EAkCrB,aAAY,EAkOb;ErBrGD;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;EqBvID;IACE,UAAS;IACT,kBAnCqB;IAoCrB,mBApCqB;IAqCrB,kBDEa,ECsBd;IAlBC;MACE,gBAAiC,EAClC;EA0IH;IAMM,kBDxJM,ECyJP;EAPL;IAMM,mBDvJQ,ECwJT;EAPL;IAMM,mBDrJQ,ECsJT;EAPL;IA9GE,mBAzEqB,EAoMpB;IAzHD;MAEE,cAAa,EACd;IAUG;MACE,wBAA+B,EAChC;IAMC;MACE,sBAAqB;MACrB,uBAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,6BAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,uBAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,uBAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,6BAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;EAgFX;IDhDA,0BtB1HgB;IsB2HhB,etBlGa,EuBqKN;IDjEP;MACE,0BAPoF;MAQpF,etBtGW,EsBuGZ;EC0CD;IDhDA,0BtBzHkB;IsB0HlB,etBlGa,EuBqKN;IDjEP;MACE,0BAPoF;MAQpF,etBtGW,EsBuGZ;EC0CD;IDhDA,0BtBxHgB;IsByHhB,etBtGa,EuByKN;IDjEP;MACE,0BAPoF;MAQpF,etB1GW,EsB2GZ;EC0CD;IDhDA,0BtBvHgB;IsBwHhB,etBtGa,EuByKN;IDjEP;MACE,0BAPoF;MAQpF,etB1GW,EsB2GZ;EC0CD;IDhDA,0BtBtHc;IsBuHd,etBlGa,EuBqKN;IDjEP;MACE,0BAPoF;MAQpF,etBtGW,EsBuGZ;ECrBD;IAKI,YAAW,EAuBd;IApBC;MACE,iBAAgB,EACjB;EAqDH;IA9GE,mBAzEqB,EA4NlB;IAjJH;MAEE,cAAa,EACd;IAUG;MACE,wBAA+B,EAChC;IAMC;MACE,sBAAqB;MACrB,uBAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,6BAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,uBAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,uBAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;IAPH;MACE,sBAAqB;MACrB,6BAAgD;MAChD,kBAnGa,EAwGd;MAHC;QACE,mBAAmE,EACpE;E1BiDP;I0BIJ;MAKI,YAAW;MAEb,iBAAgB,EAgBjB,EAAA;E1B3BG;I0BIJ;MAKI,YAAW;MAEb,iBAAgB,EAgBjB,EAAA;E1BtBG;I0B0BJ;MAsDM,eAAc,EAOjB;MA7DH;QAyDQ,eAAc;QACd,gBAAiC,EAClC,EAAA;E1BrFH;I0B0BJ;MAiEM,eAAc,EAOjB;MAxEH;QAoEQ,eAAc;QACd,gBAAiC,EAClC,EAAA;;AC5KP;EAXA,mBAAkB;EAClB,exBzCiB;EwB0CjB,gBAAe,EAcd;E7Bk1DD;IO5uDE,WAAU,EACX;EsBnHD;IAEE,exB1CW,EwB2CZ;EAID;IAvBA,eAzDc;IA0Dd,YAnDa;IAoDb,iBA7CY;IA8CZ,eAxCwB,EA+DwB;EAHhD;IAvBA,YAxDY;IAyDZ,YAlDc;IAmDd,eA5CW;IA6CX,eAxCwB,EAgE6B;;ACjDrD;EAZA,sBAAqB;EACrB,2BAT+B;EAW/B,iBzBmDe;EyBjDf,kBAjBsB;EAkBtB,eAAc;EACd,oBAAmB;EACnB,gBAAe;EAOb,oBzB1Bc;EyB2Bd,ezBFW,EyBUZ;EAZD;IAQM,oBzB/BU;IyBgCV,ezBPO,EyBQR;EAVL;IAQM,oBzB9BY;IyB+BZ,ezBPO,EyBQR;EAVL;IAQM,oBzB7BU;IyB8BV,ezBXO,EyBYR;EAVL;IAQM,oBzB5BU;IyB6BV,ezBXO,EyBYR;EAVL;IAQM,oBzB3BQ;IyB4BR,ezBPO,EyBQR;;AClBL;EApCA,aCIoB;EDHpB,oB1BiEkB;E0BhElB,iB1BoFe;E0BnFf,0B1B+BmB,E0BYlB;EAVD;IAMQ,0B1BrBQ,E0BsBT;EAPP;IAMQ,0B1BpBU,E0BqBX;EAPP;IAMQ,0B1BnBQ,E0BoBT;EAPP;IAMQ,0B1BlBQ,E0BmBT;EAPP;IAMQ,0B1BjBM,E0BkBP;;AAMP;EAzCA,mBAAkB;EAClB,eAAc;EACd,UAAS;EACT,aAAY;EACZ,0B1BSgB,E0B8Bf;;AAGD;ExB6LA,mBAAkB;EAClB,SAAQ;EACR,UAAS;EACT,yCAAgC;MAAhC,qCAAgC;UAAhC,iCAAgC;EwBhOhC,mBAAkB;EAClB,UAAS;EACT,mBAAkB;EAClB,kBAAiB;EACjB,e1BoBa;E0BnBb,oBAAmB,EA6BlB;;AE2CD;EApFA,mBAAkB;EAClB,eCZoB;EDapB,oBAAmB;EACnB,uBAAsB;EAEtB,0B5BUkB;E4BTlB,gBAAe;EACf,0BAAiB;KAAjB,uBAAiB;MAAjB,sBAAiB;UAAjB,kBAAiB;EACjB,uBAAkB;MAAlB,mBAAkB,EA8EjB;;AAGD;EA5EA,mBAAkB;EAClB,OAAM;EACN,QAAO;EAEP,sBAAqB;EACrB,gBAAe;EACf,eC9BoB;EDgCpB,0B5BFmB;E4BGnB,yCA1BsC;EA0BtC,iCA1BsC,EA+FrC;EAnED;IACE,kCAAyB;IAAzB,0BAAyB,EAC1B;;AAoED;E1BsHA,mBAAkB;EAClB,SAAQ;EACR,oCAA2B;MAA3B,gCAA2B;UAA3B,4BAA2B;E0BrL3B,QAAO;EACP,WAAU;EAEV,sBAAqB;EACrB,cChC0B;EDiC1B,eCrC2B;EDuC3B,iB5B+Be;E4B9Bf,0B5BnCgB;E4BoChB,yCA9CsC;EA8CtC,iCA9CsC;EA+CtC,+BAA0B;MAA1B,2BAA0B,EAqDzB;EjCg7DD;IO31DE,WAAU,EACX;E0BzID;IACE,0BAA0E,EAC3E;EAED;IACE,kCAAyB;IAAzB,0BAAyB,EAC1B;;AAgDD;;EA5CA,cC1C4B;ED2C5B,oBAAmB,EA8ClB;;AAGD;EA7CA,sBAAqB;EACrB,cArE4B;EAsE5B,gBAAe;EACf,kBAAiB;EACjB,gCAAuB;MAAvB,4BAAuB;UAAvB,wBAAuB,EA2CtB;EAzCD;IACE,OAAM;IACN,cA5E0B;IA6E1B,iBAAgB,EACjB;EAED;IACE,mBAAkB;IAClB,OAAM;IACN,UAAS;IACT,cC3EyB;ID4EzB,eCxEwB;IDyExB,oCAA2B;QAA3B,gCAA2B;YAA3B,4BAA2B,EAC5B;;AEsGD;EACE,aAzLgB;EA4ClB,mBAAkB;EAClB,oB9BSkB;E8BRlB,WAAU;EAGV,oB7BqBuD;E6BpBvD,kBAAiB;EACjB,e9BjBa;E8BmBb,0BAAiB;KAAjB,uBAAiB;MAAjB,sBAAiB;UAAjB,kBAAiB,EAsIhB;;AAGD;EApIA,mBAAkB;EAClB,iBAAgB;EAChB,WAAU,EAoIT;;AAGD;EA7HA,mBAAkB;EAClB,eAAc;EACd,YAPiC;EAQjC,aAzEkB;EA2ElB,iB9BDe;E8BEf,oB9BtDmB;E8BuDnB,uCAzC2C;EAyC3C,+BAzC2C;EA4C3C,qBAAoB;EACpB,eAAc;EAEd,gBAAe,EAkHd;EA/GD;IACE,UAAS,EACV;EAGD;IACE,mBAAkB;IAClB,aAjE0B;IAkE1B,cAlE0B;IAoE1B,eAAc;IACd,cA9ByD;IA+BzD,eAhC0D;IAkC1D,wCAA+B;YAA/B,gCAA+B;IAC/B,iB9B3Ba;I8B4Bb,oB9BpEW;I8BqEX,uCAnEyC;IAmEzC,+BAnEyC;IAoEzC,YAAW,EACZ;EAGD;IACE,oB9BpGc,E8ByGf;IAND;MAII,cA5CwE,EA6CzE;EnC4+DH;IOr6DE,WAAU,EACX;;A4BeD;EA7EA,mBAAkB;EAClB,SAAQ;EACR,oCAA2B;MAA3B,gCAA2B;UAA3B,4BAA2B,EA6E1B;;AAGD;EA3EA,SAAmB;EACnB,cAAa,EA6EZ;EA3ED;IACE,eAAc,EACf;;AA4ED;EAvEA,WAAqB,EA0EpB;EAxED;IACE,cAAa,EACd;;AAyED;EAvDA,eA9JyB,EAuNxB;EAvDD;IACE,YAR+B;IAS/B,eAlKuB;IAmKvB,oB7BjGqD,E6BkGtD;EAED;IACE,aA/I0B;IAgJ1B,cAhJ0B;IAiJ1B,YAfkD;IAgBlD,aAfmD,EAgBpD;EAED;IACE,cAlBmE,EAmBpE;;AA0CD;EA3DA,gBA1J2B,EAuN1B;EA3DD;IACE,cAR+B;IAS/B,gBA9JyB;IA+JzB,mB7BjGqD,E6BkGtD;EAED;IACE,aA/I0B;IAgJ1B,cAhJ0B;IAiJ1B,eAfkD;IAgBlD,gBAfmD,EAgBpD;EAED;IACE,WAlBmE,EAmBpE;;AA8CD;EA/DA,eAtJ0B,EAuNzB;EA/DD;IACE,YAR+B;IAS/B,eA1JwB;IA2JxB,gB7BjGqD,E6BkGtD;EAED;IACE,aA/I0B;IAgJ1B,cAhJ0B;IAiJ1B,YAfkD;IAgBlD,aAfmD,EAgBpD;EAED;IACE,cAlBmE,EAmBpE;;AC2GD;EA9GA,0BAAyB;EACzB,YAAW;EACX,oB/B5HkB;E+B6HlB,iB/BzGe,E+BsNd;EApMD;;;IAGE,0BCnB6C;IDoB7C,0B/B9DW,E+B+DZ;EAGD;IACE,kC9B/BqD;I8BgCrD,kB/BhCqB,E+BiCtB;EjB7DC;IiBiEA,oBC/B6C;IDgC7C,e/B9EW,E+B+EZ;EAGD;IACE,oBCrC6C;IDsC7C,e/BpFW,E+BqFZ;EAGD;;IAII,wBAAuB,EACxB;EALH;;;;IAUI,kC9B1DmD;I8B2DnD,kB/B3DmB;I+B4DnB,iBAAY,EACb;EAIH;;IAGI,kC9BpEmD,E8BqEpD;EAvEC;IACE,iBAAgB;IAChB,0BCMyC,EDL1C;EA8ED;IAEE,0B/BrHO,E+BsHR;IApEL;MACE,iBAAgB;MAChB,iCCV6C;MDW7C,0B/BrDW,E+BsDZ;;AlCiEG;EkCgHF;IACE,cAAa,EACd;EAGH;IACE,cAAa,EACd;EAED;;;IAGE,eAAc,EACf;EAED;IACE,cAAa,EACd,EAAA;;AAcD;EAvGA,eAAc;EACd,YAAW;EACX,iBAAgB,EAuGf;;AAhGC;EACE,0BArKmE,EAsKpE;;AAKD;EACE,0BApKmE,EAqKpE;;AAKD;EACE,0BA3MyD,EA4M1D;;AAMC;EACE,0BA/MmF,EAgNpF;;AA8EL;EACE,iBAAgB,EAEjB;;AEpRD;EAXA,sBAAqB;EACrB,iBAToB;EAUpB,eAdmB;EAgBnB,mBAAkB;EAElB,kBAVsB;EAWtB,mBAAkB;EAOhB,oBjCzBc;EiC0Bd,ejCDW,EiCSZ;EAZD;IAQM,oBjC9BU;IiC+BV,ejCNO,EiCOR;EAVL;IAQM,oBjC7BY;IiC8BZ,ejCNO,EiCOR;EAVL;IAQM,oBjC5BU;IiC6BV,ejCVO,EiCWR;EAVL;IAQM,oBjC3BU;IiC4BV,ejCVO,EiCWR;EAVL;IAQM,oBjC1BQ;IiC2BR,ejCNO,EiCOR;;ACmDL;EA7CA,mBAvDuC;EAwDvC,iBAAgB,EAmDf;EhCoDD;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;EgCjHD;IACE,YAAO;IAEP,qBjCgBqD;IiCfrD,elCzBW;IkC0BX,gBAAe;IAGb,0BAAyB,EAoB5B;IAZK;MACE,mBAAkB;MAClB,kBAzDuB;MA0DvB,WAAU;MACV,aA1C2B;MA2C3B,elClDW,EkCmDZ;EASP;IACE,elC1Ec,EkC+Ef;IAHC;MACE,2BAA0B,EAC3B;EAKH;IAII,elC1Ee;IkC2Ef,oBAAmB,EACpB;;AC5BH;EA1CA,mBAAkB;EAClB,mBAzByB;EA0BzB,cAtBoB;EAwBpB,yCnCFa;EmCGb,iBnCyCe;EmCxBf,wBAFsE;EAGtE,enCrBa,EmCwDZ;EAlDD;IACE,cAAa,EACd;EAED;IACE,iBAAgB,EACjB;EA4BD;IApBA,0BAFsE;IAGtE,enCrBa,EmC8CR;EANL;IApBA,0BAFsE;IAGtE,enCrBa,EmC8CR;EANL;IApBA,0BAFsE;IAGtE,enCrBa,EmC8CR;EANL;IApBA,0BAFsE;IAGtE,enCrBa,EmC8CR;EANL;IApBA,0BAFsE;IAGtE,enCrBa,EmC8CR;EANL;IAfA,oBAyBgC;IAxBhC,sBAwBgC;IAvBhC,uBAuBgC;IAtBhC,qBAsBgC,EAC7B;EAXH;IAfA,kBA6B8B;IA5B9B,oBA4B8B;IA3B9B,qBA2B8B;IA1B9B,mBA0B8B,EAC3B;;ACQH;EAlDA,oBpCWkB;EoCTlB,0BpC3BkB;EoC4BlB,iBpC4Be;EoC1Bf,oBpCda;EoCeb,yBAzCgB;UAyChB,iBAzCgB;EA2ChB,iBAAgB;EAChB,epCtBa,EoCiEZ;EAzCD;IACE,iBAAgB,EACjB;;AAyCD;EA5BA,cpCXmB;EoCYnB,oBpCpDkB,EoCiFjB;EA3BD;IACE,iBAAgB,EACjB;;AA2BD;EAhBA,cpC3BmB,EoC6ClB;EAhBD;IACE,iBAAgB,EACjB;;AAkBD;EACE,gBAAe,EAChB;;ACzDD;EA5BA,mBAAkB;EAClB,YAAW;EAEX,cAAa;EAEb,aArBoB;EAsBpB,cAtCqB;EAwCrB,mBAAkB;EAClB,0BrCXmB;EqCYnB,iBrCwCe;EqCvCf,0BrCDa;EqCGb,gBAjCuB,EAkDtB;EAbD;IACE,eAAc,EACf;EAED;IACE,eAAc;IACd,oBAAmB,EACpB;;AASC;EAEI,aA1CK,EA2CN;;AAHH;EAEI,aAzCM,EA0CP;;AAHH;EAEI,aAxCM,EAyCP;;ACmFL;EAnFA,eAAgC;EAChC,oBtCPkB,EsCuGjB;EpCND;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;EoCpGD;IACE,wBrCKqD;IqCJrD,iBtCQa;IsCPb,oBrCGqD;IqCGnD,cAAa,EAiBhB;IAfG;MAEE,sBAAqB,EACtB;IzCsED;MyCpFJ;QAuBM,sBAAqB,EAG1B,EAAA;EAGD;;IAEE,eAAc;IACd,4BrC1BqD;IqC2BrD,iBtCvBa;IsCwBb,etCpEW,EsCyEZ;IAHC;;MACE,oBtCnFc,EsCoFf;EAyCH;IA/BA,4BrC1CuD;IqC2CvD,oBtCxGgB;IsCyGhB,etChFa;IsCiFb,gBAAe,EAiCZ;EALH;IApBA,4BrCrDuD;IqCsDvD,etCtGmB;IsCuGnB,oBAAmB,EA2BhB;IAzBH;MACE,wBAAuB,EACxB;EAcD;IANA,4BrCnEuD;IqCoEvD,iBAAgB;IAChB,etC7Ga,EsC8HV;;AAID;;EAEE,sBAAqB;EACrB,qBAAsC;EACtC,iBAAgB,EACjB;;AAED;;EAEE,sBAAqB;EACrB,oBAAqC;EACrC,iBAAgB,EACjB;;ACtCH;EAnGA,mBAAkB;EAClB,sBAAqB;EAErB,kCvCZiB;EuCajB,kBvC+BuB;EuC9BvB,aAhDmB,EAgJlB;;AAED;EA9FA,mBAAkB;EAClB,4BAAwC;EACxC,cAAa;EAEb,iBAhCuB;EAiCvB,iBArCuB;EAuCvB,iBvCuBe;EuCtBf,0BvCtBa;EuCuBb,e5B4BmB;E4B3BnB,evCpBa,EuC0GZ;EApFD;IACE,mBAAkB,EACnB;EAGC;IrCrCF,eAAc;IACd,SAAQ;IACR,UAAS;IAET,sBqCJyB;IrCMzB,YAAW;IAQT,oBAAmB;IACnB,2BAA0B;IAC1B,8CFVW;IuCiCT,aAAY,EACb;EAED;IACE,UAAS;IACT,oCAA2B;QAA3B,gCAA2B;YAA3B,4BAA2B,EAC5B;EAID;IrCjDF,eAAc;IACd,SAAQ;IACR,UAAS;IAET,sBqCJyB;IrCMzB,YAAW;IAGT,uBAAsB;IACtB,wBAAuB;IACvB,8CAAqD;IqCwCnD,UAAS;IACT,aAAY,EACb;EAED;IACE,UAAS;IACT,oCAA2B;QAA3B,gCAA2B;YAA3B,4BAA2B,EAC5B;EAID;IrC9DF,eAAc;IACd,SAAQ;IACR,UAAS;IAET,sBqCJyB;IrCMzB,YAAW;IAaT,sBAAqB;IACrB,yBAAwB;IACxB,0DFfW;IuC0DT,WAAU,EACX;EAED;IACE,aAAY;IACZ,SAAQ;IACR,oCAA2B;QAA3B,gCAA2B;YAA3B,4BAA2B,EAC5B;EAID;IrC3EF,eAAc;IACd,SAAQ;IACR,UAAS;IAET,sBqCJyB;IrCMzB,YAAW;IAkBT,qBAAoB;IACpB,0BAAyB;IACzB,0DAAiE;IqCmD/D,YAAW;IACX,WAAU,EACX;EAED;IACE,aAAY;IACZ,SAAQ;IACR,oCAA2B;QAA3B,gCAA2B;YAA3B,4BAA2B,EAC5B;EAGH;IACE,aAAY;IACZ,SAAQ,EACT;EAED;IACE,YAAW;IACX,UAAS,EACV;EAED;IACE,UAAS;IACT,YAAW,EACZ;EAED;IACE,WAAU;IACV,WAAU,EACX;;ACRD;EAxFA,eAAgC;EAChC,oBxCDa;EwCEb,sBAAqB,EAwFpB;EArFC;IACE,oBAAmB,EACpB;;AAMH;EACE,uBAAgD,EACjD;;AAED;EACE,uBxCsBa,EwCrBd;;AA6ED;EAlEA,mBAAkB;EAClB,eAAc;EACd,sBAtDmC;EAwDnC,0BxClDkB;EwCmDlB,iBAAgB;EAEhB,mBvCDuD;EuCEvD,eAAc;EACd,exChEgB,EwC2Hf;EAzDD;IACE,iCxC1DgB;IwC2DhB,uBxCHa,EwCId;EAED;IAEE,0BxChEgB,EwCiEjB;EAGC;IACE,mBAAkB;IAClB,SAAQ;IACR,YAAsB;IACtB,oBAAmB;IACnB,aAAY,EACb;EAED;IACE,iBAAgB,EACjB;;AAsCH;EA3BA,cAAa;EACb,cAhF8B;EAkF9B,0BxC5FkB;EwC6FlB,iBAAgB;EAChB,0BxC9Ea;EwCgFb,exCpFa,EwC0GZ;EApBD;IACE,iCxCnGgB,EwCoGjB;;AC9BD;EApFA,eAAwC;EACxC,oBzCiDkB,EyCoCjB;EA/ED;IACE,gBAAe,EAChB;;AA+ED;EA7DE,oBAAmB;EACnB,oBAAmB,EA8DpB;EA3DD;IACE,oBzCsBiB,EyCrBlB;EAED;IACE,mBzCkBiB,EyCjBlB;EAED;IACE,iBAAgB,EACjB;E5C4GG;I4C1GJ;MAwBA,WAAU;MACV,qBzCdmB;MyCqBjB,eAAc,EA5Bf;MAJD;QAoCE,YAnFkC,EAoFnC,EAAA;EAzBC;IACE,uBAAsB,EACvB;EAED;IACE,uBAAsB,EACvB;;ACwEH;EArGA,mBAAkB,EAuGjB;;AAED;EApGA,mBAAkB;EAClB,UAAS;EACT,UAAS;EACT,iBAAgB;EAChB,iBAAgB,EAkGf;;AAED;EA/FA,YAAW;EACX,mBAAkB,EAgGjB;EA7FC;IACE,OAAM;IACN,QAAO,EACR;;AA4FH;EAvFA,UAAS,EAyFR;;AAED;EAtFA,YAAW;EACX,gBAAe;EACf,UAAS,EAsFR;;AAED;EAnFA,mBAAkB;EAClB,UAAS;EACT,YAAW;EACX,iBAAgB;EAChB,cA1D0B;EA4D1B,wC1ClDa;E0CmDb,e1C/Ca,E0C6HZ;;AAED;ExCsDA,mBAAkB;EAClB,SAAQ;EACR,oCAA2B;MAA3B,gCAA2B;UAA3B,4BAA2B;EwCjI3B,YAxDuB;EAyDvB,cA7D0B;EA8D1B,e1CxDa,E0CiIZ;E/Cg9ED;IO37EE,WAAU,EACX;EwC7FD;IAGE,wC1CjEW,E0CkEZ;;AAqED;EAhEA,QAAkB,EAmEjB;;AAED;EAhEA,WAAqB;EACrB,SAAmB,EAkElB;;AAED;EA9DA,mBAAkB;EAClB,mBA1G8B;EA2G9B,sBAvGiC;EAwGjC,mBAAkB,EA6DjB;E/Cm9ED;IO58EE,WAAU,EACX;EwCnED;IACE,cAvH0B;IAwH1B,eAxH0B;IAyH1B,eArHwB;IAuHxB,mBAAkB;IAClB,0B1CtGiB,E0C+GlB;IAPC;MACE,0B1CrGa,E0CsGd;IAED;MACE,0B1CzGa,E0C0Gd;;AC1GH;;EAnBA,mBAAkB;EAClB,UAAS;EACT,oB1C6DuD;E0C5DvD,oBC0CsB;EDzCtB,iBAAgB,EA0Bf;EAxBD;;;;;;;;IAIE,mBAAkB;IAClB,OAAM;IACN,QAAkB;IAClB,YAAW;IACX,aAAY,EACb;EAID;;IAQM,uBCkBgB,EDjBjB;;AE0FL;EAjFA,UApDY;EAqDZ,0B7C3BkB;E6C4BlB,oB7CZa;E6Cab,sBAAqB,EAgFpB;E3CwBD;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;;A2ChHD;EACE,eAAc;EACd,YAAW;EACX,YAAW,EACZ;;AA+ED;EAEI,WAAU,EAKX;EAPH;IAKM,wBAAuB,EACxB;;AAKL;EACE,oB7C1Ic,E6CoJf;EAXD;IAII,e7CpHS,E6C0HV;IAVH;MAQM,oBb9EyC,Ea+E1C;;AAIL;EA3FA,YAAO,EA6FN;EA3FD;IAEE,eAAc;IACd,wBAtD6B;IAuD7B,mB5CJqD;I4CKrD,eAAc;IACd,e7CnEc,E6C+Ef;IlDqnFC;MOrhFA,WAAU,EACX;I2C3GC;MACE,oB7C7CS;M6C8CT,eAA4C,EAC7C;IAED;MAEE,oB7CnEc;M6CoEd,e7C7EY,E6C8Eb;;AA4EH;EAlEA,0B7C/EkB;E6CgFlB,cAAa;EACb,oB7CjEa;E6CkEb,e7CtEa;E6CuEb,kCAAyB;EAAzB,0BAAyB,EAgExB;;AAED;EA3DA,0B7C1FkB;E6C2FlB,eAAgC,EA4D/B;;AAED;EAvDA,cAAa;EACb,cAlFwB,EA0IvB;EAtDD;IACE,eAAc,EACf;;AChFD;EAzBA,sBAAqB;EACrB,gBAAe;EACf,oB9CoCkB;E8ClClB,0B9Cca;E8Cbb,iB9CqDe;E8CpDf,oD9CQa;U8CRb,4C9CQa;E8CNb,eAAc,EAmBb;;AAED;EAjBA,sDApB8C;EAoB9C,8CApB8C;EAoB9C,sCApB8C;EAoB9C,yEApB8C,EAuC7C;EAjBD;IAEE,wD9CvBc;Y8CuBd,gD9CvBc,E8CwBf;EAED;IACE,yBAAgB;YAAhB,iBAAgB,EACjB;;AC6SD;EA/SA,WAAU;EACV,UAAS;EACT,iBAAgB;EAChB,mBAAkB,EAgajB;EpDszED;IOpkFE,WAAU,EACX;E6CxID;;IAEE,eAAc;IACd,sBAAqB;IACrB,eAAc;IACd,qB/CwB6B,E+CvB9B;EAGD;;;;IAIE,iBAAgB,EACjB;EAED;IACE,sBAAqB,EACtB;EA+FG;IACE,sBAAqB,EACtB;EASD;IACE,eAAc,EACf;EAmKL;IApQE,eAAc;IACd,YAAW,EAmRV;IAjRD;MACE,oBAAmB;MACnB,uBAAsB,EACvB;EA2GH;IACE,kBA5LqB,EA6LtB;EAED;IACE,WAAU,EACX;ElDjDG;IkDcA;MACE,sBAAqB,EACtB;IASD;MACE,eAAc,EACf;IAmKL;MApQE,eAAc;MACd,YAAW,EAsSR;MApSH;QACE,oBAAmB;QACnB,uBAAsB,EACvB;IA8PH;MApQE,eAAc;MACd,YAAW,EA0SR;MAxSH;QACE,oBAAmB;QACnB,uBAAsB,EACvB,EAAA;ElDgEC;IkDcA;MACE,sBAAqB,EACtB;IASD;MACE,eAAc,EACf;IAmKL;MApQE,eAAc;MACd,YAAW,EAsSR;MApSH;QACE,oBAAmB;QACnB,uBAAsB,EACvB;IA8PH;MApQE,eAAc;MACd,YAAW,EA0SR;MAxSH;QACE,oBAAmB;QACnB,uBAAsB,EACvB,EAAA;EA8PH;IA9HE,gBAAiC;IACjC,kB/CpI4B,E+C8S3B;EA7JD;;;IAGE,uBAAsB,EAKvB;IAHC;;;MACE,uBAAsB,EACvB;EAPH;;;;;;;;;IAGE,uBAAsB,EAKvB;IAHC;;;;;;;;;MACE,uBAAsB,EACvB;EAaD;;;IAGE,sBAzOmB;IA4OjB,sBAAqB,EAExB;EASD;;;IAGE,qBA1PmB;IA6PjB,sBAAqB,EAExB;EAIH;IAKI,mBAAkB,EAgBrB;IAbC;;;MAII,eAAc;MACd,uBAhRiB,EAuRpB;EAIH;IAKI,mBAAkB,EAgBrB;IAbC;;;MAII,eAAc;MACd,uBAAuB,EAO1B;EAmBL;IALA,oB/CpUgB;I+CqUhB,e/C5Sa,E+CqYV;EArFH;IALA,oB/CpUgB;I+CqUhB,e/C5Sa,E+C2YR;EA3FL;IAnPI,iB/CSqD,E+C2UtD;EAjGH;IA3NI,kB/CdsD,E+CmVvD;IAnUC;MACE,iB/ClBmD,E+CmBpD;IAGC;MACE,kB/CtBkD,E+CuBnD;IAkNP;MAlIE,mB/C/H4B;M+CgI5B,eAAgC,EA0O7B;EAzGL;IAlMI,mBAAkB,EAiTnB;IA/SC;MACE,iB/C3CmD,E+C4CpD;EA8LL;IAbA,qB/CvP+B;I+CyP/B,kBAAiB;IACjB,eAAc;IACd,eAAc,EA4HX;;AAID;EAzTE,mBAAkB,EAgUjB;EA9TD;IACE,iB/C3CmD,E+C4CpD;;AAiUL;EACE,cAAa,EACd;;ACxeD;E9CwGA,mBAAkB;EAClB,sBAAqB;EACrB,uBAAsB;EACtB,YAzBY;EA0BZ,aAzBa;EA0Bb,gBAAe,E8C3Gd;E9C8GD;IACE,mBAAkB;IAClB,OAAM;IACN,QAAO;IAEP,eAAc;IACd,YAAW;IACX,YAnCU;IAqCV,oBFtEW;IEuEX,sDFvEW;YEuEX,8CFvEW;IEyEX,YAAW,EACZ;EAUC;IACE,oBFjGe;IEkGf,sDFlGe;YEkGf,8CFlGe,EEmGhB;;A8CtIH;E9CoGA,mBAAkB;EAClB,sBAAqB;EACrB,uBAAsB;EACtB,YAzBY;EA0BZ,aAzBa;EA0Bb,gBAAe,E8CvGd;E9C0GD;IACE,mBAAkB;IAClB,OAAM;IACN,QAAO;IAEP,eAAc;IACd,YAAW;IACX,YAnCU;IAqCV,oBF1EW;IE2EX,sDF3EW;YE2EX,8CF3EW;IE6EX,YAAW,EACZ;EAUC;IACE,oBF7Fa;IE8Fb,sDF9Fa;YE8Fb,8CF9Fa,EE+Fd;;A+C9DH;EAWI,YAAW,EACZ;;AAZH;EAkBI,qBjDC2B,EiDA5B;;AAnBH;EAsBI,qBjDH2B,EiDI5B;;AAvBH;EFyJE,gBAAiC;EACjC,kB/CpI4B,EiDK3B;;AA3BH;EFqJE,mB/C/H4B;E+CgI5B,eAAgC,EEtH7B;;AAxDL;EACE,mBAAkB,EASnB;EAPC;I/CdF,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kB+CI4B;I/CF5B,YAAW;IAGT,uBAAsB;IACtB,wBAAuB;IACvB,8CAAqD;I+CKnD,mBAAkB;IAClB,SAAQ;IACR,iBAAgD;IAChD,YAAsB,EACvB;;AAGH;EACE,YAAW;EACX,WAAU,EACX;;AAED;EACE,YAAW;EACX,WAAU,EACX;;AAID;EAuCM,kCAAyB;MAAzB,8BAAyB;UAAzB,0BAAyB;EACzB,kCAAyB;MAAzB,8BAAyB;UAAzB,0BAAyB,EAC1B;;AAWL;EACE,mBAAkB,EACnB;;AAED;EACE,mBA5FqC,EA6FtC;;AAGD;EACE,mBAAkB;EAClB,OAAM;EACN,SAAmB;EAEnB,YArGqC;EAsGrC,aAtGqC;EAwGrC,gBAAe,EAgBhB;EAxBD;I/ChGA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kB+C8G6B;I/C5G7B,YAAW;IAGT,uBAAsB;IACtB,wBAAuB;IACvB,8CAAqD;I+CyGnD,OAAM;IACN,UAAS;IACT,aAAY,EACb;;AAIH;EACE,8BAAqB;MAArB,0BAAqB;UAArB,sBAAqB;EACrB,kCAAyB;MAAzB,8BAAyB;UAAzB,0BAAyB,EAC1B;;AAED;E/CwCA,8BAA6B;EAC7B,WAAU;EACV,YAAW;EACX,WAAU;EACV,iBAAgB;EAChB,uBAAmB;EACnB,oBAAmB;EACnB,UAAS,E+C7CR;;ACnGD;EACE,mBAAkB;EAClB,iBAAgB,EASjB;EAXD;IAKI,eAAc,EACf;EANH;IASI,gCAAuB;IAAvB,wBAAuB,EACxB;;AAIH;EAEI,qBlDO2B;EkDN3B,oBlDtCS,EkDuCV;;AAJH;EAQI,mBAAkB;EAClB,OAAM;EACN,WAAqB;EACrB,YAAW;EAEX,YAAW;EACX,oBlDjDS;EkDkDT,mDA5FuC;EA4FvC,2CA5FuC;EA4FvC,mCA5FuC;EA4FvC,mEA5FuC,EA4GxC;EA/BH;IAkBM,WAAU;IACV,eAAc;IACd,qCAAqE;QAArE,iCAAqE;YAArE,6BAAqE,EACtE;EArBL;IAwBM,oCAAqE;QAArE,gCAAqE;YAArE,4BAAqE,EACtE;EAzBL;IA6BM,qBlDpByB,EkDqB1B;;AA9BL;EH+IE,gBAAiC;EACjC,eGjNuB,EAoGtB;;AAnCH;EAsCI,iBAAgB,EACjB;;AAjFH;EACE,mBAAkB,EASnB;EAPC;IhDNF,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBgDJwB;IhDMxB,YAAW;IAaT,sBAAqB;IACrB,yBAAwB;IACxB,0DFpCc;IkDuBZ,mBAAkB;IAClB,SAAQ;IACR,iBAAsC;IACtC,YAAsB,EACvB;;AAGH;EhDfA,eAAc;EACd,SAAQ;EACR,UAAS;EAET,kBiD5B2B;EjD8B3B,YAAW;EAaT,sBAAqB;EACrB,yBAAwB;EACxB,0DFpCc;EkDgCd,YAAW;EACX,WAAU,EACX;;AAED;EhDrBA,eAAc;EACd,SAAQ;EACR,UAAS;EAET,kBiD5B2B;EjD8B3B,YAAW;EAkBT,qBAAoB;EACpB,0BAAyB;EACzB,0DAAiE;EgDHjE,YAAW;EACX,WAAU,EACX;;AAoBD;EhD7CA,eAAc;EACd,SAAQ;EACR,UAAS;EAET,kBgDJwB;EhDMxB,YAAW;EAkBT,qBAAoB;EACpB,0BAAyB;EACzB,0DAAiE;EgDiE7D,qBAA4C;EAC5C,sBAAqB;EACrB,uBAAsB;EACtB,sBAAuC,EACxC;;ACrDD;EACE,UAAS;EACT,SAAQ;EACR,WAAU,EACX;;AAID;EACE,UAAS;EACT,YAAW;EACX,QAAO,EACR;;AAID;EACE,mBAAkB;EAClB,sBAhF2B,EAiF5B;;AAED;EjD/DJ,eAAc;EACd,SAAQ;EACR,UAAS;EAET,kBiD5B2B;EjD8B3B,YAAW;EAGT,uBAAsB;EACtB,wBAAuB;EACvB,8CAAqD;EiDsDjD,WAAqB;EACrB,WAAqB;EACrB,iBAA+C,EAChD;;AxD6iGP;EOj9FI,WAAU,EACX;;AiD1DD;EAUI,qBnD3D2B,EmD4D5B;;AAXH;EAeI,wBAjG4C;EAkG5C,enDtIY,EmDuIb;;AAED;EACE,cAAa,EACd;;AArBH;EJqFE,gBAAiC;EACjC,eI7L0B,EAgIzB;;AAvDC;EACE,OAAM,EACP;;AAGC;EACE,OAAM;EACN,YAAW;EACX,WAAU,EACX;;AAID;EACE,YAAW;EACX,WAAU,EACX;;AAjEP;EACE,YAAsB,EACvB;;AAED;EjD5BA,eAAc;EACd,SAAQ;EACR,UAAS;EAET,kBiD5B2B;EjD8B3B,YAAW;EAkBT,qBAAoB;EACpB,0BAAyB;EACzB,0DAAiE;EiDIjE,YAAW;EACX,UAAS,EACV;;AAED;EjDlCA,eAAc;EACd,SAAQ;EACR,UAAS;EAET,kBiD5B2B;EjD8B3B,YAAW;EAaT,sBAAqB;EACrB,yBAAwB;EACxB,0DFpCc,EmDmDf;;AtDwFG;EsDlFA;IACE,UAAS;IACT,SAAQ;IACR,WAAU,EACX;EAID;IACE,UAAS;IACT,YAAW;IACX,QAAO,EACR;EAID;IACE,mBAAkB;IAClB,sBAhF2B,EAiF5B;EAED;IjD/DJ,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAGT,uBAAsB;IACtB,wBAAuB;IACvB,8CAAqD;IiDsDjD,WAAqB;IACrB,WAAqB;IACrB,iBAA+C,EAChD;EAKD;IACE,OAAM,EACP;EAGC;IACE,OAAM;IACN,YAAW;IACX,WAAU,EACX;EAID;IACE,YAAW;IACX,WAAU,EACX;EAjEP;IACE,YAAsB,EACvB;EAED;IjD5BA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAkBT,qBAAoB;IACpB,0BAAyB;IACzB,0DAAiE;IiDIjE,YAAW;IACX,UAAS,EACV;EAED;IjDlCA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAaT,sBAAqB;IACrB,yBAAwB;IACxB,0DFpCc,EmDmDf,EAAA;;AtDwFG;EsDlFA;IACE,UAAS;IACT,SAAQ;IACR,WAAU,EACX;EAID;IACE,UAAS;IACT,YAAW;IACX,QAAO,EACR;EAID;IACE,mBAAkB;IAClB,sBAhF2B,EAiF5B;EAED;IjD/DJ,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAGT,uBAAsB;IACtB,wBAAuB;IACvB,8CAAqD;IiDsDjD,WAAqB;IACrB,WAAqB;IACrB,iBAA+C,EAChD;EAKD;IACE,OAAM,EACP;EAGC;IACE,OAAM;IACN,YAAW;IACX,WAAU,EACX;EAID;IACE,YAAW;IACX,WAAU,EACX;EAjEP;IACE,YAAsB,EACvB;EAED;IjD5BA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAkBT,qBAAoB;IACpB,0BAAyB;IACzB,0DAAiE;IiDIjE,YAAW;IACX,UAAS,EACV;EAED;IjDlCA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAaT,sBAAqB;IACrB,yBAAwB;IACxB,0DFpCc,EmDmDf,EAAA;;AAmED;EA+CM,UAAS;EACT,SAAQ;EACR,WAAU,EACX;;AAIL;EACE,aAAY,EAKb;EAND;IAII,aAAY,EACb;;AAGH;EACE,mBAAkB,EA8BnB;EA/BD;IAII,mBAAkB;IAClB,SAAQ;IACR,WAAqB;IACrB,WAAqB;IACrB,iBAAyC,EAC1C;EATH;IAaI,UAAS;IAKP,WAAU,EAEb;EApBH;IAuBI,YAAW;IACX,WAAU,EACX;EAzBH;IA4BI,YAAW;IACX,WAAU,EACX;;AAGH;EACE,mBAAkB;EAClB,OAAM;EACN,WAAqB;EACrB,WAAU;EAEV,cAAa;EACb,iBA7N0B;EA+N1B,0BnDjNiB;EmDkNjB,oBnDtMW,EmDiOZ;EAzBC;IACE,qBnD7J2B,EmD8J5B;EA5LH;IACE,YAAsB,EACvB;EAED;IjD5BA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAkBT,qBAAoB;IACpB,0BAAyB;IACzB,0DAAiE;IiDIjE,YAAW;IACX,UAAS,EACV;EAED;IjDlCA,eAAc;IACd,SAAQ;IACR,UAAS;IAET,kBiD5B2B;IjD8B3B,YAAW;IAaT,sBAAqB;IACrB,yBAAwB;IACxB,0DFpCc,EmDmDf;EAkKD;IAwBM,iBAtNiB,EAuNlB;EAzBL;IA6BI,YAAW,EACZ;EA9BH;IAmCI,eAAc,EACf;;ACzLH;EACE,iBAAgB,EACjB;;AAGD;EACE,mBAAkB;EAClB,OAAM;EACN,QAAO;EACP,YA9DyB;EAgEzB,YAAW;EACX,aAAY;EAEZ,4DA/C8B;EA+C9B,oDA/C8B;EAiD9B,sCpDvDW;EoDyDX,WAAU;EACV,mBAAkB;EAElB,iBAAgB,EAkBjB;EAlCD;IAmBI,WAAU;IACV,oBAAmB,EACpB;EArBH;IAwBI,gBAAe,EAChB;EAzBH;IA4BI,mBAAkB,EACnB;EA7BH;IAgCI,gBAAe,EAChB;;AAwTH;EAlTA,mBAAkB;EAClB,iBAAgB,EAmTf;;AAGD;EA1SE,gBAAe;EAOjB,YAjHwB;EAwHxB,gDAxGgC;EAwGhC,wCAxGgC;EAwGhC,gCAxGgC;EAwGhC,6DAxGgC;EAyGhC,oCAA2B;UAA3B,4BAA2B;EAE3B,oBpDjIkB,EoDkajB;EzDk+FD;IO9tGE,WAAU,EACX;EkD7CD;IACE,YArHsB,EAsHvB;EAQD;IACE,mBAAkB,EACnB;EAGD;IACE,YAhIyB,EAqI1B;IAHC;MACE,mDpDjIS;coDiIT,2CpDjIS,EoDkIV;EAIH;IACE,mCAA0B;QAA1B,+BAA0B;YAA1B,2BAA0B,EAC3B;;AAiRD;EAlTE,mBAAkB;EAIpB,YAjHwB;EAwHxB,gDAxGgC;EAwGhC,wCAxGgC;EAwGhC,gCAxGgC;EAwGhC,6DAxGgC;EAyGhC,oCAA2B;UAA3B,4BAA2B;EAE3B,oBpDjIkB,EoDuajB;EzDg/FD;IOjvGE,WAAU,EACX;EkD7CD;IACE,YArHsB,EAsHvB;EAQD;IACE,mBAAkB,EACnB;EAGD;IACE,YAhIyB,EAqI1B;IAHC;MACE,mDpDjIS;coDiIT,2CpDjIS,EoDkIV;EAIH;IACE,mCAA0B;QAA1B,+BAA0B;YAA1B,2BAA0B,EAC3B;;AAsRD;EA5QE,OAAM;EACN,QAAO;EACP,aAAY;EACZ,iBAAgB;EAIZ,aA9LM;EA+LN,sCAA6B;MAA7B,kCAA6B;UAA7B,8BAA6B,EAoQqC;EA/P9D;IAIF,sCAA6B;QAA7B,kCAA6B;YAA7B,8BAA6B,EAMlC;IAVO;MAQJ,mCAA0B;UAA1B,+BAA0B;cAA1B,2BAA0B,EAC3B;EAIK;IAIA,qCAA4B;QAA5B,iCAA4B;YAA5B,6BAA4B,EAGjC;EAoHH;IlD7TA,oEFsBW;YEtBX,4DFsBW,EoDoTV;;AA2GH;EAxOE,OAAM;EACN,SAAQ;EACR,aAAY;EACZ,iBAAgB;EAIZ,aAnOM;EAoON,qCAA4B;MAA5B,iCAA4B;UAA5B,6BAA4B,EAgOsC;EA3N9D;IAIF,qCAA4B;QAA5B,iCAA4B;YAA5B,6BAA4B,EAMjC;IAVO;MAQJ,mCAA0B;UAA1B,+BAA0B;cAA1B,2BAA0B,EAC3B;EAIK;IAIA,sCAA6B;QAA7B,kCAA6B;YAA7B,8BAA6B,EAGlC;EA+EH;IlD/TA,mEFwBW;YExBX,2DFwBW,EoDoTV;;AA4GH;EApME,OAAM;EACN,QAAO;EACP,YAAW;EACX,iBAAgB;EAIZ,cAlQM;EAmQN,sCAA6B;MAA7B,kCAA6B;UAA7B,8BAA6B,EA4LmC;EAvL5D;IAGF,sCAA6B;QAA7B,kCAA6B;YAA7B,8BAA6B,EAMlC;IATO;MAOJ,mCAA0B;UAA1B,+BAA0B;cAA1B,2BAA0B,EAC3B;EAIK;IAIA,qCAA4B;QAA5B,iCAA4B;YAA5B,6BAA4B,EAGjC;EA2CH;IlD3TA,oEFoBW;YEpBX,4DFoBW,EoDoTV;;AA6GH;EAjKE,UAAS;EACT,QAAO;EACP,YAAW;EACX,iBAAgB;EAIZ,cAtSM;EAuSN,qCAA4B;MAA5B,iCAA4B;UAA5B,6BAA4B,EAyJoC;EApJ5D;IAGF,qCAA4B;QAA5B,iCAA4B;YAA5B,6BAA4B,EAMjC;IATO;MAOJ,mCAA0B;UAA1B,+BAA0B;cAA1B,2BAA0B,EAC3B;EAIK;IAIA,sCAA6B;QAA7B,kCAA6B;YAA7B,8BAA6B,EAGlC;EAOH;IlDjUA,mEF0BW;YE1BX,2DF0BW,EoDoTV;;AA+GH;EAxGA,wBAAe;MAAf,oBAAe;UAAf,gBAAe;EACf,gDAlTgC;EAkThC,wCAlTgC;EAkThC,gCAlTgC;EAkThC,6DAlTgC;EAmThC,oCAA2B;UAA3B,4BAA2B,EAwG1B;EArGD;IACE,mCAA0B;QAA1B,+BAA0B;YAA1B,2BAA0B,EAC3B;EAGD;IACE,mCAA0B;QAA1B,+BAA0B;YAA1B,2BAA0B,EAC3B;;AvDjNG;EuDqTE;IA1FN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EAyFZ;IAnFP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,mBAzYU,EA0YX;IAGD;MACE,mBA9YU,EA+YX;EAqEK;IA9FN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EA6FZ;IAvFP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,oBAzYU,EA0YX;IAGD;MACE,oBA9YU,EA+YX;EAyEK;IAlGN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EAiGZ;IA3FP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,kBAzYU,EA0YX;IAGD;MACE,kBA9YU,EA+YX;EA6EK;IAtGN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EAqGZ;IA/FP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,qBAzYU,EA0YX;IAGD;MACE,qBA9YU,EA+YX,EAAA;;AvDpPG;EuDqTE;IA1FN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EAyFZ;IAnFP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,mBAzYU,EA0YX;IAGD;MACE,mBA9YU,EA+YX;EAqEK;IA9FN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EA6FZ;IAvFP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,oBAzYU,EA0YX;IAGD;MACE,oBA9YU,EA+YX;EAyEK;IAlGN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EAiGZ;IA3FP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,kBAzYU,EA0YX;IAGD;MACE,kBA9YU,EA+YX;EA6EK;IAtGN,wBAAe;QAAf,oBAAe;YAAf,gBAAe;IACf,YAhV0B;IAiV1B,yBAAgB;IAAhB,iBAAgB;IAChB,oBAAmB,EAqGZ;IA/FP;MACE,cAAa,EACd;IAGD;MACE,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAEO;MACN,qBAzYU,EA0YX;IAGD;MACE,qBA9YU,EA+YX,EAAA;;AvDpPG;EuD4UE;IAnFN,oBAAmB;IACnB,aAAY;IACZ,iBAAgB;IAChB,iBAAgB;IAChB,YAAW;IACX,kBAAiB;IACjB,yBAAgB;IAAhB,iBAAgB,EA+ET;IA5EP;MAIE,yBAAgB;cAAhB,iBAAgB;MAChB,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAED;MACE,cAAa,EACd,EAAA;;AvD5QG;EuD4UE;IAnFN,oBAAmB;IACnB,aAAY;IACZ,iBAAgB;IAChB,iBAAgB;IAChB,YAAW;IACX,kBAAiB;IACjB,yBAAgB;IAAhB,iBAAgB,EA+ET;IA5EP;MAIE,yBAAgB;cAAhB,iBAAgB;MAChB,wBAAe;UAAf,oBAAe;cAAf,gBAAe,EAChB;IAED;MACE,cAAa,EACd,EAAA;;AtD9SD;EACE,gBAAe;EACf,YAAW;EACX,mBAAkB,EASnB;EAZD;IAMI,mBAAkB,EACnB;EAPH;IAUI,mBAAkB,EACnB;;AAIH;EA3FA,gBAAe;EACf,OAAM;EACN,SAAQ;EACR,UAAS;EACT,QAAO;EACP,cA3BkB;EA6BlB,cAAa;EACb,yCEhBa;EFiBb,iBAAgB,EAoFf;;AAGD;EAjFA,cArCkB;EAuClB,oCAA2B;UAA3B,4BAA2B;EAE3B,cAAa;EACb,cEAmB;EFEnB,0BEtCmB;EFuCnB,iBEae;EFZf,0BE5Ba;EFuGX,mBAAkB;EAClB,WAAU;EACV,mBAAkB;EAClB,kBAAiB;EACjB,iBAAgB,EAwBjB;EHqgHD;IOl/GE,WAAU,EACX;ELrCG;ICdJ;MArEE,cAAa,EAoGd,EAAA;EAhGD;IACE,aAAY,EACb;EAGD;IACE,iBAAgB,EACjB;EDwEG;ICdJ;MA7CE,aA7FgB;MA8FhB,iBGpBqD,EH+FtD,EAAA;EA/BD;IAWI,WAAU,EACX;EDEC;ICdJ;MA7CE,WA4DyC;MA3DzC,iBGpBqD,EH+EP,EAAA;EDD5C;ICdJ;MA7CE,WA6DyC;MA5DzC,iBGpBqD,EHgFP,EAAA;EDF5C;ICdJ;MA7CE,WA8DyC;MA7DzC,iBGpBqD,EHiFP,EAAA;EAjBhD;IAtCA,OAAM;IACN,SAAQ;IACR,UAAS;IACT,QAAO;IAEP,YAAW;IACX,gBAAe;IACf,aAAY;IACZ,iBAAgB;IAChB,eAAc;IAEd,UAAS;IACT,iBAAgB,EAgDb;EDHC;ICnBJ;MAtCA,OAAM;MACN,SAAQ;MACR,UAAS;MACT,QAAO;MAEP,YAAW;MACX,gBAAe;MACf,aAAY;MACZ,iBAAgB;MAChB,eAAc;MAEd,UAAS;MACT,iBAAgB,EAyDf,EAAA;EA/BD;IA6BI,gBAAe,EAChB;;AuDjLH;EACE,mBAAkB,EACnB;;AAED;EACE,mBAAkB;EAClB,WAAU;EACV,wCAA+B;UAA/B,gCAA+B,EAChC;;AAED;EACE,gBAAe;EACf,WAAU;EACV,YAAW,EASZ;EAZD;IAMI,OAAM,EACP;EAPH;IAUI,UAAS,EACV;;AAGH;EACE,mBAAkB;EAClB,YAAW;EACX,WAAU,EAKX;EARD;IAMI,UAAS,EACV;;ACCH;EACE,gBApBqB;EAqBrB,oBtDSW;EsDRX,etDYW,EsDGZ;EpDkHD;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;EoDjJD;IAeI,qBAlByB;IAmBzB,sBAnByB,EAoB1B;;AAcD;EACE,YAAW,EACZ;;AAED;EACE,aAAY;EACZ,kBAAiB,EAClB;;AAGH;EACE,sBAAqB;EACrB,uBAAsB;EACtB,kBA3D4B,EA4D7B;;ACuCD;EA7EA,gBAlCqB,EAmIpB;ErD4BD;IAEE,eAAc;IACd,aAAY,EAMb;EAED;IACE,YAAW,EACZ;EqDxID;;IAEE,0BvDZgB,EuDajB;EAUD;IACE,iBAlCsB;IAmCtB,mBAAoC,EACrC;EAGD;IACE,YAAW;IACX,gBAAiC,EAClC;EAED;IACE,YAAW,EACZ;EAiBC;;IAEE,YAAW,EACZ;E1D0EC;I0D7EF;;MAyBE,YAAW,EACZ,EAAA;E1DwDC;I0DlFF;;MAEE,YAAW,EACZ,EAAA;E1D+EC;I0DlFF;;MAEE,YAAW,EACZ,EAAA;;AAgED;EACE,sBAAqB;EACrB,YAAW;EACX,8BAzIqC,EA8ItC;EARD;IAMI,YAAW,EACZ;;AAGH;EACE,YAAW,EACZ;;AAED;EACE,aAAY,EACb;;ACnKH;EACE,uBAAsB,EACvB;;AAED;EACE,wBAAuB,EACxB;;AAED;EACE,eAAc;EACd,mBAAkB;EAClB,kBAAiB,EAClB;;AtDoJD;EAEE,eAAc;EACd,aAAY,EAMb;;AAED;EACE,YAAW,EACZ;;AuDtHD;EACE,yBAAwB,EACzB;;AAED;EACE,mBAAkB,EACnB;;A5DqGG;E4DvFF;IA1BA,yBAAwB,EA4BvB,EAAA;;AA/CD;EAiDA;IAhDE,yBAAwB,EAkDzB,EAAA;;A5D4EC;E4D3FA;IAzBF,yBAAwB,EA2BrB,EAAA;;A5D8FD;E4D5FA;IAjEF,yBAAwB,EAmErB,EAAA;;A5D0FD;E4DvFF;IA1BA,yBAAwB,EA4BvB,EAAA;;AA/CD;EAiDA;IAhDE,yBAAwB,EAkDzB,EAAA;;A5D4EC;E4D3FA;IAzBF,yBAAwB,EA2BrB,EAAA;;A5D8FD;E4D5FA;IAjEF,yBAAwB,EAmErB,EAAA;;A5D0FD;E4DvFF;IA1BA,yBAAwB,EA4BvB,EAAA;;AA/CD;EAiDA;IAhDE,yBAAwB,EAkDzB,EAAA;;AAKH;;EvDmHA,8BAA6B;EAC7B,WAAU;EACV,YAAW;EACX,WAAU;EACV,iBAAgB;EAChB,uBAAmB;EACnB,oBAAmB;EACnB,UAAS,EuDvHR;;AAGD;EvDyHA,4BAA2B;EAC3B,YAAW;EACX,aAAY;EACZ,kBAAiB;EACjB,WAAU;EACV,oBAAmB,EuD1HhB;;AAIH;;EAEE,0BAAyB,EAS1B;E5DmDG;I4D9DJ;;MAKI,0BAAyB,EAM5B,EAAA;E5DmDG;I4D9DJ;;MASI,yBAAwB,EAE3B,EAAA;;AAED;;EAEE,yBAAwB,EASzB;E5DsCG;I4DjDJ;;MAKI,yBAAwB,EAM3B,EAAA;E5DsCG;I4DjDJ;;MASI,0BAAyB,EAE5B,EAAA","file":"foundation-float.css","sourcesContent":["@charset \"UTF-8\";\n/**\n * Foundation for Sites by ZURB\n * Version 6.5.0-rc.3\n * foundation.zurb.com\n * Licensed under MIT Open Source\n */\n@media print, screen and (min-width: 40em) {\n .reveal, .reveal.tiny, .reveal.small, .reveal.large {\n right: auto;\n left: auto;\n margin: 0 auto; } }\n\n/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */\nhtml {\n line-height: 1.15;\n -webkit-text-size-adjust: 100%; }\n\nbody {\n margin: 0; }\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible; }\n\npre {\n font-family: monospace, monospace;\n font-size: 1em; }\n\na {\n background-color: transparent; }\n\nabbr[title] {\n border-bottom: none;\n text-decoration: underline;\n text-decoration: underline dotted; }\n\nb,\nstrong {\n font-weight: bolder; }\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em; }\n\nsmall {\n font-size: 80%; }\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsub {\n bottom: -0.25em; }\n\nsup {\n top: -0.5em; }\n\nimg {\n border-style: none; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit;\n font-size: 100%;\n line-height: 1.15;\n margin: 0; }\n\nbutton,\ninput {\n overflow: visible; }\n\nbutton,\nselect {\n text-transform: none; }\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; }\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0; }\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText; }\n\nfieldset {\n padding: 0.35em 0.75em 0.625em; }\n\nlegend {\n box-sizing: border-box;\n color: inherit;\n display: table;\n max-width: 100%;\n padding: 0;\n white-space: normal; }\n\nprogress {\n vertical-align: baseline; }\n\ntextarea {\n overflow: auto; }\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0; }\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto; }\n\n[type=\"search\"] {\n -webkit-appearance: textfield;\n outline-offset: -2px; }\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none; }\n\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n font: inherit; }\n\ndetails {\n display: block; }\n\nsummary {\n display: list-item; }\n\ntemplate {\n display: none; }\n\n[hidden] {\n display: none; }\n\n.foundation-mq {\n font-family: \"small=0em&medium=40em&large=64em&xlarge=75em&xxlarge=90em\"; }\n\nhtml {\n box-sizing: border-box;\n font-size: 100%; }\n\n*,\n*::before,\n*::after {\n box-sizing: inherit; }\n\nbody {\n margin: 0;\n padding: 0;\n background: #fefefe;\n font-family: \"Helvetica Neue\", Helvetica, Roboto, Arial, sans-serif;\n font-weight: normal;\n line-height: 1.5;\n color: #0a0a0a;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale; }\n\nimg {\n display: inline-block;\n vertical-align: middle;\n max-width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic; }\n\ntextarea {\n height: auto;\n min-height: 50px;\n border-radius: 0; }\n\nselect {\n box-sizing: border-box;\n width: 100%;\n border-radius: 0; }\n\n.map_canvas img,\n.map_canvas embed,\n.map_canvas object,\n.mqa-display img,\n.mqa-display embed,\n.mqa-display object {\n max-width: none !important; }\n\nbutton {\n padding: 0;\n appearance: none;\n border: 0;\n border-radius: 0;\n background: transparent;\n line-height: 1;\n cursor: auto; }\n [data-whatinput='mouse'] button {\n outline: 0; }\n\npre {\n overflow: auto; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; }\n\n.is-visible {\n display: block !important; }\n\n.is-hidden {\n display: none !important; }\n\n[type='text'], [type='password'], [type='date'], [type='datetime'], [type='datetime-local'], [type='month'], [type='week'], [type='email'], [type='number'], [type='search'], [type='tel'], [type='time'], [type='url'], [type='color'],\ntextarea {\n display: block;\n box-sizing: border-box;\n width: 100%;\n height: 2.4375rem;\n margin: 0 0 1rem;\n padding: 0.5rem;\n border: 1px solid #cacaca;\n border-radius: 0;\n background-color: #fefefe;\n box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.1);\n font-family: inherit;\n font-size: 1rem;\n font-weight: normal;\n line-height: 1.5;\n color: #0a0a0a;\n transition: box-shadow 0.5s, border-color 0.25s ease-in-out;\n appearance: none; }\n [type='text']:focus, [type='password']:focus, [type='date']:focus, [type='datetime']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='week']:focus, [type='email']:focus, [type='number']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='url']:focus, [type='color']:focus,\n textarea:focus {\n outline: none;\n border: 1px solid #8a8a8a;\n background-color: #fefefe;\n box-shadow: 0 0 5px #cacaca;\n transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }\n\ntextarea {\n max-width: 100%; }\n textarea[rows] {\n height: auto; }\n\ninput:disabled, input[readonly],\ntextarea:disabled,\ntextarea[readonly] {\n background-color: #e6e6e6;\n cursor: not-allowed; }\n\n[type='submit'],\n[type='button'] {\n appearance: none;\n border-radius: 0; }\n\ninput[type='search'] {\n box-sizing: border-box; }\n\n::placeholder {\n color: #cacaca; }\n\n[type='file'],\n[type='checkbox'],\n[type='radio'] {\n margin: 0 0 1rem; }\n\n[type='checkbox'] + label,\n[type='radio'] + label {\n display: inline-block;\n vertical-align: baseline;\n margin-left: 0.5rem;\n margin-right: 1rem;\n margin-bottom: 0; }\n [type='checkbox'] + label[for],\n [type='radio'] + label[for] {\n cursor: pointer; }\n\nlabel > [type='checkbox'],\nlabel > [type='radio'] {\n margin-right: 0.5rem; }\n\n[type='file'] {\n width: 100%; }\n\nlabel {\n display: block;\n margin: 0;\n font-size: 0.875rem;\n font-weight: normal;\n line-height: 1.8;\n color: #0a0a0a; }\n label.middle {\n margin: 0 0 1rem;\n padding: 0.5625rem 0; }\n\n.help-text {\n margin-top: -0.5rem;\n font-size: 0.8125rem;\n font-style: italic;\n color: #0a0a0a; }\n\n.input-group {\n display: table;\n width: 100%;\n margin-bottom: 1rem; }\n .input-group > :first-child, .input-group > :first-child.input-group-button > * {\n border-radius: 0 0 0 0; }\n .input-group > :last-child, .input-group > :last-child.input-group-button > * {\n border-radius: 0 0 0 0; }\n\n.input-group-label, .input-group-field, .input-group-button, .input-group-button a,\n.input-group-button input,\n.input-group-button button,\n.input-group-button label {\n margin: 0;\n white-space: nowrap;\n display: table-cell;\n vertical-align: middle; }\n\n.input-group-label {\n padding: 0 1rem;\n border: 1px solid #cacaca;\n background: #e6e6e6;\n color: #0a0a0a;\n text-align: center;\n white-space: nowrap;\n width: 1%;\n height: 100%; }\n .input-group-label:first-child {\n border-right: 0; }\n .input-group-label:last-child {\n border-left: 0; }\n\n.input-group-field {\n border-radius: 0; }\n\n.input-group-button {\n padding-top: 0;\n padding-bottom: 0;\n text-align: center;\n width: 1%;\n height: 100%; }\n .input-group-button a,\n .input-group-button input,\n .input-group-button button,\n .input-group-button label {\n height: 2.4375rem;\n padding-top: 0;\n padding-bottom: 0;\n font-size: 1rem; }\n\n.input-group .input-group-button {\n display: table-cell; }\n\nfieldset {\n margin: 0;\n padding: 0;\n border: 0; }\n\nlegend {\n max-width: 100%;\n margin-bottom: 0.5rem; }\n\n.fieldset {\n margin: 1.125rem 0;\n padding: 1.25rem;\n border: 1px solid #cacaca; }\n .fieldset legend {\n margin: 0;\n margin-left: -0.1875rem;\n padding: 0 0.1875rem; }\n\nselect {\n height: 2.4375rem;\n margin: 0 0 1rem;\n padding: 0.5rem;\n appearance: none;\n border: 1px solid #cacaca;\n border-radius: 0;\n background-color: #fefefe;\n font-family: inherit;\n font-size: 1rem;\n font-weight: normal;\n line-height: 1.5;\n color: #0a0a0a;\n background-image: url(\"data:image/svg+xml;utf8,\");\n background-origin: content-box;\n background-position: right -1rem center;\n background-repeat: no-repeat;\n background-size: 9px 6px;\n padding-right: 1.5rem;\n transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }\n @media screen and (min-width: 0\\0) {\n select {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==\"); } }\n select:focus {\n outline: none;\n border: 1px solid #8a8a8a;\n background-color: #fefefe;\n box-shadow: 0 0 5px #cacaca;\n transition: box-shadow 0.5s, border-color 0.25s ease-in-out; }\n select:disabled {\n background-color: #e6e6e6;\n cursor: not-allowed; }\n select::-ms-expand {\n display: none; }\n select[multiple] {\n height: auto;\n background-image: none; }\n\n.is-invalid-input:not(:focus) {\n border-color: #cc4b37;\n background-color: #f9ecea; }\n .is-invalid-input:not(:focus)::placeholder {\n color: #cc4b37; }\n\n.is-invalid-label {\n color: #cc4b37; }\n\n.form-error {\n display: none;\n margin-top: -0.5rem;\n margin-bottom: 1rem;\n font-size: 0.75rem;\n font-weight: bold;\n color: #cc4b37; }\n .form-error.is-visible {\n display: block; }\n\ndiv,\ndl,\ndt,\ndd,\nul,\nol,\nli,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\npre,\nform,\np,\nblockquote,\nth,\ntd {\n margin: 0;\n padding: 0; }\n\np {\n margin-bottom: 1rem;\n font-size: inherit;\n line-height: 1.6;\n text-rendering: optimizeLegibility; }\n\nem,\ni {\n font-style: italic;\n line-height: inherit; }\n\nstrong,\nb {\n font-weight: bold;\n line-height: inherit; }\n\nsmall {\n font-size: 80%;\n line-height: inherit; }\n\nh1, .h1,\nh2, .h2,\nh3, .h3,\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n font-family: \"Helvetica Neue\", Helvetica, Roboto, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n color: inherit;\n text-rendering: optimizeLegibility; }\n h1 small, .h1 small,\n h2 small, .h2 small,\n h3 small, .h3 small,\n h4 small, .h4 small,\n h5 small, .h5 small,\n h6 small, .h6 small {\n line-height: 0;\n color: #cacaca; }\n\nh1, .h1 {\n font-size: 1.5rem;\n line-height: 1.4;\n margin-top: 0;\n margin-bottom: 0.5rem; }\n\nh2, .h2 {\n font-size: 1.25rem;\n line-height: 1.4;\n margin-top: 0;\n margin-bottom: 0.5rem; }\n\nh3, .h3 {\n font-size: 1.1875rem;\n line-height: 1.4;\n margin-top: 0;\n margin-bottom: 0.5rem; }\n\nh4, .h4 {\n font-size: 1.125rem;\n line-height: 1.4;\n margin-top: 0;\n margin-bottom: 0.5rem; }\n\nh5, .h5 {\n font-size: 1.0625rem;\n line-height: 1.4;\n margin-top: 0;\n margin-bottom: 0.5rem; }\n\nh6, .h6 {\n font-size: 1rem;\n line-height: 1.4;\n margin-top: 0;\n margin-bottom: 0.5rem; }\n\n@media print, screen and (min-width: 40em) {\n h1, .h1 {\n font-size: 3rem; }\n h2, .h2 {\n font-size: 2.5rem; }\n h3, .h3 {\n font-size: 1.9375rem; }\n h4, .h4 {\n font-size: 1.5625rem; }\n h5, .h5 {\n font-size: 1.25rem; }\n h6, .h6 {\n font-size: 1rem; } }\n\na {\n line-height: inherit;\n color: #1779ba;\n text-decoration: none;\n cursor: pointer; }\n a:hover, a:focus {\n color: #1468a0; }\n a img {\n border: 0; }\n\nhr {\n clear: both;\n max-width: 75rem;\n height: 0;\n margin: 1.25rem auto;\n border-top: 0;\n border-right: 0;\n border-bottom: 1px solid #cacaca;\n border-left: 0; }\n\nul,\nol,\ndl {\n margin-bottom: 1rem;\n list-style-position: outside;\n line-height: 1.6; }\n\nli {\n font-size: inherit; }\n\nul {\n margin-left: 1.25rem;\n list-style-type: disc; }\n\nol {\n margin-left: 1.25rem; }\n\nul ul, ol ul, ul ol, ol ol {\n margin-left: 1.25rem;\n margin-bottom: 0; }\n\ndl {\n margin-bottom: 1rem; }\n dl dt {\n margin-bottom: 0.3rem;\n font-weight: bold; }\n\nblockquote {\n margin: 0 0 1rem;\n padding: 0.5625rem 1.25rem 0 1.1875rem;\n border-left: 1px solid #cacaca; }\n blockquote, blockquote p {\n line-height: 1.6;\n color: #8a8a8a; }\n\ncite {\n display: block;\n font-size: 0.8125rem;\n color: #8a8a8a; }\n cite:before {\n content: \"— \"; }\n\nabbr, abbr[title] {\n border-bottom: 1px dotted #0a0a0a;\n cursor: help;\n text-decoration: none; }\n\nfigure {\n margin: 0; }\n\ncode {\n padding: 0.125rem 0.3125rem 0.0625rem;\n border: 1px solid #cacaca;\n background-color: #e6e6e6;\n font-family: Consolas, \"Liberation Mono\", Courier, monospace;\n font-weight: normal;\n color: #0a0a0a; }\n\nkbd {\n margin: 0;\n padding: 0.125rem 0.25rem 0;\n background-color: #e6e6e6;\n font-family: Consolas, \"Liberation Mono\", Courier, monospace;\n color: #0a0a0a; }\n\n.subheader {\n margin-top: 0.2rem;\n margin-bottom: 0.5rem;\n font-weight: normal;\n line-height: 1.4;\n color: #8a8a8a; }\n\n.lead {\n font-size: 125%;\n line-height: 1.6; }\n\n.stat {\n font-size: 2.5rem;\n line-height: 1; }\n p + .stat {\n margin-top: -1rem; }\n\nul.no-bullet, ol.no-bullet {\n margin-left: 0;\n list-style: none; }\n\n.text-left {\n text-align: left; }\n\n.text-right {\n text-align: right; }\n\n.text-center {\n text-align: center; }\n\n.text-justify {\n text-align: justify; }\n\n@media print, screen and (min-width: 40em) {\n .medium-text-left {\n text-align: left; }\n .medium-text-right {\n text-align: right; }\n .medium-text-center {\n text-align: center; }\n .medium-text-justify {\n text-align: justify; } }\n\n@media print, screen and (min-width: 64em) {\n .large-text-left {\n text-align: left; }\n .large-text-right {\n text-align: right; }\n .large-text-center {\n text-align: center; }\n .large-text-justify {\n text-align: justify; } }\n\n.show-for-print {\n display: none !important; }\n\n@media print {\n * {\n background: transparent !important;\n box-shadow: none !important;\n color: black !important;\n text-shadow: none !important; }\n .show-for-print {\n display: block !important; }\n .hide-for-print {\n display: none !important; }\n table.show-for-print {\n display: table !important; }\n thead.show-for-print {\n display: table-header-group !important; }\n tbody.show-for-print {\n display: table-row-group !important; }\n tr.show-for-print {\n display: table-row !important; }\n td.show-for-print {\n display: table-cell !important; }\n th.show-for-print {\n display: table-cell !important; }\n a,\n a:visited {\n text-decoration: underline; }\n a[href]:after {\n content: \" (\" attr(href) \")\"; }\n .ir a:after,\n a[href^='javascript:']:after,\n a[href^='#']:after {\n content: ''; }\n abbr[title]:after {\n content: \" (\" attr(title) \")\"; }\n pre,\n blockquote {\n border: 1px solid #8a8a8a;\n page-break-inside: avoid; }\n thead {\n display: table-header-group; }\n tr,\n img {\n page-break-inside: avoid; }\n img {\n max-width: 100% !important; }\n @page {\n margin: 0.5cm; }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3; }\n h2,\n h3 {\n page-break-after: avoid; }\n .print-break-inside {\n page-break-inside: auto; } }\n\n.row {\n max-width: 75rem;\n margin-right: auto;\n margin-left: auto; }\n .row::before, .row::after {\n display: table;\n content: ' '; }\n .row::after {\n clear: both; }\n .row.collapse > .column, .row.collapse > .columns {\n padding-right: 0;\n padding-left: 0; }\n .row .row {\n margin-right: -0.625rem;\n margin-left: -0.625rem; }\n @media print, screen and (min-width: 40em) {\n .row .row {\n margin-right: -0.9375rem;\n margin-left: -0.9375rem; } }\n @media print, screen and (min-width: 64em) {\n .row .row {\n margin-right: -0.9375rem;\n margin-left: -0.9375rem; } }\n .row .row.collapse {\n margin-right: 0;\n margin-left: 0; }\n .row.expanded {\n max-width: none; }\n .row.expanded .row {\n margin-right: auto;\n margin-left: auto; }\n .row:not(.expanded) .row {\n max-width: none; }\n .row.gutter-small > .column, .row.gutter-small > .columns {\n padding-right: 0.625rem;\n padding-left: 0.625rem; }\n .row.gutter-medium > .column, .row.gutter-medium > .columns {\n padding-right: 0.9375rem;\n padding-left: 0.9375rem; }\n\n.column, .columns {\n width: 100%;\n float: left;\n padding-right: 0.625rem;\n padding-left: 0.625rem; }\n @media print, screen and (min-width: 40em) {\n .column, .columns {\n padding-right: 0.9375rem;\n padding-left: 0.9375rem; } }\n .column, .columns, .column:last-child:not(:first-child), .columns:last-child:not(:first-child) {\n float: left;\n clear: none; }\n .column:last-child:not(:first-child), .columns:last-child:not(:first-child) {\n float: right; }\n .column.end:last-child:last-child, .end.columns:last-child:last-child {\n float: left; }\n\n.column.row.row, .row.row.columns {\n float: none; }\n\n.row .column.row.row, .row .row.row.columns {\n margin-right: 0;\n margin-left: 0;\n padding-right: 0;\n padding-left: 0; }\n\n.small-1 {\n width: 8.33333%; }\n\n.small-push-1 {\n position: relative;\n left: 8.33333%; }\n\n.small-pull-1 {\n position: relative;\n left: -8.33333%; }\n\n.small-offset-0 {\n margin-left: 0%; }\n\n.small-2 {\n width: 16.66667%; }\n\n.small-push-2 {\n position: relative;\n left: 16.66667%; }\n\n.small-pull-2 {\n position: relative;\n left: -16.66667%; }\n\n.small-offset-1 {\n margin-left: 8.33333%; }\n\n.small-3 {\n width: 25%; }\n\n.small-push-3 {\n position: relative;\n left: 25%; }\n\n.small-pull-3 {\n position: relative;\n left: -25%; }\n\n.small-offset-2 {\n margin-left: 16.66667%; }\n\n.small-4 {\n width: 33.33333%; }\n\n.small-push-4 {\n position: relative;\n left: 33.33333%; }\n\n.small-pull-4 {\n position: relative;\n left: -33.33333%; }\n\n.small-offset-3 {\n margin-left: 25%; }\n\n.small-5 {\n width: 41.66667%; }\n\n.small-push-5 {\n position: relative;\n left: 41.66667%; }\n\n.small-pull-5 {\n position: relative;\n left: -41.66667%; }\n\n.small-offset-4 {\n margin-left: 33.33333%; }\n\n.small-6 {\n width: 50%; }\n\n.small-push-6 {\n position: relative;\n left: 50%; }\n\n.small-pull-6 {\n position: relative;\n left: -50%; }\n\n.small-offset-5 {\n margin-left: 41.66667%; }\n\n.small-7 {\n width: 58.33333%; }\n\n.small-push-7 {\n position: relative;\n left: 58.33333%; }\n\n.small-pull-7 {\n position: relative;\n left: -58.33333%; }\n\n.small-offset-6 {\n margin-left: 50%; }\n\n.small-8 {\n width: 66.66667%; }\n\n.small-push-8 {\n position: relative;\n left: 66.66667%; }\n\n.small-pull-8 {\n position: relative;\n left: -66.66667%; }\n\n.small-offset-7 {\n margin-left: 58.33333%; }\n\n.small-9 {\n width: 75%; }\n\n.small-push-9 {\n position: relative;\n left: 75%; }\n\n.small-pull-9 {\n position: relative;\n left: -75%; }\n\n.small-offset-8 {\n margin-left: 66.66667%; }\n\n.small-10 {\n width: 83.33333%; }\n\n.small-push-10 {\n position: relative;\n left: 83.33333%; }\n\n.small-pull-10 {\n position: relative;\n left: -83.33333%; }\n\n.small-offset-9 {\n margin-left: 75%; }\n\n.small-11 {\n width: 91.66667%; }\n\n.small-push-11 {\n position: relative;\n left: 91.66667%; }\n\n.small-pull-11 {\n position: relative;\n left: -91.66667%; }\n\n.small-offset-10 {\n margin-left: 83.33333%; }\n\n.small-12 {\n width: 100%; }\n\n.small-offset-11 {\n margin-left: 91.66667%; }\n\n.small-up-1 > .column, .small-up-1 > .columns {\n float: left;\n width: 100%; }\n .small-up-1 > .column:nth-of-type(1n), .small-up-1 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-1 > .column:nth-of-type(1n+1), .small-up-1 > .columns:nth-of-type(1n+1) {\n clear: both; }\n .small-up-1 > .column:last-child, .small-up-1 > .columns:last-child {\n float: left; }\n\n.small-up-2 > .column, .small-up-2 > .columns {\n float: left;\n width: 50%; }\n .small-up-2 > .column:nth-of-type(1n), .small-up-2 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-2 > .column:nth-of-type(2n+1), .small-up-2 > .columns:nth-of-type(2n+1) {\n clear: both; }\n .small-up-2 > .column:last-child, .small-up-2 > .columns:last-child {\n float: left; }\n\n.small-up-3 > .column, .small-up-3 > .columns {\n float: left;\n width: 33.33333%; }\n .small-up-3 > .column:nth-of-type(1n), .small-up-3 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-3 > .column:nth-of-type(3n+1), .small-up-3 > .columns:nth-of-type(3n+1) {\n clear: both; }\n .small-up-3 > .column:last-child, .small-up-3 > .columns:last-child {\n float: left; }\n\n.small-up-4 > .column, .small-up-4 > .columns {\n float: left;\n width: 25%; }\n .small-up-4 > .column:nth-of-type(1n), .small-up-4 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-4 > .column:nth-of-type(4n+1), .small-up-4 > .columns:nth-of-type(4n+1) {\n clear: both; }\n .small-up-4 > .column:last-child, .small-up-4 > .columns:last-child {\n float: left; }\n\n.small-up-5 > .column, .small-up-5 > .columns {\n float: left;\n width: 20%; }\n .small-up-5 > .column:nth-of-type(1n), .small-up-5 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-5 > .column:nth-of-type(5n+1), .small-up-5 > .columns:nth-of-type(5n+1) {\n clear: both; }\n .small-up-5 > .column:last-child, .small-up-5 > .columns:last-child {\n float: left; }\n\n.small-up-6 > .column, .small-up-6 > .columns {\n float: left;\n width: 16.66667%; }\n .small-up-6 > .column:nth-of-type(1n), .small-up-6 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-6 > .column:nth-of-type(6n+1), .small-up-6 > .columns:nth-of-type(6n+1) {\n clear: both; }\n .small-up-6 > .column:last-child, .small-up-6 > .columns:last-child {\n float: left; }\n\n.small-up-7 > .column, .small-up-7 > .columns {\n float: left;\n width: 14.28571%; }\n .small-up-7 > .column:nth-of-type(1n), .small-up-7 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-7 > .column:nth-of-type(7n+1), .small-up-7 > .columns:nth-of-type(7n+1) {\n clear: both; }\n .small-up-7 > .column:last-child, .small-up-7 > .columns:last-child {\n float: left; }\n\n.small-up-8 > .column, .small-up-8 > .columns {\n float: left;\n width: 12.5%; }\n .small-up-8 > .column:nth-of-type(1n), .small-up-8 > .columns:nth-of-type(1n) {\n clear: none; }\n .small-up-8 > .column:nth-of-type(8n+1), .small-up-8 > .columns:nth-of-type(8n+1) {\n clear: both; }\n .small-up-8 > .column:last-child, .small-up-8 > .columns:last-child {\n float: left; }\n\n.small-collapse > .column, .small-collapse > .columns {\n padding-right: 0;\n padding-left: 0; }\n\n.small-collapse .row {\n margin-right: 0;\n margin-left: 0; }\n\n.expanded.row .small-collapse.row {\n margin-right: 0;\n margin-left: 0; }\n\n.small-uncollapse > .column, .small-uncollapse > .columns {\n padding-right: 0.625rem;\n padding-left: 0.625rem; }\n\n.small-centered {\n margin-right: auto;\n margin-left: auto; }\n .small-centered, .small-centered:last-child:not(:first-child) {\n float: none;\n clear: both; }\n\n.small-uncentered,\n.small-push-0,\n.small-pull-0 {\n position: static;\n margin-right: 0;\n margin-left: 0; }\n .small-uncentered, .small-uncentered:last-child:not(:first-child),\n .small-push-0,\n .small-push-0:last-child:not(:first-child),\n .small-pull-0,\n .small-pull-0:last-child:not(:first-child) {\n float: left;\n clear: none; }\n .small-uncentered:last-child:not(:first-child),\n .small-push-0:last-child:not(:first-child),\n .small-pull-0:last-child:not(:first-child) {\n float: right; }\n\n@media print, screen and (min-width: 40em) {\n .medium-1 {\n width: 8.33333%; }\n .medium-push-1 {\n position: relative;\n left: 8.33333%; }\n .medium-pull-1 {\n position: relative;\n left: -8.33333%; }\n .medium-offset-0 {\n margin-left: 0%; }\n .medium-2 {\n width: 16.66667%; }\n .medium-push-2 {\n position: relative;\n left: 16.66667%; }\n .medium-pull-2 {\n position: relative;\n left: -16.66667%; }\n .medium-offset-1 {\n margin-left: 8.33333%; }\n .medium-3 {\n width: 25%; }\n .medium-push-3 {\n position: relative;\n left: 25%; }\n .medium-pull-3 {\n position: relative;\n left: -25%; }\n .medium-offset-2 {\n margin-left: 16.66667%; }\n .medium-4 {\n width: 33.33333%; }\n .medium-push-4 {\n position: relative;\n left: 33.33333%; }\n .medium-pull-4 {\n position: relative;\n left: -33.33333%; }\n .medium-offset-3 {\n margin-left: 25%; }\n .medium-5 {\n width: 41.66667%; }\n .medium-push-5 {\n position: relative;\n left: 41.66667%; }\n .medium-pull-5 {\n position: relative;\n left: -41.66667%; }\n .medium-offset-4 {\n margin-left: 33.33333%; }\n .medium-6 {\n width: 50%; }\n .medium-push-6 {\n position: relative;\n left: 50%; }\n .medium-pull-6 {\n position: relative;\n left: -50%; }\n .medium-offset-5 {\n margin-left: 41.66667%; }\n .medium-7 {\n width: 58.33333%; }\n .medium-push-7 {\n position: relative;\n left: 58.33333%; }\n .medium-pull-7 {\n position: relative;\n left: -58.33333%; }\n .medium-offset-6 {\n margin-left: 50%; }\n .medium-8 {\n width: 66.66667%; }\n .medium-push-8 {\n position: relative;\n left: 66.66667%; }\n .medium-pull-8 {\n position: relative;\n left: -66.66667%; }\n .medium-offset-7 {\n margin-left: 58.33333%; }\n .medium-9 {\n width: 75%; }\n .medium-push-9 {\n position: relative;\n left: 75%; }\n .medium-pull-9 {\n position: relative;\n left: -75%; }\n .medium-offset-8 {\n margin-left: 66.66667%; }\n .medium-10 {\n width: 83.33333%; }\n .medium-push-10 {\n position: relative;\n left: 83.33333%; }\n .medium-pull-10 {\n position: relative;\n left: -83.33333%; }\n .medium-offset-9 {\n margin-left: 75%; }\n .medium-11 {\n width: 91.66667%; }\n .medium-push-11 {\n position: relative;\n left: 91.66667%; }\n .medium-pull-11 {\n position: relative;\n left: -91.66667%; }\n .medium-offset-10 {\n margin-left: 83.33333%; }\n .medium-12 {\n width: 100%; }\n .medium-offset-11 {\n margin-left: 91.66667%; }\n .medium-up-1 > .column, .medium-up-1 > .columns {\n float: left;\n width: 100%; }\n .medium-up-1 > .column:nth-of-type(1n), .medium-up-1 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-1 > .column:nth-of-type(1n+1), .medium-up-1 > .columns:nth-of-type(1n+1) {\n clear: both; }\n .medium-up-1 > .column:last-child, .medium-up-1 > .columns:last-child {\n float: left; }\n .medium-up-2 > .column, .medium-up-2 > .columns {\n float: left;\n width: 50%; }\n .medium-up-2 > .column:nth-of-type(1n), .medium-up-2 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-2 > .column:nth-of-type(2n+1), .medium-up-2 > .columns:nth-of-type(2n+1) {\n clear: both; }\n .medium-up-2 > .column:last-child, .medium-up-2 > .columns:last-child {\n float: left; }\n .medium-up-3 > .column, .medium-up-3 > .columns {\n float: left;\n width: 33.33333%; }\n .medium-up-3 > .column:nth-of-type(1n), .medium-up-3 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-3 > .column:nth-of-type(3n+1), .medium-up-3 > .columns:nth-of-type(3n+1) {\n clear: both; }\n .medium-up-3 > .column:last-child, .medium-up-3 > .columns:last-child {\n float: left; }\n .medium-up-4 > .column, .medium-up-4 > .columns {\n float: left;\n width: 25%; }\n .medium-up-4 > .column:nth-of-type(1n), .medium-up-4 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-4 > .column:nth-of-type(4n+1), .medium-up-4 > .columns:nth-of-type(4n+1) {\n clear: both; }\n .medium-up-4 > .column:last-child, .medium-up-4 > .columns:last-child {\n float: left; }\n .medium-up-5 > .column, .medium-up-5 > .columns {\n float: left;\n width: 20%; }\n .medium-up-5 > .column:nth-of-type(1n), .medium-up-5 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-5 > .column:nth-of-type(5n+1), .medium-up-5 > .columns:nth-of-type(5n+1) {\n clear: both; }\n .medium-up-5 > .column:last-child, .medium-up-5 > .columns:last-child {\n float: left; }\n .medium-up-6 > .column, .medium-up-6 > .columns {\n float: left;\n width: 16.66667%; }\n .medium-up-6 > .column:nth-of-type(1n), .medium-up-6 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-6 > .column:nth-of-type(6n+1), .medium-up-6 > .columns:nth-of-type(6n+1) {\n clear: both; }\n .medium-up-6 > .column:last-child, .medium-up-6 > .columns:last-child {\n float: left; }\n .medium-up-7 > .column, .medium-up-7 > .columns {\n float: left;\n width: 14.28571%; }\n .medium-up-7 > .column:nth-of-type(1n), .medium-up-7 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-7 > .column:nth-of-type(7n+1), .medium-up-7 > .columns:nth-of-type(7n+1) {\n clear: both; }\n .medium-up-7 > .column:last-child, .medium-up-7 > .columns:last-child {\n float: left; }\n .medium-up-8 > .column, .medium-up-8 > .columns {\n float: left;\n width: 12.5%; }\n .medium-up-8 > .column:nth-of-type(1n), .medium-up-8 > .columns:nth-of-type(1n) {\n clear: none; }\n .medium-up-8 > .column:nth-of-type(8n+1), .medium-up-8 > .columns:nth-of-type(8n+1) {\n clear: both; }\n .medium-up-8 > .column:last-child, .medium-up-8 > .columns:last-child {\n float: left; }\n .medium-collapse > .column, .medium-collapse > .columns {\n padding-right: 0;\n padding-left: 0; }\n .medium-collapse .row {\n margin-right: 0;\n margin-left: 0; }\n .expanded.row .medium-collapse.row {\n margin-right: 0;\n margin-left: 0; }\n .medium-uncollapse > .column, .medium-uncollapse > .columns {\n padding-right: 0.9375rem;\n padding-left: 0.9375rem; }\n .medium-centered {\n margin-right: auto;\n margin-left: auto; }\n .medium-centered, .medium-centered:last-child:not(:first-child) {\n float: none;\n clear: both; }\n .medium-uncentered,\n .medium-push-0,\n .medium-pull-0 {\n position: static;\n margin-right: 0;\n margin-left: 0; }\n .medium-uncentered, .medium-uncentered:last-child:not(:first-child),\n .medium-push-0,\n .medium-push-0:last-child:not(:first-child),\n .medium-pull-0,\n .medium-pull-0:last-child:not(:first-child) {\n float: left;\n clear: none; }\n .medium-uncentered:last-child:not(:first-child),\n .medium-push-0:last-child:not(:first-child),\n .medium-pull-0:last-child:not(:first-child) {\n float: right; } }\n\n@media print, screen and (min-width: 64em) {\n .large-1 {\n width: 8.33333%; }\n .large-push-1 {\n position: relative;\n left: 8.33333%; }\n .large-pull-1 {\n position: relative;\n left: -8.33333%; }\n .large-offset-0 {\n margin-left: 0%; }\n .large-2 {\n width: 16.66667%; }\n .large-push-2 {\n position: relative;\n left: 16.66667%; }\n .large-pull-2 {\n position: relative;\n left: -16.66667%; }\n .large-offset-1 {\n margin-left: 8.33333%; }\n .large-3 {\n width: 25%; }\n .large-push-3 {\n position: relative;\n left: 25%; }\n .large-pull-3 {\n position: relative;\n left: -25%; }\n .large-offset-2 {\n margin-left: 16.66667%; }\n .large-4 {\n width: 33.33333%; }\n .large-push-4 {\n position: relative;\n left: 33.33333%; }\n .large-pull-4 {\n position: relative;\n left: -33.33333%; }\n .large-offset-3 {\n margin-left: 25%; }\n .large-5 {\n width: 41.66667%; }\n .large-push-5 {\n position: relative;\n left: 41.66667%; }\n .large-pull-5 {\n position: relative;\n left: -41.66667%; }\n .large-offset-4 {\n margin-left: 33.33333%; }\n .large-6 {\n width: 50%; }\n .large-push-6 {\n position: relative;\n left: 50%; }\n .large-pull-6 {\n position: relative;\n left: -50%; }\n .large-offset-5 {\n margin-left: 41.66667%; }\n .large-7 {\n width: 58.33333%; }\n .large-push-7 {\n position: relative;\n left: 58.33333%; }\n .large-pull-7 {\n position: relative;\n left: -58.33333%; }\n .large-offset-6 {\n margin-left: 50%; }\n .large-8 {\n width: 66.66667%; }\n .large-push-8 {\n position: relative;\n left: 66.66667%; }\n .large-pull-8 {\n position: relative;\n left: -66.66667%; }\n .large-offset-7 {\n margin-left: 58.33333%; }\n .large-9 {\n width: 75%; }\n .large-push-9 {\n position: relative;\n left: 75%; }\n .large-pull-9 {\n position: relative;\n left: -75%; }\n .large-offset-8 {\n margin-left: 66.66667%; }\n .large-10 {\n width: 83.33333%; }\n .large-push-10 {\n position: relative;\n left: 83.33333%; }\n .large-pull-10 {\n position: relative;\n left: -83.33333%; }\n .large-offset-9 {\n margin-left: 75%; }\n .large-11 {\n width: 91.66667%; }\n .large-push-11 {\n position: relative;\n left: 91.66667%; }\n .large-pull-11 {\n position: relative;\n left: -91.66667%; }\n .large-offset-10 {\n margin-left: 83.33333%; }\n .large-12 {\n width: 100%; }\n .large-offset-11 {\n margin-left: 91.66667%; }\n .large-up-1 > .column, .large-up-1 > .columns {\n float: left;\n width: 100%; }\n .large-up-1 > .column:nth-of-type(1n), .large-up-1 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-1 > .column:nth-of-type(1n+1), .large-up-1 > .columns:nth-of-type(1n+1) {\n clear: both; }\n .large-up-1 > .column:last-child, .large-up-1 > .columns:last-child {\n float: left; }\n .large-up-2 > .column, .large-up-2 > .columns {\n float: left;\n width: 50%; }\n .large-up-2 > .column:nth-of-type(1n), .large-up-2 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-2 > .column:nth-of-type(2n+1), .large-up-2 > .columns:nth-of-type(2n+1) {\n clear: both; }\n .large-up-2 > .column:last-child, .large-up-2 > .columns:last-child {\n float: left; }\n .large-up-3 > .column, .large-up-3 > .columns {\n float: left;\n width: 33.33333%; }\n .large-up-3 > .column:nth-of-type(1n), .large-up-3 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-3 > .column:nth-of-type(3n+1), .large-up-3 > .columns:nth-of-type(3n+1) {\n clear: both; }\n .large-up-3 > .column:last-child, .large-up-3 > .columns:last-child {\n float: left; }\n .large-up-4 > .column, .large-up-4 > .columns {\n float: left;\n width: 25%; }\n .large-up-4 > .column:nth-of-type(1n), .large-up-4 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-4 > .column:nth-of-type(4n+1), .large-up-4 > .columns:nth-of-type(4n+1) {\n clear: both; }\n .large-up-4 > .column:last-child, .large-up-4 > .columns:last-child {\n float: left; }\n .large-up-5 > .column, .large-up-5 > .columns {\n float: left;\n width: 20%; }\n .large-up-5 > .column:nth-of-type(1n), .large-up-5 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-5 > .column:nth-of-type(5n+1), .large-up-5 > .columns:nth-of-type(5n+1) {\n clear: both; }\n .large-up-5 > .column:last-child, .large-up-5 > .columns:last-child {\n float: left; }\n .large-up-6 > .column, .large-up-6 > .columns {\n float: left;\n width: 16.66667%; }\n .large-up-6 > .column:nth-of-type(1n), .large-up-6 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-6 > .column:nth-of-type(6n+1), .large-up-6 > .columns:nth-of-type(6n+1) {\n clear: both; }\n .large-up-6 > .column:last-child, .large-up-6 > .columns:last-child {\n float: left; }\n .large-up-7 > .column, .large-up-7 > .columns {\n float: left;\n width: 14.28571%; }\n .large-up-7 > .column:nth-of-type(1n), .large-up-7 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-7 > .column:nth-of-type(7n+1), .large-up-7 > .columns:nth-of-type(7n+1) {\n clear: both; }\n .large-up-7 > .column:last-child, .large-up-7 > .columns:last-child {\n float: left; }\n .large-up-8 > .column, .large-up-8 > .columns {\n float: left;\n width: 12.5%; }\n .large-up-8 > .column:nth-of-type(1n), .large-up-8 > .columns:nth-of-type(1n) {\n clear: none; }\n .large-up-8 > .column:nth-of-type(8n+1), .large-up-8 > .columns:nth-of-type(8n+1) {\n clear: both; }\n .large-up-8 > .column:last-child, .large-up-8 > .columns:last-child {\n float: left; }\n .large-collapse > .column, .large-collapse > .columns {\n padding-right: 0;\n padding-left: 0; }\n .large-collapse .row {\n margin-right: 0;\n margin-left: 0; }\n .expanded.row .large-collapse.row {\n margin-right: 0;\n margin-left: 0; }\n .large-uncollapse > .column, .large-uncollapse > .columns {\n padding-right: 0.9375rem;\n padding-left: 0.9375rem; }\n .large-centered {\n margin-right: auto;\n margin-left: auto; }\n .large-centered, .large-centered:last-child:not(:first-child) {\n float: none;\n clear: both; }\n .large-uncentered,\n .large-push-0,\n .large-pull-0 {\n position: static;\n margin-right: 0;\n margin-left: 0; }\n .large-uncentered, .large-uncentered:last-child:not(:first-child),\n .large-push-0,\n .large-push-0:last-child:not(:first-child),\n .large-pull-0,\n .large-pull-0:last-child:not(:first-child) {\n float: left;\n clear: none; }\n .large-uncentered:last-child:not(:first-child),\n .large-push-0:last-child:not(:first-child),\n .large-pull-0:last-child:not(:first-child) {\n float: right; } }\n\n.column-block {\n margin-bottom: 1.25rem; }\n .column-block > :last-child {\n margin-bottom: 0; }\n @media print, screen and (min-width: 40em) {\n .column-block {\n margin-bottom: 1.875rem; }\n .column-block > :last-child {\n margin-bottom: 0; } }\n\n.button {\n display: inline-block;\n vertical-align: middle;\n margin: 0 0 1rem 0;\n padding: 0.85em 1em;\n border: 1px solid transparent;\n border-radius: 0;\n transition: background-color 0.25s ease-out, color 0.25s ease-out;\n font-family: inherit;\n font-size: 0.9rem;\n -webkit-appearance: none;\n line-height: 1;\n text-align: center;\n cursor: pointer;\n background-color: #1779ba;\n color: #fefefe; }\n [data-whatinput='mouse'] .button {\n outline: 0; }\n .button:hover, .button:focus {\n background-color: #14679e;\n color: #fefefe; }\n .button.tiny {\n font-size: 0.6rem; }\n .button.small {\n font-size: 0.75rem; }\n .button.large {\n font-size: 1.25rem; }\n .button.expanded {\n display: block;\n width: 100%;\n margin-right: 0;\n margin-left: 0; }\n .button.primary {\n background-color: #1779ba;\n color: #fefefe; }\n .button.primary:hover, .button.primary:focus {\n background-color: #126195;\n color: #fefefe; }\n .button.secondary {\n background-color: #767676;\n color: #fefefe; }\n .button.secondary:hover, .button.secondary:focus {\n background-color: #5e5e5e;\n color: #fefefe; }\n .button.success {\n background-color: #3adb76;\n color: #0a0a0a; }\n .button.success:hover, .button.success:focus {\n background-color: #22bb5b;\n color: #0a0a0a; }\n .button.warning {\n background-color: #ffae00;\n color: #0a0a0a; }\n .button.warning:hover, .button.warning:focus {\n background-color: #cc8b00;\n color: #0a0a0a; }\n .button.alert {\n background-color: #cc4b37;\n color: #fefefe; }\n .button.alert:hover, .button.alert:focus {\n background-color: #a53b2a;\n color: #fefefe; }\n .button.disabled, .button[disabled] {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.disabled, .button.disabled:hover, .button.disabled:focus, .button[disabled], .button[disabled]:hover, .button[disabled]:focus {\n background-color: #1779ba;\n color: #fefefe; }\n .button.disabled.primary, .button[disabled].primary {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.disabled.primary, .button.disabled.primary:hover, .button.disabled.primary:focus, .button[disabled].primary, .button[disabled].primary:hover, .button[disabled].primary:focus {\n background-color: #1779ba;\n color: #fefefe; }\n .button.disabled.secondary, .button[disabled].secondary {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.disabled.secondary, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary, .button[disabled].secondary:hover, .button[disabled].secondary:focus {\n background-color: #767676;\n color: #fefefe; }\n .button.disabled.success, .button[disabled].success {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.disabled.success, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success, .button[disabled].success:hover, .button[disabled].success:focus {\n background-color: #3adb76;\n color: #0a0a0a; }\n .button.disabled.warning, .button[disabled].warning {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.disabled.warning, .button.disabled.warning:hover, .button.disabled.warning:focus, .button[disabled].warning, .button[disabled].warning:hover, .button[disabled].warning:focus {\n background-color: #ffae00;\n color: #0a0a0a; }\n .button.disabled.alert, .button[disabled].alert {\n opacity: 0.25;\n cursor: not-allowed; }\n .button.disabled.alert, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert, .button[disabled].alert:hover, .button[disabled].alert:focus {\n background-color: #cc4b37;\n color: #fefefe; }\n .button.hollow {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.hollow, .button.hollow:hover, .button.hollow:focus {\n background-color: transparent; }\n .button.hollow.disabled, .button.hollow.disabled:hover, .button.hollow.disabled:focus, .button.hollow[disabled], .button.hollow[disabled]:hover, .button.hollow[disabled]:focus {\n background-color: transparent; }\n .button.hollow:hover, .button.hollow:focus {\n border-color: #0c3d5d;\n color: #0c3d5d; }\n .button.hollow:hover.disabled, .button.hollow:hover[disabled], .button.hollow:focus.disabled, .button.hollow:focus[disabled] {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.hollow.primary {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.hollow.primary:hover, .button.hollow.primary:focus {\n border-color: #0c3d5d;\n color: #0c3d5d; }\n .button.hollow.primary:hover.disabled, .button.hollow.primary:hover[disabled], .button.hollow.primary:focus.disabled, .button.hollow.primary:focus[disabled] {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.hollow.secondary {\n border: 1px solid #767676;\n color: #767676; }\n .button.hollow.secondary:hover, .button.hollow.secondary:focus {\n border-color: #3b3b3b;\n color: #3b3b3b; }\n .button.hollow.secondary:hover.disabled, .button.hollow.secondary:hover[disabled], .button.hollow.secondary:focus.disabled, .button.hollow.secondary:focus[disabled] {\n border: 1px solid #767676;\n color: #767676; }\n .button.hollow.success {\n border: 1px solid #3adb76;\n color: #3adb76; }\n .button.hollow.success:hover, .button.hollow.success:focus {\n border-color: #157539;\n color: #157539; }\n .button.hollow.success:hover.disabled, .button.hollow.success:hover[disabled], .button.hollow.success:focus.disabled, .button.hollow.success:focus[disabled] {\n border: 1px solid #3adb76;\n color: #3adb76; }\n .button.hollow.warning {\n border: 1px solid #ffae00;\n color: #ffae00; }\n .button.hollow.warning:hover, .button.hollow.warning:focus {\n border-color: #805700;\n color: #805700; }\n .button.hollow.warning:hover.disabled, .button.hollow.warning:hover[disabled], .button.hollow.warning:focus.disabled, .button.hollow.warning:focus[disabled] {\n border: 1px solid #ffae00;\n color: #ffae00; }\n .button.hollow.alert {\n border: 1px solid #cc4b37;\n color: #cc4b37; }\n .button.hollow.alert:hover, .button.hollow.alert:focus {\n border-color: #67251a;\n color: #67251a; }\n .button.hollow.alert:hover.disabled, .button.hollow.alert:hover[disabled], .button.hollow.alert:focus.disabled, .button.hollow.alert:focus[disabled] {\n border: 1px solid #cc4b37;\n color: #cc4b37; }\n .button.clear {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.clear, .button.clear:hover, .button.clear:focus {\n background-color: transparent; }\n .button.clear.disabled, .button.clear.disabled:hover, .button.clear.disabled:focus, .button.clear[disabled], .button.clear[disabled]:hover, .button.clear[disabled]:focus {\n background-color: transparent; }\n .button.clear:hover, .button.clear:focus {\n border-color: #0c3d5d;\n color: #0c3d5d; }\n .button.clear:hover.disabled, .button.clear:hover[disabled], .button.clear:focus.disabled, .button.clear:focus[disabled] {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.clear, .button.clear.disabled, .button.clear[disabled], .button.clear:hover, .button.clear:hover.disabled, .button.clear:hover[disabled], .button.clear:focus, .button.clear:focus.disabled, .button.clear:focus[disabled] {\n border-color: transparent; }\n .button.clear.primary {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.clear.primary:hover, .button.clear.primary:focus {\n border-color: #0c3d5d;\n color: #0c3d5d; }\n .button.clear.primary:hover.disabled, .button.clear.primary:hover[disabled], .button.clear.primary:focus.disabled, .button.clear.primary:focus[disabled] {\n border: 1px solid #1779ba;\n color: #1779ba; }\n .button.clear.primary, .button.clear.primary.disabled, .button.clear.primary[disabled], .button.clear.primary:hover, .button.clear.primary:hover.disabled, .button.clear.primary:hover[disabled], .button.clear.primary:focus, .button.clear.primary:focus.disabled, .button.clear.primary:focus[disabled] {\n border-color: transparent; }\n .button.clear.secondary {\n border: 1px solid #767676;\n color: #767676; }\n .button.clear.secondary:hover, .button.clear.secondary:focus {\n border-color: #3b3b3b;\n color: #3b3b3b; }\n .button.clear.secondary:hover.disabled, .button.clear.secondary:hover[disabled], .button.clear.secondary:focus.disabled, .button.clear.secondary:focus[disabled] {\n border: 1px solid #767676;\n color: #767676; }\n .button.clear.secondary, .button.clear.secondary.disabled, .button.clear.secondary[disabled], .button.clear.secondary:hover, .button.clear.secondary:hover.disabled, .button.clear.secondary:hover[disabled], .button.clear.secondary:focus, .button.clear.secondary:focus.disabled, .button.clear.secondary:focus[disabled] {\n border-color: transparent; }\n .button.clear.success {\n border: 1px solid #3adb76;\n color: #3adb76; }\n .button.clear.success:hover, .button.clear.success:focus {\n border-color: #157539;\n color: #157539; }\n .button.clear.success:hover.disabled, .button.clear.success:hover[disabled], .button.clear.success:focus.disabled, .button.clear.success:focus[disabled] {\n border: 1px solid #3adb76;\n color: #3adb76; }\n .button.clear.success, .button.clear.success.disabled, .button.clear.success[disabled], .button.clear.success:hover, .button.clear.success:hover.disabled, .button.clear.success:hover[disabled], .button.clear.success:focus, .button.clear.success:focus.disabled, .button.clear.success:focus[disabled] {\n border-color: transparent; }\n .button.clear.warning {\n border: 1px solid #ffae00;\n color: #ffae00; }\n .button.clear.warning:hover, .button.clear.warning:focus {\n border-color: #805700;\n color: #805700; }\n .button.clear.warning:hover.disabled, .button.clear.warning:hover[disabled], .button.clear.warning:focus.disabled, .button.clear.warning:focus[disabled] {\n border: 1px solid #ffae00;\n color: #ffae00; }\n .button.clear.warning, .button.clear.warning.disabled, .button.clear.warning[disabled], .button.clear.warning:hover, .button.clear.warning:hover.disabled, .button.clear.warning:hover[disabled], .button.clear.warning:focus, .button.clear.warning:focus.disabled, .button.clear.warning:focus[disabled] {\n border-color: transparent; }\n .button.clear.alert {\n border: 1px solid #cc4b37;\n color: #cc4b37; }\n .button.clear.alert:hover, .button.clear.alert:focus {\n border-color: #67251a;\n color: #67251a; }\n .button.clear.alert:hover.disabled, .button.clear.alert:hover[disabled], .button.clear.alert:focus.disabled, .button.clear.alert:focus[disabled] {\n border: 1px solid #cc4b37;\n color: #cc4b37; }\n .button.clear.alert, .button.clear.alert.disabled, .button.clear.alert[disabled], .button.clear.alert:hover, .button.clear.alert:hover.disabled, .button.clear.alert:hover[disabled], .button.clear.alert:focus, .button.clear.alert:focus.disabled, .button.clear.alert:focus[disabled] {\n border-color: transparent; }\n .button.dropdown::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 0.4em;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #fefefe transparent transparent;\n position: relative;\n top: 0.4em;\n display: inline-block;\n float: right;\n margin-left: 1em; }\n .button.dropdown.hollow::after {\n border-top-color: #1779ba; }\n .button.dropdown.hollow.primary::after {\n border-top-color: #1779ba; }\n .button.dropdown.hollow.secondary::after {\n border-top-color: #767676; }\n .button.dropdown.hollow.success::after {\n border-top-color: #3adb76; }\n .button.dropdown.hollow.warning::after {\n border-top-color: #ffae00; }\n .button.dropdown.hollow.alert::after {\n border-top-color: #cc4b37; }\n .button.arrow-only::after {\n top: -0.1em;\n float: none;\n margin-left: 0; }\n\na.button:hover, a.button:focus {\n text-decoration: none; }\n\n.button-group {\n margin-bottom: 1rem;\n font-size: 0; }\n .button-group::before, .button-group::after {\n display: table;\n content: ' '; }\n .button-group::after {\n clear: both; }\n .button-group .button {\n margin: 0;\n margin-right: 1px;\n margin-bottom: 1px;\n font-size: 0.9rem; }\n .button-group .button:last-child {\n margin-right: 0; }\n .button-group.tiny .button {\n font-size: 0.6rem; }\n .button-group.small .button {\n font-size: 0.75rem; }\n .button-group.large .button {\n font-size: 1.25rem; }\n .button-group.expanded {\n margin-right: -1px; }\n .button-group.expanded::before, .button-group.expanded::after {\n display: none; }\n .button-group.expanded .button:first-child:last-child {\n width: calc(100% - 1px); }\n .button-group.expanded .button:first-child:nth-last-child(2), .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button {\n display: inline-block;\n width: calc(50% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(2):last-child, .button-group.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.expanded .button:first-child:nth-last-child(3), .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button {\n display: inline-block;\n width: calc(33.33333% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(3):last-child, .button-group.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.expanded .button:first-child:nth-last-child(4), .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button {\n display: inline-block;\n width: calc(25% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(4):last-child, .button-group.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.expanded .button:first-child:nth-last-child(5), .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button {\n display: inline-block;\n width: calc(20% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(5):last-child, .button-group.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.expanded .button:first-child:nth-last-child(6), .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button {\n display: inline-block;\n width: calc(16.66667% - 1px);\n margin-right: 1px; }\n .button-group.expanded .button:first-child:nth-last-child(6):last-child, .button-group.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.primary .button {\n background-color: #1779ba;\n color: #fefefe; }\n .button-group.primary .button:hover, .button-group.primary .button:focus {\n background-color: #126195;\n color: #fefefe; }\n .button-group.secondary .button {\n background-color: #767676;\n color: #fefefe; }\n .button-group.secondary .button:hover, .button-group.secondary .button:focus {\n background-color: #5e5e5e;\n color: #fefefe; }\n .button-group.success .button {\n background-color: #3adb76;\n color: #0a0a0a; }\n .button-group.success .button:hover, .button-group.success .button:focus {\n background-color: #22bb5b;\n color: #0a0a0a; }\n .button-group.warning .button {\n background-color: #ffae00;\n color: #0a0a0a; }\n .button-group.warning .button:hover, .button-group.warning .button:focus {\n background-color: #cc8b00;\n color: #0a0a0a; }\n .button-group.alert .button {\n background-color: #cc4b37;\n color: #fefefe; }\n .button-group.alert .button:hover, .button-group.alert .button:focus {\n background-color: #a53b2a;\n color: #fefefe; }\n .button-group.stacked .button, .button-group.stacked-for-small .button, .button-group.stacked-for-medium .button {\n width: 100%; }\n .button-group.stacked .button:last-child, .button-group.stacked-for-small .button:last-child, .button-group.stacked-for-medium .button:last-child {\n margin-bottom: 0; }\n .button-group.stacked.expanded, .button-group.stacked-for-small.expanded, .button-group.stacked-for-medium.expanded {\n margin-right: -1px; }\n .button-group.stacked.expanded::before, .button-group.stacked.expanded::after, .button-group.stacked-for-small.expanded::before, .button-group.stacked-for-small.expanded::after, .button-group.stacked-for-medium.expanded::before, .button-group.stacked-for-medium.expanded::after {\n display: none; }\n .button-group.stacked.expanded .button:first-child:last-child, .button-group.stacked-for-small.expanded .button:first-child:last-child, .button-group.stacked-for-medium.expanded .button:first-child:last-child {\n width: calc(100% - 1px); }\n .button-group.stacked.expanded .button:first-child:nth-last-child(2), .button-group.stacked.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(2), .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(2), .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button {\n display: inline-block;\n width: calc(50% - 1px);\n margin-right: 1px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(2):last-child, .button-group.stacked.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(2):last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(2):last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(2):first-child:nth-last-child(2) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(3), .button-group.stacked.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(3), .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(3), .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button {\n display: inline-block;\n width: calc(33.33333% - 1px);\n margin-right: 1px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(3):last-child, .button-group.stacked.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(3):last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(3):last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(3):first-child:nth-last-child(3) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(4), .button-group.stacked.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(4), .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(4), .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button {\n display: inline-block;\n width: calc(25% - 1px);\n margin-right: 1px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(4):last-child, .button-group.stacked.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(4):last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(4):last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(4):first-child:nth-last-child(4) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(5), .button-group.stacked.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(5), .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(5), .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button {\n display: inline-block;\n width: calc(20% - 1px);\n margin-right: 1px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(5):last-child, .button-group.stacked.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(5):last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(5):last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(5):first-child:nth-last-child(5) ~ .button:last-child {\n margin-right: -6px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(6), .button-group.stacked.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(6), .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(6), .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button {\n display: inline-block;\n width: calc(16.66667% - 1px);\n margin-right: 1px; }\n .button-group.stacked.expanded .button:first-child:nth-last-child(6):last-child, .button-group.stacked.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(6):last-child, .button-group.stacked-for-small.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(6):last-child, .button-group.stacked-for-medium.expanded .button:first-child:nth-last-child(6):first-child:nth-last-child(6) ~ .button:last-child {\n margin-right: -6px; }\n @media print, screen and (min-width: 40em) {\n .button-group.stacked-for-small .button {\n width: auto;\n margin-bottom: 0; } }\n @media print, screen and (min-width: 64em) {\n .button-group.stacked-for-medium .button {\n width: auto;\n margin-bottom: 0; } }\n @media screen and (max-width: 39.99875em) {\n .button-group.stacked-for-small.expanded {\n display: block; }\n .button-group.stacked-for-small.expanded .button {\n display: block;\n margin-right: 0; } }\n @media screen and (max-width: 63.99875em) {\n .button-group.stacked-for-medium.expanded {\n display: block; }\n .button-group.stacked-for-medium.expanded .button {\n display: block;\n margin-right: 0; } }\n\n.close-button {\n position: absolute;\n color: #8a8a8a;\n cursor: pointer; }\n [data-whatinput='mouse'] .close-button {\n outline: 0; }\n .close-button:hover, .close-button:focus {\n color: #0a0a0a; }\n .close-button.small {\n right: 0.66rem;\n top: 0.33em;\n font-size: 1.5em;\n line-height: 1; }\n .close-button, .close-button.medium {\n right: 1rem;\n top: 0.5rem;\n font-size: 2em;\n line-height: 1; }\n\n.label {\n display: inline-block;\n padding: 0.33333rem 0.5rem;\n border-radius: 0;\n font-size: 0.8rem;\n line-height: 1;\n white-space: nowrap;\n cursor: default;\n background: #1779ba;\n color: #fefefe; }\n .label.primary {\n background: #1779ba;\n color: #fefefe; }\n .label.secondary {\n background: #767676;\n color: #fefefe; }\n .label.success {\n background: #3adb76;\n color: #0a0a0a; }\n .label.warning {\n background: #ffae00;\n color: #0a0a0a; }\n .label.alert {\n background: #cc4b37;\n color: #fefefe; }\n\n.progress {\n height: 1rem;\n margin-bottom: 1rem;\n border-radius: 0;\n background-color: #cacaca; }\n .progress.primary .progress-meter {\n background-color: #1779ba; }\n .progress.secondary .progress-meter {\n background-color: #767676; }\n .progress.success .progress-meter {\n background-color: #3adb76; }\n .progress.warning .progress-meter {\n background-color: #ffae00; }\n .progress.alert .progress-meter {\n background-color: #cc4b37; }\n\n.progress-meter {\n position: relative;\n display: block;\n width: 0%;\n height: 100%;\n background-color: #1779ba; }\n\n.progress-meter-text {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n position: absolute;\n margin: 0;\n font-size: 0.75rem;\n font-weight: bold;\n color: #fefefe;\n white-space: nowrap; }\n\n.slider {\n position: relative;\n height: 0.5rem;\n margin-top: 1.25rem;\n margin-bottom: 2.25rem;\n background-color: #e6e6e6;\n cursor: pointer;\n user-select: none;\n touch-action: none; }\n\n.slider-fill {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n max-width: 100%;\n height: 0.5rem;\n background-color: #cacaca;\n transition: all 0.2s ease-in-out; }\n .slider-fill.is-dragging {\n transition: all 0s linear; }\n\n.slider-handle {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1;\n display: inline-block;\n width: 1.4rem;\n height: 1.4rem;\n border-radius: 0;\n background-color: #1779ba;\n transition: all 0.2s ease-in-out;\n touch-action: manipulation; }\n [data-whatinput='mouse'] .slider-handle {\n outline: 0; }\n .slider-handle:hover {\n background-color: #14679e; }\n .slider-handle.is-dragging {\n transition: all 0s linear; }\n\n.slider.disabled,\n.slider[disabled] {\n opacity: 0.25;\n cursor: not-allowed; }\n\n.slider.vertical {\n display: inline-block;\n width: 0.5rem;\n height: 12.5rem;\n margin: 0 1.25rem;\n transform: scale(1, -1); }\n .slider.vertical .slider-fill {\n top: 0;\n width: 0.5rem;\n max-height: 100%; }\n .slider.vertical .slider-handle {\n position: absolute;\n top: 0;\n left: 50%;\n width: 1.4rem;\n height: 1.4rem;\n transform: translateX(-50%); }\n\n.switch {\n height: 2rem;\n position: relative;\n margin-bottom: 1rem;\n outline: 0;\n font-size: 0.875rem;\n font-weight: bold;\n color: #fefefe;\n user-select: none; }\n\n.switch-input {\n position: absolute;\n margin-bottom: 0;\n opacity: 0; }\n\n.switch-paddle {\n position: relative;\n display: block;\n width: 4rem;\n height: 2rem;\n border-radius: 0;\n background: #cacaca;\n transition: all 0.25s ease-out;\n font-weight: inherit;\n color: inherit;\n cursor: pointer; }\n input + .switch-paddle {\n margin: 0; }\n .switch-paddle::after {\n position: absolute;\n top: 0.25rem;\n left: 0.25rem;\n display: block;\n width: 1.5rem;\n height: 1.5rem;\n transform: translate3d(0, 0, 0);\n border-radius: 0;\n background: #fefefe;\n transition: all 0.25s ease-out;\n content: ''; }\n input:checked ~ .switch-paddle {\n background: #1779ba; }\n input:checked ~ .switch-paddle::after {\n left: 2.25rem; }\n [data-whatinput='mouse'] input:focus ~ .switch-paddle {\n outline: 0; }\n\n.switch-active, .switch-inactive {\n position: absolute;\n top: 50%;\n transform: translateY(-50%); }\n\n.switch-active {\n left: 8%;\n display: none; }\n input:checked + label > .switch-active {\n display: block; }\n\n.switch-inactive {\n right: 15%; }\n input:checked + label > .switch-inactive {\n display: none; }\n\n.switch.tiny {\n height: 1.5rem; }\n .switch.tiny .switch-paddle {\n width: 3rem;\n height: 1.5rem;\n font-size: 0.625rem; }\n .switch.tiny .switch-paddle::after {\n top: 0.25rem;\n left: 0.25rem;\n width: 1rem;\n height: 1rem; }\n .switch.tiny input:checked ~ .switch-paddle::after {\n left: 1.75rem; }\n\n.switch.small {\n height: 1.75rem; }\n .switch.small .switch-paddle {\n width: 3.5rem;\n height: 1.75rem;\n font-size: 0.75rem; }\n .switch.small .switch-paddle::after {\n top: 0.25rem;\n left: 0.25rem;\n width: 1.25rem;\n height: 1.25rem; }\n .switch.small input:checked ~ .switch-paddle::after {\n left: 2rem; }\n\n.switch.large {\n height: 2.5rem; }\n .switch.large .switch-paddle {\n width: 5rem;\n height: 2.5rem;\n font-size: 1rem; }\n .switch.large .switch-paddle::after {\n top: 0.25rem;\n left: 0.25rem;\n width: 2rem;\n height: 2rem; }\n .switch.large input:checked ~ .switch-paddle::after {\n left: 2.75rem; }\n\ntable {\n border-collapse: collapse;\n width: 100%;\n margin-bottom: 1rem;\n border-radius: 0; }\n thead,\n tbody,\n tfoot {\n border: 1px solid #f1f1f1;\n background-color: #fefefe; }\n caption {\n padding: 0.5rem 0.625rem 0.625rem;\n font-weight: bold; }\n thead {\n background: #f8f8f8;\n color: #0a0a0a; }\n tfoot {\n background: #f1f1f1;\n color: #0a0a0a; }\n thead tr,\n tfoot tr {\n background: transparent; }\n thead th,\n thead td,\n tfoot th,\n tfoot td {\n padding: 0.5rem 0.625rem 0.625rem;\n font-weight: bold;\n text-align: left; }\n tbody th,\n tbody td {\n padding: 0.5rem 0.625rem 0.625rem; }\n tbody tr:nth-child(even) {\n border-bottom: 0;\n background-color: #f1f1f1; }\n table.unstriped tbody {\n background-color: #fefefe; }\n table.unstriped tbody tr {\n border-bottom: 0;\n border-bottom: 1px solid #f1f1f1;\n background-color: #fefefe; }\n\n@media screen and (max-width: 63.99875em) {\n table.stack thead {\n display: none; }\n table.stack tfoot {\n display: none; }\n table.stack tr,\n table.stack th,\n table.stack td {\n display: block; }\n table.stack td {\n border-top: 0; } }\n\ntable.scroll {\n display: block;\n width: 100%;\n overflow-x: auto; }\n\ntable.hover thead tr:hover {\n background-color: #f3f3f3; }\n\ntable.hover tfoot tr:hover {\n background-color: #ececec; }\n\ntable.hover tbody tr:hover {\n background-color: #f9f9f9; }\n\ntable.hover:not(.unstriped) tr:nth-of-type(even):hover {\n background-color: #ececec; }\n\n.table-scroll {\n overflow-x: auto; }\n\n.badge {\n display: inline-block;\n min-width: 2.1em;\n padding: 0.3em;\n border-radius: 50%;\n font-size: 0.6rem;\n text-align: center;\n background: #1779ba;\n color: #fefefe; }\n .badge.primary {\n background: #1779ba;\n color: #fefefe; }\n .badge.secondary {\n background: #767676;\n color: #fefefe; }\n .badge.success {\n background: #3adb76;\n color: #0a0a0a; }\n .badge.warning {\n background: #ffae00;\n color: #0a0a0a; }\n .badge.alert {\n background: #cc4b37;\n color: #fefefe; }\n\n.breadcrumbs {\n margin: 0 0 1rem 0;\n list-style: none; }\n .breadcrumbs::before, .breadcrumbs::after {\n display: table;\n content: ' '; }\n .breadcrumbs::after {\n clear: both; }\n .breadcrumbs li {\n float: left;\n font-size: 0.6875rem;\n color: #0a0a0a;\n cursor: default;\n text-transform: uppercase; }\n .breadcrumbs li:not(:last-child)::after {\n position: relative;\n margin: 0 0.75rem;\n opacity: 1;\n content: \"/\";\n color: #cacaca; }\n .breadcrumbs a {\n color: #1779ba; }\n .breadcrumbs a:hover {\n text-decoration: underline; }\n .breadcrumbs .disabled {\n color: #cacaca;\n cursor: not-allowed; }\n\n.callout {\n position: relative;\n margin: 0 0 1rem 0;\n padding: 1rem;\n border: 1px solid rgba(10, 10, 10, 0.25);\n border-radius: 0;\n background-color: white;\n color: #0a0a0a; }\n .callout > :first-child {\n margin-top: 0; }\n .callout > :last-child {\n margin-bottom: 0; }\n .callout.primary {\n background-color: #d7ecfa;\n color: #0a0a0a; }\n .callout.secondary {\n background-color: #eaeaea;\n color: #0a0a0a; }\n .callout.success {\n background-color: #e1faea;\n color: #0a0a0a; }\n .callout.warning {\n background-color: #fff3d9;\n color: #0a0a0a; }\n .callout.alert {\n background-color: #f7e4e1;\n color: #0a0a0a; }\n .callout.small {\n padding-top: 0.5rem;\n padding-right: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 0.5rem; }\n .callout.large {\n padding-top: 3rem;\n padding-right: 3rem;\n padding-bottom: 3rem;\n padding-left: 3rem; }\n\n.card {\n margin-bottom: 1rem;\n border: 1px solid #e6e6e6;\n border-radius: 0;\n background: #fefefe;\n box-shadow: none;\n overflow: hidden;\n color: #0a0a0a; }\n .card > :last-child {\n margin-bottom: 0; }\n\n.card-divider {\n padding: 1rem;\n background: #e6e6e6; }\n .card-divider > :last-child {\n margin-bottom: 0; }\n\n.card-section {\n padding: 1rem; }\n .card-section > :last-child {\n margin-bottom: 0; }\n\n.card-image {\n min-height: 1px; }\n\n.dropdown-pane {\n position: absolute;\n z-index: 10;\n display: none;\n width: 300px;\n padding: 1rem;\n visibility: hidden;\n border: 1px solid #cacaca;\n border-radius: 0;\n background-color: #fefefe;\n font-size: 1rem; }\n .dropdown-pane.is-opening {\n display: block; }\n .dropdown-pane.is-open {\n display: block;\n visibility: visible; }\n\n.dropdown-pane.tiny {\n width: 100px; }\n\n.dropdown-pane.small {\n width: 200px; }\n\n.dropdown-pane.large {\n width: 400px; }\n\n.pagination {\n margin-left: 0;\n margin-bottom: 1rem; }\n .pagination::before, .pagination::after {\n display: table;\n content: ' '; }\n .pagination::after {\n clear: both; }\n .pagination li {\n margin-right: 0.0625rem;\n border-radius: 0;\n font-size: 0.875rem;\n display: none; }\n .pagination li:last-child, .pagination li:first-child {\n display: inline-block; }\n @media print, screen and (min-width: 40em) {\n .pagination li {\n display: inline-block; } }\n .pagination a,\n .pagination button {\n display: block;\n padding: 0.1875rem 0.625rem;\n border-radius: 0;\n color: #0a0a0a; }\n .pagination a:hover,\n .pagination button:hover {\n background: #e6e6e6; }\n .pagination .current {\n padding: 0.1875rem 0.625rem;\n background: #1779ba;\n color: #fefefe;\n cursor: default; }\n .pagination .disabled {\n padding: 0.1875rem 0.625rem;\n color: #cacaca;\n cursor: not-allowed; }\n .pagination .disabled:hover {\n background: transparent; }\n .pagination .ellipsis::after {\n padding: 0.1875rem 0.625rem;\n content: '\\2026';\n color: #0a0a0a; }\n\n.pagination-previous a::before,\n.pagination-previous.disabled::before {\n display: inline-block;\n margin-right: 0.5rem;\n content: '\\00ab'; }\n\n.pagination-next a::after,\n.pagination-next.disabled::after {\n display: inline-block;\n margin-left: 0.5rem;\n content: '\\00bb'; }\n\n.has-tip {\n position: relative;\n display: inline-block;\n border-bottom: dotted 1px #8a8a8a;\n font-weight: bold;\n cursor: help; }\n\n.tooltip {\n position: absolute;\n top: calc(100% + 0.6495rem);\n z-index: 1200;\n max-width: 10rem;\n padding: 0.75rem;\n border-radius: 0;\n background-color: #0a0a0a;\n font-size: 80%;\n color: #fefefe; }\n .tooltip::before {\n position: absolute; }\n .tooltip.bottom::before {\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n content: '';\n border-top-width: 0;\n border-bottom-style: solid;\n border-color: transparent transparent #0a0a0a;\n bottom: 100%; }\n .tooltip.bottom.align-center::before {\n left: 50%;\n transform: translateX(-50%); }\n .tooltip.top::before {\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #0a0a0a transparent transparent;\n top: 100%;\n bottom: auto; }\n .tooltip.top.align-center::before {\n left: 50%;\n transform: translateX(-50%); }\n .tooltip.left::before {\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #0a0a0a;\n left: 100%; }\n .tooltip.left.align-center::before {\n bottom: auto;\n top: 50%;\n transform: translateY(-50%); }\n .tooltip.right::before {\n display: block;\n width: 0;\n height: 0;\n border: inset 0.75rem;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #0a0a0a transparent transparent;\n right: 100%;\n left: auto; }\n .tooltip.right.align-center::before {\n bottom: auto;\n top: 50%;\n transform: translateY(-50%); }\n .tooltip.align-top::before {\n bottom: auto;\n top: 10%; }\n .tooltip.align-bottom::before {\n bottom: 10%;\n top: auto; }\n .tooltip.align-left::before {\n left: 10%;\n right: auto; }\n .tooltip.align-right::before {\n left: auto;\n right: 10%; }\n\n.accordion {\n margin-left: 0;\n background: #fefefe;\n list-style-type: none; }\n .accordion[disabled] .accordion-title {\n cursor: not-allowed; }\n\n.accordion-item:first-child > :first-child {\n border-radius: 0 0 0 0; }\n\n.accordion-item:last-child > :last-child {\n border-radius: 0 0 0 0; }\n\n.accordion-title {\n position: relative;\n display: block;\n padding: 1.25rem 1rem;\n border: 1px solid #e6e6e6;\n border-bottom: 0;\n font-size: 0.75rem;\n line-height: 1;\n color: #1779ba; }\n :last-child:not(.is-active) > .accordion-title {\n border-bottom: 1px solid #e6e6e6;\n border-radius: 0 0 0 0; }\n .accordion-title:hover, .accordion-title:focus {\n background-color: #e6e6e6; }\n .accordion-title::before {\n position: absolute;\n top: 50%;\n right: 1rem;\n margin-top: -0.5rem;\n content: '+'; }\n .is-active > .accordion-title::before {\n content: '\\2013'; }\n\n.accordion-content {\n display: none;\n padding: 1rem;\n border: 1px solid #e6e6e6;\n border-bottom: 0;\n background-color: #fefefe;\n color: #0a0a0a; }\n :last-child > .accordion-content:last-child {\n border-bottom: 1px solid #e6e6e6; }\n\n.media-object {\n display: block;\n margin-bottom: 1rem; }\n .media-object img {\n max-width: none; }\n\n.media-object-section {\n display: table-cell;\n vertical-align: top; }\n .media-object-section:first-child {\n padding-right: 1rem; }\n .media-object-section:last-child:not(:nth-child(2)) {\n padding-left: 1rem; }\n .media-object-section > :last-child {\n margin-bottom: 0; }\n @media screen and (max-width: 39.99875em) {\n .stack-for-small .media-object-section {\n padding: 0;\n padding-bottom: 1rem;\n display: block; }\n .stack-for-small .media-object-section img {\n width: 100%; } }\n .media-object-section.middle {\n vertical-align: middle; }\n .media-object-section.bottom {\n vertical-align: bottom; }\n\n.orbit {\n position: relative; }\n\n.orbit-container {\n position: relative;\n height: 0;\n margin: 0;\n list-style: none;\n overflow: hidden; }\n\n.orbit-slide {\n width: 100%;\n position: absolute; }\n .orbit-slide.no-motionui.is-active {\n top: 0;\n left: 0; }\n\n.orbit-figure {\n margin: 0; }\n\n.orbit-image {\n width: 100%;\n max-width: 100%;\n margin: 0; }\n\n.orbit-caption {\n position: absolute;\n bottom: 0;\n width: 100%;\n margin-bottom: 0;\n padding: 1rem;\n background-color: rgba(10, 10, 10, 0.5);\n color: #fefefe; }\n\n.orbit-previous, .orbit-next {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n z-index: 10;\n padding: 1rem;\n color: #fefefe; }\n [data-whatinput='mouse'] .orbit-previous, [data-whatinput='mouse'] .orbit-next {\n outline: 0; }\n .orbit-previous:hover, .orbit-next:hover, .orbit-previous:active, .orbit-next:active, .orbit-previous:focus, .orbit-next:focus {\n background-color: rgba(10, 10, 10, 0.5); }\n\n.orbit-previous {\n left: 0; }\n\n.orbit-next {\n left: auto;\n right: 0; }\n\n.orbit-bullets {\n position: relative;\n margin-top: 0.8rem;\n margin-bottom: 0.8rem;\n text-align: center; }\n [data-whatinput='mouse'] .orbit-bullets {\n outline: 0; }\n .orbit-bullets button {\n width: 1.2rem;\n height: 1.2rem;\n margin: 0.1rem;\n border-radius: 50%;\n background-color: #cacaca; }\n .orbit-bullets button:hover {\n background-color: #8a8a8a; }\n .orbit-bullets button.is-active {\n background-color: #8a8a8a; }\n\n.responsive-embed,\n.flex-video {\n position: relative;\n height: 0;\n margin-bottom: 1rem;\n padding-bottom: 75%;\n overflow: hidden; }\n .responsive-embed iframe,\n .responsive-embed object,\n .responsive-embed embed,\n .responsive-embed video,\n .flex-video iframe,\n .flex-video object,\n .flex-video embed,\n .flex-video video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; }\n .responsive-embed.widescreen,\n .flex-video.widescreen {\n padding-bottom: 56.25%; }\n\n.tabs {\n margin: 0;\n border: 1px solid #e6e6e6;\n background: #fefefe;\n list-style-type: none; }\n .tabs::before, .tabs::after {\n display: table;\n content: ' '; }\n .tabs::after {\n clear: both; }\n\n.tabs.vertical > li {\n display: block;\n float: none;\n width: auto; }\n\n.tabs.simple > li > a {\n padding: 0; }\n .tabs.simple > li > a:hover {\n background: transparent; }\n\n.tabs.primary {\n background: #1779ba; }\n .tabs.primary > li > a {\n color: #fefefe; }\n .tabs.primary > li > a:hover, .tabs.primary > li > a:focus {\n background: #1673b1; }\n\n.tabs-title {\n float: left; }\n .tabs-title > a {\n display: block;\n padding: 1.25rem 1.5rem;\n font-size: 0.75rem;\n line-height: 1;\n color: #1779ba; }\n [data-whatinput='mouse'] .tabs-title > a {\n outline: 0; }\n .tabs-title > a:hover {\n background: #fefefe;\n color: #1468a0; }\n .tabs-title > a:focus, .tabs-title > a[aria-selected='true'] {\n background: #e6e6e6;\n color: #1779ba; }\n\n.tabs-content {\n border: 1px solid #e6e6e6;\n border-top: 0;\n background: #fefefe;\n color: #0a0a0a;\n transition: all 0.5s ease; }\n\n.tabs-content.vertical {\n border: 1px solid #e6e6e6;\n border-left: 0; }\n\n.tabs-panel {\n display: none;\n padding: 1rem; }\n .tabs-panel.is-active {\n display: block; }\n\n.thumbnail {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 1rem;\n border: 4px solid #fefefe;\n border-radius: 0;\n box-shadow: 0 0 0 1px rgba(10, 10, 10, 0.2);\n line-height: 0; }\n\na.thumbnail {\n transition: box-shadow 200ms ease-out; }\n a.thumbnail:hover, a.thumbnail:focus {\n box-shadow: 0 0 6px 1px rgba(23, 121, 186, 0.5); }\n a.thumbnail image {\n box-shadow: none; }\n\n.menu {\n padding: 0;\n margin: 0;\n list-style: none;\n position: relative; }\n [data-whatinput='mouse'] .menu li {\n outline: 0; }\n .menu a,\n .menu .button {\n line-height: 1;\n text-decoration: none;\n display: block;\n padding: 0.7rem 1rem; }\n .menu input,\n .menu select,\n .menu a,\n .menu button {\n margin-bottom: 0; }\n .menu input {\n display: inline-block; }\n .menu li, .menu.horizontal li {\n display: inline-block; }\n .menu.vertical li {\n display: block; }\n .menu.expanded {\n display: table;\n width: 100%; }\n .menu.expanded > li {\n display: table-cell;\n vertical-align: middle; }\n .menu.simple li + li {\n margin-left: 1rem; }\n .menu.simple a {\n padding: 0; }\n @media print, screen and (min-width: 40em) {\n .menu.medium-horizontal li {\n display: inline-block; }\n .menu.medium-vertical li {\n display: block; }\n .menu.medium-expanded {\n display: table;\n width: 100%; }\n .menu.medium-expanded > li {\n display: table-cell;\n vertical-align: middle; }\n .menu.medium-simple {\n display: table;\n width: 100%; }\n .menu.medium-simple > li {\n display: table-cell;\n vertical-align: middle; } }\n @media print, screen and (min-width: 64em) {\n .menu.large-horizontal li {\n display: inline-block; }\n .menu.large-vertical li {\n display: block; }\n .menu.large-expanded {\n display: table;\n width: 100%; }\n .menu.large-expanded > li {\n display: table-cell;\n vertical-align: middle; }\n .menu.large-simple {\n display: table;\n width: 100%; }\n .menu.large-simple > li {\n display: table-cell;\n vertical-align: middle; } }\n .menu.nested {\n margin-right: 0;\n margin-left: 1rem; }\n .menu.icons img,\n .menu.icons i,\n .menu.icons svg {\n vertical-align: middle; }\n .menu.icons img + span,\n .menu.icons i + span,\n .menu.icons svg + span {\n vertical-align: middle; }\n .menu.icon-top img,\n .menu.icon-top i,\n .menu.icon-top svg, .menu.icon-right img,\n .menu.icon-right i,\n .menu.icon-right svg, .menu.icon-bottom img,\n .menu.icon-bottom i,\n .menu.icon-bottom svg, .menu.icon-left img,\n .menu.icon-left i,\n .menu.icon-left svg {\n vertical-align: middle; }\n .menu.icon-top img + span,\n .menu.icon-top i + span,\n .menu.icon-top svg + span, .menu.icon-right img + span,\n .menu.icon-right i + span,\n .menu.icon-right svg + span, .menu.icon-bottom img + span,\n .menu.icon-bottom i + span,\n .menu.icon-bottom svg + span, .menu.icon-left img + span,\n .menu.icon-left i + span,\n .menu.icon-left svg + span {\n vertical-align: middle; }\n .menu.icon-left li a img,\n .menu.icon-left li a i,\n .menu.icon-left li a svg {\n margin-right: 0.25rem;\n display: inline-block; }\n .menu.icon-right li a img,\n .menu.icon-right li a i,\n .menu.icon-right li a svg {\n margin-left: 0.25rem;\n display: inline-block; }\n .menu.icon-top li a {\n text-align: center; }\n .menu.icon-top li a img,\n .menu.icon-top li a i,\n .menu.icon-top li a svg {\n display: block;\n margin: 0 auto 0.25rem; }\n .menu.icon-bottom li a {\n text-align: center; }\n .menu.icon-bottom li a img,\n .menu.icon-bottom li a i,\n .menu.icon-bottom li a svg {\n display: block;\n margin: 0.25rem auto 0; }\n .menu .is-active > a {\n background: #1779ba;\n color: #fefefe; }\n .menu .active > a {\n background: #1779ba;\n color: #fefefe; }\n .menu.align-left {\n text-align: left; }\n .menu.align-right {\n text-align: right; }\n .menu.align-right .submenu li {\n text-align: left; }\n .menu.align-right.vertical .submenu li {\n text-align: right; }\n .menu.align-right .nested {\n margin-right: 1rem;\n margin-left: 0; }\n .menu.align-center {\n text-align: center; }\n .menu.align-center .submenu li {\n text-align: left; }\n .menu .menu-text {\n padding: 0.7rem 1rem;\n font-weight: bold;\n line-height: 1;\n color: inherit; }\n\n.menu-centered > .menu {\n text-align: center; }\n .menu-centered > .menu .submenu li {\n text-align: left; }\n\n.no-js [data-responsive-menu] ul {\n display: none; }\n\n.menu-icon {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n width: 20px;\n height: 16px;\n cursor: pointer; }\n .menu-icon::after {\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n width: 100%;\n height: 2px;\n background: #fefefe;\n box-shadow: 0 7px 0 #fefefe, 0 14px 0 #fefefe;\n content: ''; }\n .menu-icon:hover::after {\n background: #cacaca;\n box-shadow: 0 7px 0 #cacaca, 0 14px 0 #cacaca; }\n\n.menu-icon.dark {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n width: 20px;\n height: 16px;\n cursor: pointer; }\n .menu-icon.dark::after {\n position: absolute;\n top: 0;\n left: 0;\n display: block;\n width: 100%;\n height: 2px;\n background: #0a0a0a;\n box-shadow: 0 7px 0 #0a0a0a, 0 14px 0 #0a0a0a;\n content: ''; }\n .menu-icon.dark:hover::after {\n background: #8a8a8a;\n box-shadow: 0 7px 0 #8a8a8a, 0 14px 0 #8a8a8a; }\n\n.accordion-menu li {\n width: 100%; }\n\n.accordion-menu a {\n padding: 0.7rem 1rem; }\n\n.accordion-menu .is-accordion-submenu a {\n padding: 0.7rem 1rem; }\n\n.accordion-menu .nested.is-accordion-submenu {\n margin-right: 0;\n margin-left: 1rem; }\n\n.accordion-menu.align-right .nested.is-accordion-submenu {\n margin-right: 1rem;\n margin-left: 0; }\n\n.accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a {\n position: relative; }\n .accordion-menu .is-accordion-submenu-parent:not(.has-submenu-toggle) > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #1779ba transparent transparent;\n position: absolute;\n top: 50%;\n margin-top: -3px;\n right: 1rem; }\n\n.accordion-menu.align-left .is-accordion-submenu-parent > a::after {\n right: 1rem;\n left: auto; }\n\n.accordion-menu.align-right .is-accordion-submenu-parent > a::after {\n right: auto;\n left: 1rem; }\n\n.accordion-menu .is-accordion-submenu-parent[aria-expanded='true'] > a::after {\n transform: rotate(180deg);\n transform-origin: 50% 50%; }\n\n.is-accordion-submenu-parent {\n position: relative; }\n\n.has-submenu-toggle > a {\n margin-right: 40px; }\n\n.submenu-toggle {\n position: absolute;\n top: 0;\n right: 0;\n width: 40px;\n height: 40px;\n cursor: pointer; }\n .submenu-toggle::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #1779ba transparent transparent;\n top: 0;\n bottom: 0;\n margin: auto; }\n\n.submenu-toggle[aria-expanded='true']::after {\n transform: scaleY(-1);\n transform-origin: 50% 50%; }\n\n.submenu-toggle-text {\n position: absolute !important;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0; }\n\n.is-drilldown {\n position: relative;\n overflow: hidden; }\n .is-drilldown li {\n display: block; }\n .is-drilldown.animate-height {\n transition: height 0.5s; }\n\n.drilldown a {\n padding: 0.7rem 1rem;\n background: #fefefe; }\n\n.drilldown .is-drilldown-submenu {\n position: absolute;\n top: 0;\n left: 100%;\n z-index: -1;\n width: 100%;\n background: #fefefe;\n transition: transform 0.15s linear; }\n .drilldown .is-drilldown-submenu.is-active {\n z-index: 1;\n display: block;\n transform: translateX(-100%); }\n .drilldown .is-drilldown-submenu.is-closing {\n transform: translateX(100%); }\n .drilldown .is-drilldown-submenu a {\n padding: 0.7rem 1rem; }\n\n.drilldown .nested.is-drilldown-submenu {\n margin-right: 0;\n margin-left: 0; }\n\n.drilldown .drilldown-submenu-cover-previous {\n min-height: 100%; }\n\n.drilldown .is-drilldown-submenu-parent > a {\n position: relative; }\n .drilldown .is-drilldown-submenu-parent > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #1779ba;\n position: absolute;\n top: 50%;\n margin-top: -6px;\n right: 1rem; }\n\n.drilldown.align-left .is-drilldown-submenu-parent > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #1779ba;\n right: 1rem;\n left: auto; }\n\n.drilldown.align-right .is-drilldown-submenu-parent > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #1779ba transparent transparent;\n right: auto;\n left: 1rem; }\n\n.drilldown .js-drilldown-back > a::before {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #1779ba transparent transparent;\n border-left-width: 0;\n display: inline-block;\n vertical-align: middle;\n margin-right: 0.75rem; }\n\n.dropdown.menu > li.opens-left > .is-dropdown-submenu {\n top: 100%;\n right: 0;\n left: auto; }\n\n.dropdown.menu > li.opens-right > .is-dropdown-submenu {\n top: 100%;\n right: auto;\n left: 0; }\n\n.dropdown.menu > li.is-dropdown-submenu-parent > a {\n position: relative;\n padding-right: 1.5rem; }\n\n.dropdown.menu > li.is-dropdown-submenu-parent > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #1779ba transparent transparent;\n right: 5px;\n left: auto;\n margin-top: -3px; }\n\n[data-whatinput='mouse'] .dropdown.menu a {\n outline: 0; }\n\n.dropdown.menu > li > a {\n padding: 0.7rem 1rem; }\n\n.dropdown.menu > li.is-active > a {\n background: transparent;\n color: #1779ba; }\n\n.no-js .dropdown.menu ul {\n display: none; }\n\n.dropdown.menu .nested.is-dropdown-submenu {\n margin-right: 0;\n margin-left: 0; }\n\n.dropdown.menu.vertical > li .is-dropdown-submenu {\n top: 0; }\n\n.dropdown.menu.vertical > li.opens-left > .is-dropdown-submenu {\n top: 0;\n right: 100%;\n left: auto; }\n\n.dropdown.menu.vertical > li.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n\n.dropdown.menu.vertical > li > a::after {\n right: 14px; }\n\n.dropdown.menu.vertical > li.opens-left > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #1779ba transparent transparent;\n right: auto;\n left: 5px; }\n\n.dropdown.menu.vertical > li.opens-right > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #1779ba; }\n\n@media print, screen and (min-width: 40em) {\n .dropdown.menu.medium-horizontal > li.opens-left > .is-dropdown-submenu {\n top: 100%;\n right: 0;\n left: auto; }\n .dropdown.menu.medium-horizontal > li.opens-right > .is-dropdown-submenu {\n top: 100%;\n right: auto;\n left: 0; }\n .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a {\n position: relative;\n padding-right: 1.5rem; }\n .dropdown.menu.medium-horizontal > li.is-dropdown-submenu-parent > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #1779ba transparent transparent;\n right: 5px;\n left: auto;\n margin-top: -3px; }\n .dropdown.menu.medium-vertical > li .is-dropdown-submenu {\n top: 0; }\n .dropdown.menu.medium-vertical > li.opens-left > .is-dropdown-submenu {\n top: 0;\n right: 100%;\n left: auto; }\n .dropdown.menu.medium-vertical > li.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n .dropdown.menu.medium-vertical > li > a::after {\n right: 14px; }\n .dropdown.menu.medium-vertical > li.opens-left > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #1779ba transparent transparent;\n right: auto;\n left: 5px; }\n .dropdown.menu.medium-vertical > li.opens-right > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #1779ba; } }\n\n@media print, screen and (min-width: 64em) {\n .dropdown.menu.large-horizontal > li.opens-left > .is-dropdown-submenu {\n top: 100%;\n right: 0;\n left: auto; }\n .dropdown.menu.large-horizontal > li.opens-right > .is-dropdown-submenu {\n top: 100%;\n right: auto;\n left: 0; }\n .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a {\n position: relative;\n padding-right: 1.5rem; }\n .dropdown.menu.large-horizontal > li.is-dropdown-submenu-parent > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-bottom-width: 0;\n border-top-style: solid;\n border-color: #1779ba transparent transparent;\n right: 5px;\n left: auto;\n margin-top: -3px; }\n .dropdown.menu.large-vertical > li .is-dropdown-submenu {\n top: 0; }\n .dropdown.menu.large-vertical > li.opens-left > .is-dropdown-submenu {\n top: 0;\n right: 100%;\n left: auto; }\n .dropdown.menu.large-vertical > li.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n .dropdown.menu.large-vertical > li > a::after {\n right: 14px; }\n .dropdown.menu.large-vertical > li.opens-left > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #1779ba transparent transparent;\n right: auto;\n left: 5px; }\n .dropdown.menu.large-vertical > li.opens-right > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #1779ba; } }\n\n.dropdown.menu.align-right .is-dropdown-submenu.first-sub {\n top: 100%;\n right: 0;\n left: auto; }\n\n.is-dropdown-menu.vertical {\n width: 100px; }\n .is-dropdown-menu.vertical.align-right {\n float: right; }\n\n.is-dropdown-submenu-parent {\n position: relative; }\n .is-dropdown-submenu-parent a::after {\n position: absolute;\n top: 50%;\n right: 5px;\n left: auto;\n margin-top: -6px; }\n .is-dropdown-submenu-parent.opens-inner > .is-dropdown-submenu {\n top: 100%;\n left: auto; }\n .is-dropdown-submenu-parent.opens-left > .is-dropdown-submenu {\n right: 100%;\n left: auto; }\n .is-dropdown-submenu-parent.opens-right > .is-dropdown-submenu {\n right: auto;\n left: 100%; }\n\n.is-dropdown-submenu {\n position: absolute;\n top: 0;\n left: 100%;\n z-index: 1;\n display: none;\n min-width: 200px;\n border: 1px solid #cacaca;\n background: #fefefe; }\n .dropdown .is-dropdown-submenu a {\n padding: 0.7rem 1rem; }\n .is-dropdown-submenu .is-dropdown-submenu-parent > a::after {\n right: 14px; }\n .is-dropdown-submenu .is-dropdown-submenu-parent.opens-left > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-left-width: 0;\n border-right-style: solid;\n border-color: transparent #1779ba transparent transparent;\n right: auto;\n left: 5px; }\n .is-dropdown-submenu .is-dropdown-submenu-parent.opens-right > a::after {\n display: block;\n width: 0;\n height: 0;\n border: inset 6px;\n content: '';\n border-right-width: 0;\n border-left-style: solid;\n border-color: transparent transparent transparent #1779ba; }\n .is-dropdown-submenu .is-dropdown-submenu {\n margin-top: -1px; }\n .is-dropdown-submenu > li {\n width: 100%; }\n .is-dropdown-submenu.js-dropdown-active {\n display: block; }\n\n.is-off-canvas-open {\n overflow: hidden; }\n\n.js-off-canvas-overlay {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 11;\n width: 100%;\n height: 100%;\n transition: opacity 0.5s ease, visibility 0.5s ease;\n background: rgba(254, 254, 254, 0.25);\n opacity: 0;\n visibility: hidden;\n overflow: hidden; }\n .js-off-canvas-overlay.is-visible {\n opacity: 1;\n visibility: visible; }\n .js-off-canvas-overlay.is-closable {\n cursor: pointer; }\n .js-off-canvas-overlay.is-overlay-absolute {\n position: absolute; }\n .js-off-canvas-overlay.is-overlay-fixed {\n position: fixed; }\n\n.off-canvas-wrapper {\n position: relative;\n overflow: hidden; }\n\n.off-canvas {\n position: fixed;\n z-index: 12;\n transition: transform 0.5s ease;\n backface-visibility: hidden;\n background: #e6e6e6; }\n [data-whatinput='mouse'] .off-canvas {\n outline: 0; }\n .off-canvas.is-transition-push {\n z-index: 12; }\n .off-canvas.is-closed {\n visibility: hidden; }\n .off-canvas.is-transition-overlap {\n z-index: 13; }\n .off-canvas.is-transition-overlap.is-open {\n box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); }\n .off-canvas.is-open {\n transform: translate(0, 0); }\n\n.off-canvas-absolute {\n position: absolute;\n z-index: 12;\n transition: transform 0.5s ease;\n backface-visibility: hidden;\n background: #e6e6e6; }\n [data-whatinput='mouse'] .off-canvas-absolute {\n outline: 0; }\n .off-canvas-absolute.is-transition-push {\n z-index: 12; }\n .off-canvas-absolute.is-closed {\n visibility: hidden; }\n .off-canvas-absolute.is-transition-overlap {\n z-index: 13; }\n .off-canvas-absolute.is-transition-overlap.is-open {\n box-shadow: 0 0 10px rgba(10, 10, 10, 0.7); }\n .off-canvas-absolute.is-open {\n transform: translate(0, 0); }\n\n.position-left {\n top: 0;\n left: 0;\n height: 100%;\n overflow-y: auto;\n width: 250px;\n transform: translateX(-250px); }\n .off-canvas-content .off-canvas.position-left {\n transform: translateX(-250px); }\n .off-canvas-content .off-canvas.position-left.is-transition-overlap.is-open {\n transform: translate(0, 0); }\n .off-canvas-content.is-open-left.has-transition-push {\n transform: translateX(250px); }\n .position-left.is-transition-push {\n box-shadow: inset -13px 0 20px -13px rgba(10, 10, 10, 0.25); }\n\n.position-right {\n top: 0;\n right: 0;\n height: 100%;\n overflow-y: auto;\n width: 250px;\n transform: translateX(250px); }\n .off-canvas-content .off-canvas.position-right {\n transform: translateX(250px); }\n .off-canvas-content .off-canvas.position-right.is-transition-overlap.is-open {\n transform: translate(0, 0); }\n .off-canvas-content.is-open-right.has-transition-push {\n transform: translateX(-250px); }\n .position-right.is-transition-push {\n box-shadow: inset 13px 0 20px -13px rgba(10, 10, 10, 0.25); }\n\n.position-top {\n top: 0;\n left: 0;\n width: 100%;\n overflow-x: auto;\n height: 250px;\n transform: translateY(-250px); }\n .off-canvas-content .off-canvas.position-top {\n transform: translateY(-250px); }\n .off-canvas-content .off-canvas.position-top.is-transition-overlap.is-open {\n transform: translate(0, 0); }\n .off-canvas-content.is-open-top.has-transition-push {\n transform: translateY(250px); }\n .position-top.is-transition-push {\n box-shadow: inset 0 -13px 20px -13px rgba(10, 10, 10, 0.25); }\n\n.position-bottom {\n bottom: 0;\n left: 0;\n width: 100%;\n overflow-x: auto;\n height: 250px;\n transform: translateY(250px); }\n .off-canvas-content .off-canvas.position-bottom {\n transform: translateY(250px); }\n .off-canvas-content .off-canvas.position-bottom.is-transition-overlap.is-open {\n transform: translate(0, 0); }\n .off-canvas-content.is-open-bottom.has-transition-push {\n transform: translateY(-250px); }\n .position-bottom.is-transition-push {\n box-shadow: inset 0 13px 20px -13px rgba(10, 10, 10, 0.25); }\n\n.off-canvas-content {\n transform: none;\n transition: transform 0.5s ease;\n backface-visibility: hidden; }\n .off-canvas-content.has-transition-push {\n transform: translate(0, 0); }\n .off-canvas-content .off-canvas.is-open {\n transform: translate(0, 0); }\n\n@media print, screen and (min-width: 40em) {\n .position-left.reveal-for-medium {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-left.reveal-for-medium .close-button {\n display: none; }\n .off-canvas-content .position-left.reveal-for-medium {\n transform: none; }\n .off-canvas-content.has-reveal-left {\n margin-left: 250px; }\n .position-left.reveal-for-medium ~ .off-canvas-content {\n margin-left: 250px; }\n .position-right.reveal-for-medium {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-right.reveal-for-medium .close-button {\n display: none; }\n .off-canvas-content .position-right.reveal-for-medium {\n transform: none; }\n .off-canvas-content.has-reveal-right {\n margin-right: 250px; }\n .position-right.reveal-for-medium ~ .off-canvas-content {\n margin-right: 250px; }\n .position-top.reveal-for-medium {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-top.reveal-for-medium .close-button {\n display: none; }\n .off-canvas-content .position-top.reveal-for-medium {\n transform: none; }\n .off-canvas-content.has-reveal-top {\n margin-top: 250px; }\n .position-top.reveal-for-medium ~ .off-canvas-content {\n margin-top: 250px; }\n .position-bottom.reveal-for-medium {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-bottom.reveal-for-medium .close-button {\n display: none; }\n .off-canvas-content .position-bottom.reveal-for-medium {\n transform: none; }\n .off-canvas-content.has-reveal-bottom {\n margin-bottom: 250px; }\n .position-bottom.reveal-for-medium ~ .off-canvas-content {\n margin-bottom: 250px; } }\n\n@media print, screen and (min-width: 64em) {\n .position-left.reveal-for-large {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-left.reveal-for-large .close-button {\n display: none; }\n .off-canvas-content .position-left.reveal-for-large {\n transform: none; }\n .off-canvas-content.has-reveal-left {\n margin-left: 250px; }\n .position-left.reveal-for-large ~ .off-canvas-content {\n margin-left: 250px; }\n .position-right.reveal-for-large {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-right.reveal-for-large .close-button {\n display: none; }\n .off-canvas-content .position-right.reveal-for-large {\n transform: none; }\n .off-canvas-content.has-reveal-right {\n margin-right: 250px; }\n .position-right.reveal-for-large ~ .off-canvas-content {\n margin-right: 250px; }\n .position-top.reveal-for-large {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-top.reveal-for-large .close-button {\n display: none; }\n .off-canvas-content .position-top.reveal-for-large {\n transform: none; }\n .off-canvas-content.has-reveal-top {\n margin-top: 250px; }\n .position-top.reveal-for-large ~ .off-canvas-content {\n margin-top: 250px; }\n .position-bottom.reveal-for-large {\n transform: none;\n z-index: 12;\n transition: none;\n visibility: visible; }\n .position-bottom.reveal-for-large .close-button {\n display: none; }\n .off-canvas-content .position-bottom.reveal-for-large {\n transform: none; }\n .off-canvas-content.has-reveal-bottom {\n margin-bottom: 250px; }\n .position-bottom.reveal-for-large ~ .off-canvas-content {\n margin-bottom: 250px; } }\n\n@media print, screen and (min-width: 40em) {\n .off-canvas.in-canvas-for-medium {\n visibility: visible;\n height: auto;\n position: static;\n background: none;\n width: auto;\n overflow: visible;\n transition: none; }\n .off-canvas.in-canvas-for-medium.position-left, .off-canvas.in-canvas-for-medium.position-right, .off-canvas.in-canvas-for-medium.position-top, .off-canvas.in-canvas-for-medium.position-bottom {\n box-shadow: none;\n transform: none; }\n .off-canvas.in-canvas-for-medium .close-button {\n display: none; } }\n\n@media print, screen and (min-width: 64em) {\n .off-canvas.in-canvas-for-large {\n visibility: visible;\n height: auto;\n position: static;\n background: none;\n width: auto;\n overflow: visible;\n transition: none; }\n .off-canvas.in-canvas-for-large.position-left, .off-canvas.in-canvas-for-large.position-right, .off-canvas.in-canvas-for-large.position-top, .off-canvas.in-canvas-for-large.position-bottom {\n box-shadow: none;\n transform: none; }\n .off-canvas.in-canvas-for-large .close-button {\n display: none; } }\n\nhtml.is-reveal-open {\n position: fixed;\n width: 100%;\n overflow-y: hidden; }\n html.is-reveal-open.zf-has-scroll {\n overflow-y: scroll; }\n html.is-reveal-open body {\n overflow-y: hidden; }\n\n.reveal-overlay {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1005;\n display: none;\n background-color: rgba(10, 10, 10, 0.45);\n overflow-y: auto; }\n\n.reveal {\n z-index: 1006;\n backface-visibility: hidden;\n display: none;\n padding: 1rem;\n border: 1px solid #cacaca;\n border-radius: 0;\n background-color: #fefefe;\n position: relative;\n top: 100px;\n margin-right: auto;\n margin-left: auto;\n overflow-y: auto; }\n [data-whatinput='mouse'] .reveal {\n outline: 0; }\n @media print, screen and (min-width: 40em) {\n .reveal {\n min-height: 0; } }\n .reveal .column, .reveal .columns {\n min-width: 0; }\n .reveal > :last-child {\n margin-bottom: 0; }\n @media print, screen and (min-width: 40em) {\n .reveal {\n width: 600px;\n max-width: 75rem; } }\n .reveal.collapse {\n padding: 0; }\n @media print, screen and (min-width: 40em) {\n .reveal.tiny {\n width: 30%;\n max-width: 75rem; } }\n @media print, screen and (min-width: 40em) {\n .reveal.small {\n width: 50%;\n max-width: 75rem; } }\n @media print, screen and (min-width: 40em) {\n .reveal.large {\n width: 90%;\n max-width: 75rem; } }\n .reveal.full {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n max-width: none;\n height: 100%;\n min-height: 100%;\n margin-left: 0;\n border: 0;\n border-radius: 0; }\n @media screen and (max-width: 39.99875em) {\n .reveal {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n max-width: none;\n height: 100%;\n min-height: 100%;\n margin-left: 0;\n border: 0;\n border-radius: 0; } }\n .reveal.without-overlay {\n position: fixed; }\n\n.sticky-container {\n position: relative; }\n\n.sticky {\n position: relative;\n z-index: 0;\n transform: translate3d(0, 0, 0); }\n\n.sticky.is-stuck {\n position: fixed;\n z-index: 5;\n width: 100%; }\n .sticky.is-stuck.is-at-top {\n top: 0; }\n .sticky.is-stuck.is-at-bottom {\n bottom: 0; }\n\n.sticky.is-anchored {\n position: relative;\n right: auto;\n left: auto; }\n .sticky.is-anchored.is-at-bottom {\n bottom: 0; }\n\n.title-bar {\n padding: 0.5rem;\n background: #0a0a0a;\n color: #fefefe; }\n .title-bar::before, .title-bar::after {\n display: table;\n content: ' '; }\n .title-bar::after {\n clear: both; }\n .title-bar .menu-icon {\n margin-left: 0.25rem;\n margin-right: 0.25rem; }\n\n.title-bar-left {\n float: left; }\n\n.title-bar-right {\n float: right;\n text-align: right; }\n\n.title-bar-title {\n display: inline-block;\n vertical-align: middle;\n font-weight: bold; }\n\n.top-bar {\n padding: 0.5rem; }\n .top-bar::before, .top-bar::after {\n display: table;\n content: ' '; }\n .top-bar::after {\n clear: both; }\n .top-bar,\n .top-bar ul {\n background-color: #e6e6e6; }\n .top-bar input {\n max-width: 200px;\n margin-right: 1rem; }\n .top-bar .input-group-field {\n width: 100%;\n margin-right: 0; }\n .top-bar input.button {\n width: auto; }\n .top-bar .top-bar-left,\n .top-bar .top-bar-right {\n width: 100%; }\n @media print, screen and (min-width: 40em) {\n .top-bar .top-bar-left,\n .top-bar .top-bar-right {\n width: auto; } }\n @media screen and (max-width: 63.99875em) {\n .top-bar.stacked-for-medium .top-bar-left,\n .top-bar.stacked-for-medium .top-bar-right {\n width: 100%; } }\n @media screen and (max-width: 74.99875em) {\n .top-bar.stacked-for-large .top-bar-left,\n .top-bar.stacked-for-large .top-bar-right {\n width: 100%; } }\n\n.top-bar-title {\n display: inline-block;\n float: left;\n padding: 0.5rem 1rem 0.5rem 0; }\n .top-bar-title .menu-icon {\n bottom: 2px; }\n\n.top-bar-left {\n float: left; }\n\n.top-bar-right {\n float: right; }\n\n.float-left {\n float: left !important; }\n\n.float-right {\n float: right !important; }\n\n.float-center {\n display: block;\n margin-right: auto;\n margin-left: auto; }\n\n.clearfix::before, .clearfix::after {\n display: table;\n content: ' '; }\n\n.clearfix::after {\n clear: both; }\n\n.hide {\n display: none !important; }\n\n.invisible {\n visibility: hidden; }\n\n@media screen and (max-width: 39.99875em) {\n .hide-for-small-only {\n display: none !important; } }\n\n@media screen and (max-width: 0em), screen and (min-width: 40em) {\n .show-for-small-only {\n display: none !important; } }\n\n@media print, screen and (min-width: 40em) {\n .hide-for-medium {\n display: none !important; } }\n\n@media screen and (max-width: 39.99875em) {\n .show-for-medium {\n display: none !important; } }\n\n@media screen and (min-width: 40em) and (max-width: 63.99875em) {\n .hide-for-medium-only {\n display: none !important; } }\n\n@media screen and (max-width: 39.99875em), screen and (min-width: 64em) {\n .show-for-medium-only {\n display: none !important; } }\n\n@media print, screen and (min-width: 64em) {\n .hide-for-large {\n display: none !important; } }\n\n@media screen and (max-width: 63.99875em) {\n .show-for-large {\n display: none !important; } }\n\n@media screen and (min-width: 64em) and (max-width: 74.99875em) {\n .hide-for-large-only {\n display: none !important; } }\n\n@media screen and (max-width: 63.99875em), screen and (min-width: 75em) {\n .show-for-large-only {\n display: none !important; } }\n\n.show-for-sr,\n.show-on-focus {\n position: absolute !important;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0; }\n\n.show-on-focus:active, .show-on-focus:focus {\n position: static !important;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal; }\n\n.show-for-landscape,\n.hide-for-portrait {\n display: block !important; }\n @media screen and (orientation: landscape) {\n .show-for-landscape,\n .hide-for-portrait {\n display: block !important; } }\n @media screen and (orientation: portrait) {\n .show-for-landscape,\n .hide-for-portrait {\n display: none !important; } }\n\n.hide-for-landscape,\n.show-for-portrait {\n display: none !important; }\n @media screen and (orientation: landscape) {\n .hide-for-landscape,\n .show-for-portrait {\n display: none !important; } }\n @media screen and (orientation: portrait) {\n .hide-for-landscape,\n .show-for-portrait {\n display: block !important; } }\n","/**\n * Foundation for Sites by ZURB\n * Version 6.5.0-rc.3\n * foundation.zurb.com\n * Licensed under MIT Open Source\n */\n\n// Dependencies\n@import 'vendor/normalize';\n@import '../_vendor/sassy-lists/stylesheets/helpers/missing-dependencies';\n@import '../_vendor/sassy-lists/stylesheets/helpers/true';\n@import '../_vendor/sassy-lists/stylesheets/functions/contain';\n@import '../_vendor/sassy-lists/stylesheets/functions/purge';\n@import '../_vendor/sassy-lists/stylesheets/functions/remove';\n@import '../_vendor/sassy-lists/stylesheets/functions/replace';\n@import '../_vendor/sassy-lists/stylesheets/functions/to-list';\n\n// --- Settings ---\n// import your own `settings` here or\n// import and modify the default settings through\n// @import 'settings/settings';\n\n// --- Components ---\n// Utilities\n@import 'util/util';\n// Global styles\n@import 'global';\n@import 'forms/forms';\n@import 'typography/typography';\n\n// Grids\n@import 'grid/grid';\n@import 'xy-grid/xy-grid';\n// Generic components\n@import 'components/button';\n@import 'components/button-group';\n@import 'components/close-button';\n@import 'components/label';\n@import 'components/progress-bar';\n@import 'components/slider';\n@import 'components/switch';\n@import 'components/table';\n// Basic components\n@import 'components/badge';\n@import 'components/breadcrumbs';\n@import 'components/callout';\n@import 'components/card';\n@import 'components/dropdown';\n@import 'components/pagination';\n@import 'components/tooltip';\n\n// Containers\n@import 'components/accordion';\n@import 'components/media-object';\n@import 'components/orbit';\n@import 'components/responsive-embed';\n@import 'components/tabs';\n@import 'components/thumbnail';\n// Menu-based containers\n@import 'components/menu';\n@import 'components/menu-icon';\n@import 'components/accordion-menu';\n@import 'components/drilldown';\n@import 'components/dropdown-menu';\n\n// Layout components\n@import 'components/off-canvas';\n@import 'components/reveal';\n@import 'components/sticky';\n@import 'components/title-bar';\n@import 'components/top-bar';\n\n// Helpers\n@import 'components/float';\n@import 'components/flex';\n@import 'components/visibility';\n@import 'prototype/prototype';\n\n\n@mixin foundation-everything(\n $flex: true,\n $prototype: false\n) {\n @if $flex {\n $global-flexbox: true !global;\n }\n\n // Global styles\n @include foundation-global-styles;\n @include foundation-forms;\n @include foundation-typography;\n\n // Grids\n @if not $flex {\n @include foundation-grid;\n }\n @else {\n @if $xy-grid {\n @include foundation-xy-grid-classes;\n }\n @else {\n @include foundation-flex-grid;\n }\n }\n\n // Generic components\n @include foundation-button;\n @include foundation-button-group;\n @include foundation-close-button;\n @include foundation-label;\n @include foundation-progress-bar;\n @include foundation-slider;\n @include foundation-switch;\n @include foundation-table;\n // Basic components\n @include foundation-badge;\n @include foundation-breadcrumbs;\n @include foundation-callout;\n @include foundation-card;\n @include foundation-dropdown;\n @include foundation-pagination;\n @include foundation-tooltip;\n\n // Containers\n @include foundation-accordion;\n @include foundation-media-object;\n @include foundation-orbit;\n @include foundation-responsive-embed;\n @include foundation-tabs;\n @include foundation-thumbnail;\n // Menu-based containers\n @include foundation-menu;\n @include foundation-menu-icon;\n @include foundation-accordion-menu;\n @include foundation-drilldown-menu;\n @include foundation-dropdown-menu;\n\n // Layout components\n @include foundation-off-canvas;\n @include foundation-reveal;\n @include foundation-sticky;\n @include foundation-title-bar;\n @include foundation-top-bar;\n\n // Helpers\n @include foundation-float-classes;\n @if $flex { @include foundation-flex-classes; }\n @include foundation-visibility-classes;\n @if $prototype { @include foundation-prototype-classes; }\n}\n","// Foundation for Sites by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n////\n/// @group breakpoints\n////\n\n/// A list of named breakpoints. You can use these with the `breakpoint()` mixin to quickly create media queries.\n/// @type Map\n$breakpoints: (\n small: 0,\n medium: 640px,\n large: 1024px,\n xlarge: 1200px,\n xxlarge: 1440px,\n) !default;\n\n/// The largest named breakpoint in which to include print as a media type\n/// @type Keyword\n$print-breakpoint: large !default;\n\n$-zf-zero-breakpoint: small !default;\n\n$-zf-breakpoints-keys: map-to-list($breakpoints, 'keys');\n\n@if nth(map-values($breakpoints), 1) != 0 {\n @error 'The first key in the $breakpoints map must have a value of \"0\".';\n}\n@else {\n $-zf-zero-breakpoint: nth(map-keys($breakpoints), 1);\n}\n\n/// All of the names in this list will be output as classes in your CSS, like `.small-12`, `.medium-6`, and so on. Each value in this list must also be in the `$breakpoints` map.\n/// @type List\n$breakpoint-classes: (small medium large) !default;\n\n/// Generates a media query string matching the input value. Refer to the documentation for the `breakpoint()` mixin to see what the possible inputs are.\n///\n/// @param {Keyword|Number} $val [small] - Breakpoint name, or px, rem, or em value to process.\n@function breakpoint($val: $-zf-zero-breakpoint) {\n // Size or keyword\n $bp: nth($val, 1);\n // Value for max-width media queries\n $bp-max: 0;\n // Direction of media query (up, down, or only)\n $dir: if(length($val) > 1, nth($val, 2), up);\n // Eventual output\n $str: '';\n // Is it a named media query?\n $named: false;\n\n // Orientation media queries have a unique syntax\n @if $bp == 'landscape' or $bp == 'portrait' {\n @return '(orientation: #{$bp})';\n }\n @else if $bp == 'retina' {\n @return '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)';\n }\n\n // Try to pull a named breakpoint out of the $breakpoints map\n @if type-of($bp) == 'string' {\n @if map-has-key($breakpoints, $bp) {\n @if $dir == 'only' or $dir == 'down' {\n $bp-max: -zf-map-next($breakpoints, $bp);\n }\n\n $bp: map-get($breakpoints, $bp);\n $named: true;\n }\n @else {\n $bp: 0;\n @warn 'breakpoint(): \"#{$val}\" is not defined in your $breakpoints setting.';\n }\n }\n\n // Convert any pixel, rem, or unitless value to em\n $bp: -zf-bp-to-em($bp);\n // Max value is 0.2px under the next breakpoint (0.02 / 16 = 0.00125).\n // Use a precision under 1px to support browser zoom, but not to low to avoid rounding.\n // See https://github.com/zurb/foundation-sites/issues/11313\n @if $bp-max {\n $bp-max: -zf-bp-to-em($bp-max) - .00125;\n }\n\n // Conditions to skip media query creation\n // - It's a named breakpoint that resolved to \"0 down\" or \"0 up\"\n // - It's a numeric breakpoint that resolved to \"0 \" + anything\n @if $bp > 0em or $dir == 'only' or $dir == 'down' {\n // `only` ranges use the format `(min-width: n) and (max-width: n)`\n @if $dir == 'only' {\n // Only named media queries can have an \"only\" range\n @if $named == true {\n // Only use \"min-width\" if the floor is greater than 0\n @if $bp > 0em {\n $str: $str + '(min-width: #{$bp})';\n\n // Only add \"and\" to the media query if there's a ceiling\n @if $bp-max != null {\n $str: $str + ' and ';\n }\n }\n\n // Only use \"max-width\" if there's a ceiling\n @if $bp-max != null {\n $str: $str + '(max-width: #{$bp-max})';\n }\n }\n @else {\n @warn 'breakpoint(): Only named media queries can have an `only` range.';\n }\n }\n\n // `down` ranges use the format `(max-width: n)`\n @else if $dir == 'down' {\n $max: if($named, $bp-max, $bp);\n\n // Skip media query creation if input value is exactly \"0 down\",\n // unless the function was called as \"small down\", in which case it's just \"small only\"\n @if $named or $bp > 0em {\n @if $max != null {\n $str: $str + '(max-width: #{$max})';\n }\n }\n }\n\n // `up` ranges use the format `(min-width: n)`\n @else if $bp > 0em {\n $str: $str + '(min-width: #{$bp})';\n }\n }\n\n @return $str;\n}\n\n/// Wraps a media query around the content you put inside the mixin. This mixin accepts a number of values:\n/// - If a string is passed, the mixin will look for it in the `$breakpoints` map, and use a media query there.\n/// - If a pixel value is passed, it will be converted to an em value using `$global-font-size` as the base.\n/// - If a rem value is passed, the unit will be changed to em.\n/// - If an em value is passed, the value will be used as-is.\n///\n/// @param {Keyword|Number} $value - Breakpoint name, or px, rem, or em value to process.\n///\n/// @output If the breakpoint is \"0px and larger\", outputs the content as-is. Otherwise, outputs the content wrapped in a media query.\n@mixin breakpoint($value) {\n $str: breakpoint($value);\n $bp: index($-zf-breakpoints-keys, $value);\n $pbp: index($-zf-breakpoints-keys, $print-breakpoint);\n\n $old-zf-size: null;\n\n // Make breakpoint size available as a variable\n @if global-variable-exists(-zf-size) {\n $old-zf-size: $-zf-size;\n }\n $-zf-size: nth($value, 1) !global; // get the first value to account for `only` and `down` keywords\n\n // If $str is still an empty string, no media query is needed\n @if $str == '' {\n @content;\n }\n\n // Otherwise, wrap the content in a media query\n @else {\n // For named breakpoints less than or equal to $print-breakpoint, add print to the media types\n @if $bp != null and $bp <= $pbp {\n @media print, screen and #{$str} {\n @content;\n }\n }\n @else {\n @media screen and #{$str} {\n @content;\n }\n }\n }\n\n $-zf-size: $old-zf-size !global;\n}\n\n/// Convers the breakpoints map to a URL-encoded string, like this: `key1=value1&key2=value2`. The value is then dropped into the CSS for a special `` tag, which is read by the Foundation JavaScript. This is how we transfer values from Sass to JavaScript, so they can be defined in one place.\n/// @access private\n///\n/// @param {Map} $map - Map to convert.\n///\n/// @returns {String} A string containing the map's contents.\n@function -zf-bp-serialize($map) {\n $str: '';\n @each $key, $value in $map {\n $str: $str + $key + '=' + -zf-bp-to-em($value) + '&';\n }\n $str: str-slice($str, 1, -2);\n\n @return $str;\n}\n\n/// Find the next key in a map.\n/// @access private\n///\n/// @param {Map} $map - Map to traverse.\n/// @param {Mixed} $key - Key to use as a starting point.\n///\n/// @returns {Mixed} The value for the key after `$key`, if `$key` was found. If `$key` was not found, or `$key` was the last value in the map, returns `null`.\n@function -zf-map-next($map, $key) {\n\n // Store the keys of the map as a list\n $values: map-keys($map);\n\n $i: 0;\n\n // If the Key Exists, Get the index of the key within the map and add 1 to it for the next breakpoint in the map\n @if (map-has-key($map, $key)) {\n $i: index($values, $key) + 1;\n }\n\n // If the key doesn't exist, or it's the last key in the map, return null\n @if ($i > length($map) or $i == 0) {\n @return null;\n }\n // Otherwise, return the value\n @else {\n @return map-get($map, nth($values, $i));\n }\n\n}\n\n/// Return a list of our named breakpoints less than $key. Useful for dealing with\n/// responsive gutters for the grid.\n/// @access private\n///\n/// @param {String} $key - Key to use as last breakpoint.\n///\n/// @returns {Array} The list of breakpoints up to and. If $key is auto, returns breakpoints above the zero\n@function -zf-breakpoints-less-than($key) {\n $list: ();\n $found_key: false;\n\n @each $name in $-zf-breakpoints-keys {\n @if ($name == $key) {\n $found_key: true;\n }\n @if not $found_key {\n $list: append($list, $name);\n }\n }\n @return $list;\n}\n\n/// Return a list of our named breakpoints less than $key. Useful for dealing with\n/// responsive gutters for the grid.\n/// @access private\n///\n/// @param {String} $breakpoint - a named or non-named breakpoint.\n///\n/// @returns {Array} The list of breakpoints up to and. If $key is auto, returns breakpoints above the zero\n@function -zf-closest-named-breakpoint($breakpoint) {\n $last: $-zf-zero-breakpoint;\n $found: false;\n\n $value: unitless-calc($breakpoint, 1px);\n @each $key, $val in $breakpoints {\n @if not $found {\n @if unitless-calc($val) > $value {\n $found: true;\n } @else {\n $last: $key;\n }\n }\n }\n\n @return $last;\n}\n\n/// Get a value for a breakpoint from a responsive config map or single value.\n/// - If the config is a single value, return it regardless of `$value`.\n/// - If the config is a map and has the key `$value`, the exact breakpoint value is returned.\n/// - If the config is a map and does *not* have the breakpoint, the value matching the next lowest breakpoint in the config map is returned.\n/// @access private\n///\n/// @param {Number|Map} $map - Responsive config map or single value.\n/// @param {Keyword} $value - Breakpoint name to use.\n///\n/// @return {Mixed} The corresponding breakpoint value.\n@function -zf-get-bp-val($map, $value) {\n // If the given map is a single value, return it\n @if type-of($map) == 'number' {\n @return $map;\n }\n\n\n // Check if the breakpoint name exists globally\n @if not map-has-key($breakpoints, $value) {\n @if type-of($value) == 'number' {\n $value: -zf-closest-named-breakpoint($value);\n } @else {\n @return null;\n }\n }\n // Check if the breakpoint name exists in the local config map\n @else if map-has-key($map, $value) {\n // If it does, just return the value\n @return map-get($map, $value);\n }\n // Otherwise, find the next lowest breakpoint and return that value\n @else {\n $anchor: null;\n $found: false;\n\n @each $key, $val in $breakpoints {\n @if not $found {\n @if map-has-key($map, $key) {\n $anchor: $key;\n }\n @if $key == $value {\n $found: true;\n }\n }\n }\n\n @return map-get($map, $anchor);\n }\n}\n\n$small-up: '';\n$small-only: '';\n\n@if map-has-key($breakpoints, small) {\n $small-up: screen;\n $small-only: unquote('screen and #{breakpoint(small only)}');\n}\n\n$medium-up: '';\n$medium-only: '';\n\n@if map-has-key($breakpoints, medium) {\n $medium-up: unquote('screen and #{breakpoint(medium)}');\n $medium-only: unquote('screen and #{breakpoint(medium only)}');\n}\n\n$large-up: '';\n$large-only: '';\n\n@if map-has-key($breakpoints, large) {\n $large-up: unquote('screen and #{breakpoint(large)}');\n $large-only: unquote('screen and #{breakpoint(large only)}');\n}\n\n$xlarge-up: '';\n$xlarge-only: '';\n\n@if map-has-key($breakpoints, xlarge) {\n $xlarge-up: unquote('screen and #{breakpoint(xlarge)}');\n $xlarge-only: unquote('screen and #{breakpoint(xlarge only)}');\n}\n\n$xxlarge-up: '';\n\n@if map-has-key($breakpoints, xxlarge) {\n $xxlarge-up: unquote('screen and #{breakpoint(xxlarge)}');\n}\n","// Foundation for Sites by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n////\n/// @group reveal\n////\n\n/// Default background color of a modal.\n/// @type Color\n$reveal-background: $white !default;\n\n/// Default width of a modal, with no class applied.\n/// @type Number\n$reveal-width: 600px !default;\n\n/// Default maximum width of a modal.\n/// @type Number\n$reveal-max-width: $global-width !default;\n\n/// Default padding inside a modal.\n/// @type Number\n$reveal-padding: $global-padding !default;\n\n/// Default border around a modal.\n/// @type Number\n$reveal-border: 1px solid $medium-gray !default;\n\n/// Default radius for modal.\n/// @type Number\n$reveal-radius: $global-radius !default;\n\n/// z-index for modals. The overlay uses this value, while the modal itself uses this value plus one.\n/// @type Number\n$reveal-zindex: 1005 !default;\n\n/// Background color of modal overlays.\n/// @type Color\n$reveal-overlay-background: rgba($black, 0.45) !default;\n\n\n// Placeholder selector for medium-and-up modals\n// Prevents duplicate CSS when defining multiple Reveal sizes\n// This should be in the same breakpoint then `@mixin reveal-modal-width`\n@include breakpoint(medium) {\n %reveal-centered {\n right: auto;\n left: auto;\n margin: 0 auto;\n }\n}\n\n\n/// Adds styles for a modal overlay.\n/// @param {Color} $background [$reveal-overlay-background] - Background color of the overlay.\n@mixin reveal-overlay($background: $reveal-overlay-background) {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $reveal-zindex;\n\n display: none;\n background-color: $background;\n overflow-y: auto;\n}\n\n/// Adds base styles for a modal.\n@mixin reveal-modal-base {\n @include disable-mouse-outline;\n z-index: $reveal-zindex + 1;\n // Workaround android browser z-index bug\n backface-visibility: hidden;\n\n display: none;\n padding: $reveal-padding;\n\n border: $reveal-border;\n border-radius: $reveal-radius;\n background-color: $reveal-background;\n\n @include breakpoint(medium) {\n min-height: 0;\n }\n\n // Make sure rows don't have a min-width on them\n .column {\n min-width: 0;\n }\n\n // Strip margins from the last item in the modal\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n/// Adjusts the width of a modal.\n/// @param {Number} $width - Width of the modal. Generally a percentage.\n/// @param {Number} $max-width [$reveal-max-width] - Maximum width of the modal.\n@mixin reveal-modal-width(\n $width: $reveal-width,\n $max-width: $reveal-max-width\n) {\n // Extends must be made outside of breakpoints for compatibility with newer Sass versions (libsass v3.5)\n @extend %reveal-centered;\n @include breakpoint(medium) {\n width: $width;\n max-width: $max-width;\n }\n}\n\n/// Creates a full-screen modal, which stretches the full width and height of the window.\n@mixin reveal-modal-fullscreen {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n width: 100%;\n max-width: none;\n height: 100%;\n min-height: 100%;\n margin-left: 0;\n\n border: 0;\n border-radius: 0;\n}\n\n@mixin foundation-reveal {\n\n /// Disables the scroll when Reveal is shown to prevent the background from shifting\n html.is-reveal-open {\n position: fixed;\n width: 100%;\n overflow-y: hidden;\n\n &.zf-has-scroll {\n overflow-y: scroll;\n }\n\n body { // sass-lint:disable-line no-qualifying-elements\n overflow-y: hidden;\n }\n }\n\n // Overlay\n .reveal-overlay {\n @include reveal-overlay;\n }\n\n // Modal container\n .reveal {\n @include reveal-modal-base;\n @include reveal-modal-width($reveal-width);\n position: relative;\n top: 100px;\n margin-right: auto;\n margin-left: auto;\n overflow-y: auto;\n\n // Remove padding\n &.collapse {\n padding: 0;\n }\n\n // Sizing classes\n &.tiny { @include reveal-modal-width(30%); }\n &.small { @include reveal-modal-width(50%); }\n &.large { @include reveal-modal-width(90%); }\n\n // Full-screen mode\n &.full {\n @include reveal-modal-fullscreen;\n }\n\n @include breakpoint($-zf-zero-breakpoint only) {\n @include reveal-modal-fullscreen;\n }\n\n &.without-overlay {\n position: fixed;\n }\n }\n}\n","@mixin foundation-normalize() {\n /*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */\n\n // Document\n // ==========================================================================\n\n // 1. Correct the line height in all browsers.\n // 2. Prevent adjustments of font size after orientation changes in iOS.\n\n html {\n line-height: 1.15; // 1\n -webkit-text-size-adjust: 100%; // 2\n }\n\n // Sections\n // ==========================================================================\n\n // Remove the margin in all browsers.\n\n body {\n margin: 0;\n }\n\n // Correct the font size and margin on `h1` elements within `section` and\n // `article` contexts in Chrome, Firefox, and Safari.\n\n h1 {\n font-size: 2em;\n margin: 0.67em 0;\n }\n\n // Grouping content\n // ==========================================================================\n\n // 1. Add the correct box sizing in Firefox.\n // 2. Show the overflow in Edge and IE.\n\n hr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n }\n\n // 1. Correct the inheritance and scaling of font size in all browsers.\n // 2. Correct the odd `em` font sizing in all browsers.\n\n pre {\n font-family: monospace, monospace; // 1\n font-size: 1em; // 2\n }\n\n // Text-level semantics\n // ==========================================================================\n\n // Remove the gray background on active links in IE 10.\n\n a {\n background-color: transparent;\n }\n\n // 1. Remove the bottom border in Chrome 57-\n // 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n\n abbr[title] {\n border-bottom: none; // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n }\n\n // Add the correct font weight in Chrome, Edge, and Safari.\n\n b,\n strong {\n font-weight: bolder;\n }\n\n // 1. Correct the inheritance and scaling of font size in all browsers.\n // 2. Correct the odd `em` font sizing in all browsers.\n\n code,\n kbd,\n samp {\n font-family: monospace, monospace; // 1\n font-size: 1em; // 2\n }\n\n // Add the correct font size in all browsers.\n\n small {\n font-size: 80%;\n }\n\n // Prevent `sub` and `sup` elements from affecting the line height in\n // all browsers.\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n // Embedded content\n // ==========================================================================\n\n // Remove the border on images inside links in IE 10.\n\n img {\n border-style: none;\n }\n\n // Forms\n // ==========================================================================\n\n // 1. Change the font styles in all browsers.\n // 2. Remove the margin in Firefox and Safari.\n\n button,\n input,\n optgroup,\n select,\n textarea {\n font-family: inherit; // 1\n font-size: 100%; // 1\n line-height: 1.15; // 1\n margin: 0; // 2\n }\n\n // Show the overflow in IE.\n // 1. Show the overflow in Edge.\n\n button,\n input { // 1\n overflow: visible;\n }\n\n // Remove the inheritance of text transform in Edge, Firefox, and IE.\n // 1. Remove the inheritance of text transform in Firefox.\n\n button,\n select { // 1\n text-transform: none;\n }\n\n // Correct the inability to style clickable types in iOS and Safari.\n\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n -webkit-appearance: button;\n }\n\n // Remove the inner border and padding in Firefox.\n\n button::-moz-focus-inner,\n [type=\"button\"]::-moz-focus-inner,\n [type=\"reset\"]::-moz-focus-inner,\n [type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n }\n\n // Restore the focus styles unset by the previous rule.\n\n button:-moz-focusring,\n [type=\"button\"]:-moz-focusring,\n [type=\"reset\"]:-moz-focusring,\n [type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n }\n\n // Correct the padding in Firefox.\n\n fieldset {\n padding: 0.35em 0.75em 0.625em;\n }\n\n // 1. Correct the text wrapping in Edge and IE.\n // 2. Correct the color inheritance from `fieldset` elements in IE.\n // 3. Remove the padding so developers are not caught out when they zero out\n // `fieldset` elements in all browsers.\n\n legend {\n box-sizing: border-box; // 1\n color: inherit; // 2\n display: table; // 1\n max-width: 100%; // 1\n padding: 0; // 3\n white-space: normal; // 1\n }\n\n // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\n progress {\n vertical-align: baseline;\n }\n\n // Remove the default vertical scrollbar in IE 10+.\n\n textarea {\n overflow: auto;\n }\n\n // 1. Add the correct box sizing in IE 10.\n // 2. Remove the padding in IE 10.\n\n [type=\"checkbox\"],\n [type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n }\n\n // Correct the cursor style of increment and decrement buttons in Chrome.\n\n [type=\"number\"]::-webkit-inner-spin-button,\n [type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n }\n\n // 1. Correct the odd appearance in Chrome and Safari.\n // 2. Correct the outline style in Safari.\n\n [type=\"search\"] {\n -webkit-appearance: textfield; // 1\n outline-offset: -2px; // 2\n }\n\n // Remove the inner padding in Chrome and Safari on macOS.\n\n [type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n // 1. Correct the inability to style clickable types in iOS and Safari.\n // 2. Change font properties to `inherit` in Safari.\n\n ::-webkit-file-upload-button {\n -webkit-appearance: button; // 1\n font: inherit; // 2\n }\n\n // Interactive\n // ==========================================================================\n\n // Add the correct display in Edge, IE 10+, and Firefox.\n\n details {\n display: block;\n }\n\n // Add the correct display in all browsers.\n\n summary {\n display: list-item;\n }\n\n // Misc\n // ==========================================================================\n\n // Add the correct display in IE 10+.\n\n template {\n display: none;\n }\n\n // Add the correct display in IE 10.\n\n [hidden] {\n display: none;\n }\n}\n","// Foundation for Sites by ZURB\n// foundation.zurb.com\n// Licensed under MIT Open Source\n\n// sass-lint:disable no-color-literals, no-qualifying-elements\n\n////\n/// @group global\n////\n\n@import 'util/util';\n\n/// Font size attribute applied to `` and ``. We use 100% by default so the value is inherited from the user's browser settings.\n/// @type Number\n$global-font-size: 100% !default;\n\n/// Global width of your site. Used by the grid to determine row width.\n/// @type Number\n$global-width: rem-calc(1200) !default;\n\n/// Default line height for all type. `$global-lineheight` is 24px while `$global-font-size` is 16px\n/// @type Number\n$global-lineheight: 1.5 !default;\n\n/// Colors used for buttons, callouts, links, etc. There must always be a color called `primary`.\n/// @type Map\n$foundation-palette: (\n primary: #1779ba,\n secondary: #767676,\n success: #3adb76,\n warning: #ffae00,\n alert: #cc4b37,\n) !default;\n\n/// Color used for light gray UI items.\n/// @type Color\n$light-gray: #e6e6e6 !default;\n\n/// Color used for medium gray UI items.\n/// @type Color\n$medium-gray: #cacaca !default;\n\n/// Color used for dark gray UI items.\n/// @type Color\n$dark-gray: #8a8a8a !default;\n\n/// Color used for black ui items.\n/// @type Color\n$black: #0a0a0a !default;\n\n/// Color used for white ui items.\n/// @type Color\n$white: #fefefe !default;\n\n/// Background color of the body.\n/// @type Color\n$body-background: $white !default;\n\n/// Text color of the body.\n/// @type Color\n$body-font-color: $black !default;\n\n/// Font stack of the body.\n/// @type List\n$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif !default;\n\n/// Set to `true` to enable antialiased type, using the `-webkit-font-smoothing` and `-moz-osx-font-smoothing` CSS properties.\n/// @type Boolean\n$body-antialiased: true !default;\n\n/// Global value used for margin on components.\n/// @type Number\n$global-margin: 1rem !default;\n\n/// Global value used for padding on components.\n/// @type Number\n$global-padding: 1rem !default;\n\n/// Global value used for positioning on components.\n/// @type Number\n$global-position: 1rem !default;\n\n/// Global font weight used for normal type.\n/// @type Keyword | Number\n$global-weight-normal: normal !default;\n\n/// Global font weight used for bold type.\n/// @type Keyword | Number\n$global-weight-bold: bold !default;\n\n/// Global value used for all elements that have a border radius.\n/// @type Number\n$global-radius: 0 !default;\n\n/// Global value used for all menu styles. Can be overwritten at individual menu component level.\n/// @type Number\n$global-menu-padding: 0.7rem 1rem !default;\n\n/// Global value used for all menu styles. Nested margin for submenu.\n$global-menu-nested-margin: 1rem !default;\n\n/// Sets the text direction of the CSS. Can be either `ltr` or `rtl`.\n/// @type Keyword\n$global-text-direction: ltr !default;\n\n/// Enables flexbox for components that support it.\n/// @type Boolean\n$global-flexbox: true !default;\n\n/// Enabled responsive breakpoints for prototypes if applicable\n/// @type Boolean\n$global-prototype-breakpoints: false !default;\n\n/// Button cursor's value, `auto` by default\n/// @type Keyword\n$global-button-cursor: auto !default;\n\n@if not map-has-key($foundation-palette, primary) {\n @error 'In $foundation-palette, you must have a color named \"primary\".';\n}\n\n// Internal variables used for text direction\n$global-left: if($global-text-direction == rtl, right, left);\n$global-right: if($global-text-direction == rtl, left, right);\n\n// Internal variable that contains the flex justifying options\n$-zf-flex-justify: -zf-flex-justify($global-text-direction);\n\n/// Global tolerance for color pick contrast.\n/// @type Number\n$global-color-pick-contrast-tolerance: 0 !default;\n\n// Internal variables used for colors\n@include add-foundation-colors;\n\n@mixin foundation-global-styles {\n @include foundation-normalize;\n\n // These styles are applied to a tag, which is read by the Foundation JavaScript\n .foundation-mq {\n font-family: '#{-zf-bp-serialize($breakpoints)}';\n }\n\n html {\n box-sizing: border-box;\n font-size: $global-font-size;\n }\n\n // Set box-sizing globally to handle padding and border widths\n *,\n *::before,\n *::after {\n box-sizing: inherit;\n }\n\n // Default body styles\n body {\n margin: 0;\n padding: 0;\n\n background: $body-background;\n\n font-family: $body-font-family;\n font-weight: $global-weight-normal;\n line-height: $global-lineheight;\n color: $body-font-color;\n\n @if ($body-antialiased) {\n -webkit-font-smoothing: antialiased; // sass-lint:disable-line no-vendor-prefixes\n -moz-osx-font-smoothing: grayscale; // sass-lint:disable-line no-vendor-prefixes\n }\n }\n\n img {\n // Get rid of gap under images by making them display: inline-block; by default\n display: inline-block;\n vertical-align: middle;\n\n // Grid defaults to get images and embeds to work properly\n max-width: 100%;\n height: auto;\n -ms-interpolation-mode: bicubic;\n }\n\n // Make sure textarea takes on height automatically\n textarea {\n height: auto;\n min-height: 50px;\n border-radius: $global-radius;\n }\n\n // Make select elements are 100% width by default\n select {\n box-sizing: border-box;\n width: 100%;\n border-radius: $global-radius;\n }\n\n // Styles Google Maps and MapQuest embeds properly\n // sass-lint:disable-line no-ids\n .map_canvas,\n .mqa-display {\n img,\n embed,\n object {\n max-width: none !important;\n }\n }\n\n // Reset '); + } else { + $elem.attr({ + 'aria-controls': subId, + 'aria-expanded': isActive, + 'id': linkId + }); + } + + $sub.attr({ + 'aria-labelledby': linkId, + 'aria-hidden': !isActive, + 'role': 'group', + 'id': subId + }); + }); + this.$element.find('li').attr({ + 'role': 'treeitem' + }); + var initPanes = this.$element.find('.is-active'); + + if (initPanes.length) { + var _this = this; + + initPanes.each(function () { + _this.down($(this)); + }); + } + + this._events(); + } + /** + * Adds event handlers for items within the menu. + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this = this; + + this.$element.find('li').each(function () { + var $submenu = $(this).children('[data-submenu]'); + + if ($submenu.length) { + if (_this.options.submenuToggle) { + $(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) { + _this.toggle($submenu); + }); + } else { + $(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) { + e.preventDefault(); + + _this.toggle($submenu); + }); + } + } + }).on('keydown.zf.accordionmenu', function (e) { + var $element = $(this), + $elements = $element.parent('ul').children('li'), + $prevElement, + $nextElement, + $target = $element.children('[data-submenu]'); + $elements.each(function (i) { + if ($(this).is($element)) { + $prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first(); + $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first(); + + if ($(this).children('[data-submenu]:visible').length) { + // has open sub menu + $nextElement = $element.find('li:first-child').find('a').first(); + } + + if ($(this).is(':first-child')) { + // is first element of sub menu + $prevElement = $element.parents('li').first().find('a').first(); + } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { + // if previous element has open sub menu + $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first(); + } + + if ($(this).is(':last-child')) { + // is last element of sub menu + $nextElement = $element.parents('li').first().next('li').find('a').first(); + } + + return; + } + }); + Keyboard.handleKey(e, 'AccordionMenu', { + open: function open() { + if ($target.is(':hidden')) { + _this.down($target); + + $target.find('li').first().find('a').first().focus(); + } + }, + close: function close() { + if ($target.length && !$target.is(':hidden')) { + // close active sub of this item + _this.up($target); + } else if ($element.parent('[data-submenu]').length) { + // close currently open sub + _this.up($element.parent('[data-submenu]')); + + $element.parents('li').first().find('a').first().focus(); + } + }, + up: function up() { + $prevElement.focus(); + return true; + }, + down: function down() { + $nextElement.focus(); + return true; + }, + toggle: function toggle() { + if (_this.options.submenuToggle) { + return false; + } + + if ($element.children('[data-submenu]').length) { + _this.toggle($element.children('[data-submenu]')); + + return true; + } + }, + closeAll: function closeAll() { + _this.hideAll(); + }, + handled: function handled(preventDefault) { + if (preventDefault) { + e.preventDefault(); + } + + e.stopImmediatePropagation(); + } + }); + }); //.attr('tabindex', 0); + } + /** + * Closes all panes of the menu. + * @function + */ + + }, { + key: "hideAll", + value: function hideAll() { + this.up(this.$element.find('[data-submenu]')); + } + /** + * Opens all panes of the menu. + * @function + */ + + }, { + key: "showAll", + value: function showAll() { + this.down(this.$element.find('[data-submenu]')); + } + /** + * Toggles the open/close state of a submenu. + * @function + * @param {jQuery} $target - the submenu to toggle + */ + + }, { + key: "toggle", + value: function toggle($target) { + if (!$target.is(':animated')) { + if (!$target.is(':hidden')) { + this.up($target); + } else { + this.down($target); + } + } + } + /** + * Opens the sub-menu defined by `$target`. + * @param {jQuery} $target - Sub-menu to open. + * @fires AccordionMenu#down + */ + + }, { + key: "down", + value: function down($target) { + var _this = this; + + if (!this.options.multiOpen) { + this.up(this.$element.find('.is-active').not($target.parentsUntil(this.$element).add($target))); + } + + $target.addClass('is-active').attr({ + 'aria-hidden': false + }); + + if (this.options.submenuToggle) { + $target.prev('.submenu-toggle').attr({ + 'aria-expanded': true + }); + } else { + $target.parent('.is-accordion-submenu-parent').attr({ + 'aria-expanded': true + }); + } + + $target.slideDown(_this.options.slideSpeed, function () { + /** + * Fires when the menu is done opening. + * @event AccordionMenu#down + */ + _this.$element.trigger('down.zf.accordionMenu', [$target]); + }); + } + /** + * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well. + * @param {jQuery} $target - Sub-menu to close. + * @fires AccordionMenu#up + */ + + }, { + key: "up", + value: function up($target) { + var _this = this; + + $target.slideUp(_this.options.slideSpeed, function () { + /** + * Fires when the menu is done collapsing up. + * @event AccordionMenu#up + */ + _this.$element.trigger('up.zf.accordionMenu', [$target]); + }); + var $menus = $target.find('[data-submenu]').slideUp(0).addBack().attr('aria-hidden', true); + + if (this.options.submenuToggle) { + $menus.prev('.submenu-toggle').attr('aria-expanded', false); + } else { + $menus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false); + } + } + /** + * Destroys an instance of accordion menu. + * @fires AccordionMenu#destroyed + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.find('[data-submenu]').slideDown(0).css('display', ''); + this.$element.find('a').off('click.zf.accordionMenu'); + this.$element.find('[data-is-parent-link]').detach(); + + if (this.options.submenuToggle) { + this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle'); + this.$element.find('.submenu-toggle').remove(); + } + + Nest.Burn(this.$element, 'accordion'); + } + }]); + + return AccordionMenu; +}(Plugin); + +AccordionMenu.defaults = { + /** + * Adds the parent link to the submenu. + * @option + * @type {boolean} + * @default false + */ + parentLink: false, + + /** + * Amount of time to animate the opening of a submenu in ms. + * @option + * @type {number} + * @default 250 + */ + slideSpeed: 250, + + /** + * Adds a separate submenu toggle button. This allows the parent item to have a link. + * @option + * @example true + */ + submenuToggle: false, + + /** + * The text used for the submenu toggle if enabled. This is used for screen readers only. + * @option + * @example true + */ + submenuToggleText: 'Toggle menu', + + /** + * Allow the menu to have multiple open panes. + * @option + * @type {boolean} + * @default true + */ + multiOpen: true +}; + +/** + * Drilldown module. + * @module foundation.drilldown + * @requires foundation.util.keyboard + * @requires foundation.util.nest + * @requires foundation.util.box + */ + +var Drilldown = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Drilldown, _Plugin); + + function Drilldown() { + _classCallCheck(this, Drilldown); + + return _possibleConstructorReturn(this, _getPrototypeOf(Drilldown).apply(this, arguments)); + } + + _createClass(Drilldown, [{ + key: "_setup", + + /** + * Creates a new instance of a drilldown menu. + * @class + * @name Drilldown + * @param {jQuery} element - jQuery object to make into an accordion menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Drilldown.defaults, this.$element.data(), options); + this.className = 'Drilldown'; // ie9 back compat + + this._init(); + + Keyboard.register('Drilldown', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ARROW_RIGHT': 'next', + 'ARROW_UP': 'up', + 'ARROW_DOWN': 'down', + 'ARROW_LEFT': 'previous', + 'ESCAPE': 'close', + 'TAB': 'down', + 'SHIFT_TAB': 'up' + }); + } + /** + * Initializes the drilldown by creating jQuery collections of elements + * @private + */ + + }, { + key: "_init", + value: function _init() { + Nest.Feather(this.$element, 'drilldown'); + + if (this.options.autoApplyClass) { + this.$element.addClass('drilldown'); + } + + this.$element.attr({ + 'role': 'tree', + 'aria-multiselectable': false + }); + this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a'); + this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group'); + this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'treeitem').find('a'); // Set the main menu as current by default (unless a submenu is selected) + // Used to set the wrapper height when the drilldown is closed/reopened from any (sub)menu + + this.$currentMenu = this.$element; + this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || GetYoDigits(6, 'drilldown')); + + this._prepareMenu(); + + this._registerEvents(); + + this._keyboardEvents(); + } + /** + * prepares drilldown menu by setting attributes to links and elements + * sets a min height to prevent content jumping + * wraps the element if not already wrapped + * @private + * @function + */ + + }, { + key: "_prepareMenu", + value: function _prepareMenu() { + var _this = this; // if(!this.options.holdOpen){ + // this._menuLinkEvents(); + // } + + + this.$submenuAnchors.each(function () { + var $link = $(this); + var $sub = $link.parent(); + + if (_this.options.parentLink) { + $link.clone().prependTo($sub.children('[data-submenu]')).wrap(''); + } + + $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0); + $link.children('[data-submenu]').attr({ + 'aria-hidden': true, + 'tabindex': 0, + 'role': 'group' + }); + + _this._events($link); + }); + this.$submenus.each(function () { + var $menu = $(this), + $back = $menu.find('.js-drilldown-back'); + + if (!$back.length) { + switch (_this.options.backButtonPosition) { + case "bottom": + $menu.append(_this.options.backButton); + break; + + case "top": + $menu.prepend(_this.options.backButton); + break; + + default: + console.error("Unsupported backButtonPosition value '" + _this.options.backButtonPosition + "'"); + } + } + + _this._back($menu); + }); + this.$submenus.addClass('invisible'); + + if (!this.options.autoHeight) { + this.$submenus.addClass('drilldown-submenu-cover-previous'); + } // create a wrapper on element if it doesn't exist. + + + if (!this.$element.parent().hasClass('is-drilldown')) { + this.$wrapper = $(this.options.wrapper).addClass('is-drilldown'); + if (this.options.animateHeight) this.$wrapper.addClass('animate-height'); + this.$element.wrap(this.$wrapper); + } // set wrapper + + + this.$wrapper = this.$element.parent(); + this.$wrapper.css(this._getMaxDims()); + } + }, { + key: "_resize", + value: function _resize() { + this.$wrapper.css({ + 'max-width': 'none', + 'min-height': 'none' + }); // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths + + this.$wrapper.css(this._getMaxDims()); + } + /** + * Adds event handlers to elements in the menu. + * @function + * @private + * @param {jQuery} $elem - the current menu item to add handlers to. + */ + + }, { + key: "_events", + value: function _events($elem) { + var _this = this; + + $elem.off('click.zf.drilldown').on('click.zf.drilldown', function (e) { + if ($(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')) { + e.stopImmediatePropagation(); + e.preventDefault(); + } // if(e.target !== e.currentTarget.firstElementChild){ + // return false; + // } + + + _this._show($elem.parent('li')); + + if (_this.options.closeOnClick) { + var $body = $('body'); + $body.off('.zf.drilldown').on('click.zf.drilldown', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target)) { + return; + } + + e.preventDefault(); + + _this._hideAll(); + + $body.off('.zf.drilldown'); + }); + } + }); + } + /** + * Adds event handlers to the menu element. + * @function + * @private + */ + + }, { + key: "_registerEvents", + value: function _registerEvents() { + if (this.options.scrollTop) { + this._bindHandler = this._scrollTop.bind(this); + this.$element.on('open.zf.drilldown hide.zf.drilldown closed.zf.drilldown', this._bindHandler); + } + + this.$element.on('mutateme.zf.trigger', this._resize.bind(this)); + } + /** + * Scroll to Top of Element or data-scroll-top-element + * @function + * @fires Drilldown#scrollme + */ + + }, { + key: "_scrollTop", + value: function _scrollTop() { + var _this = this; + + var $scrollTopElement = _this.options.scrollTopElement != '' ? $(_this.options.scrollTopElement) : _this.$element, + scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset, 10); + $('html, body').stop(true).animate({ + scrollTop: scrollPos + }, _this.options.animationDuration, _this.options.animationEasing, function () { + /** + * Fires after the menu has scrolled + * @event Drilldown#scrollme + */ + if (this === $('html')[0]) _this.$element.trigger('scrollme.zf.drilldown'); + }); + } + /** + * Adds keydown event listener to `li`'s in the menu. + * @private + */ + + }, { + key: "_keyboardEvents", + value: function _keyboardEvents() { + var _this = this; + + this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) { + var $element = $(this), + $elements = $element.parent('li').parent('ul').children('li').children('a'), + $prevElement, + $nextElement; + $elements.each(function (i) { + if ($(this).is($element)) { + $prevElement = $elements.eq(Math.max(0, i - 1)); + $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)); + return; + } + }); + Keyboard.handleKey(e, 'Drilldown', { + next: function next() { + if ($element.is(_this.$submenuAnchors)) { + _this._show($element.parent('li')); + + $element.parent('li').one(transitionend($element), function () { + $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus(); + }); + return true; + } + }, + previous: function previous() { + _this._hide($element.parent('li').parent('ul')); + + $element.parent('li').parent('ul').one(transitionend($element), function () { + setTimeout(function () { + $element.parent('li').parent('ul').parent('li').children('a').first().focus(); + }, 1); + }); + return true; + }, + up: function up() { + $prevElement.focus(); // Don't tap focus on first element in root ul + + return !$element.is(_this.$element.find('> li:first-child > a')); + }, + down: function down() { + $nextElement.focus(); // Don't tap focus on last element in root ul + + return !$element.is(_this.$element.find('> li:last-child > a')); + }, + close: function close() { + // Don't close on element in root ul + if (!$element.is(_this.$element.find('> li > a'))) { + _this._hide($element.parent().parent()); + + $element.parent().parent().siblings('a').focus(); + } + }, + open: function open() { + if (_this.options.parentLink && $element.attr('href')) { + // Link with href + return false; + } else if (!$element.is(_this.$menuItems)) { + // not menu item means back button + _this._hide($element.parent('li').parent('ul')); + + $element.parent('li').parent('ul').one(transitionend($element), function () { + setTimeout(function () { + $element.parent('li').parent('ul').parent('li').children('a').first().focus(); + }, 1); + }); + return true; + } else if ($element.is(_this.$submenuAnchors)) { + // Sub menu item + _this._show($element.parent('li')); + + $element.parent('li').one(transitionend($element), function () { + $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus(); + }); + return true; + } + }, + handled: function handled(preventDefault) { + if (preventDefault) { + e.preventDefault(); + } + + e.stopImmediatePropagation(); + } + }); + }); // end keyboardAccess + } + /** + * Closes all open elements, and returns to root menu. + * @function + * @fires Drilldown#closed + */ + + }, { + key: "_hideAll", + value: function _hideAll() { + var $elem = this.$element.find('.is-drilldown-submenu.is-active').addClass('is-closing'); + if (this.options.autoHeight) this.$wrapper.css({ + height: $elem.parent().closest('ul').data('calcHeight') + }); + $elem.one(transitionend($elem), function (e) { + $elem.removeClass('is-active is-closing'); + }); + /** + * Fires when the menu is fully closed. + * @event Drilldown#closed + */ + + this.$element.trigger('closed.zf.drilldown'); + } + /** + * Adds event listener for each `back` button, and closes open menus. + * @function + * @fires Drilldown#back + * @param {jQuery} $elem - the current sub-menu to add `back` event. + */ + + }, { + key: "_back", + value: function _back($elem) { + var _this = this; + + $elem.off('click.zf.drilldown'); + $elem.children('.js-drilldown-back').on('click.zf.drilldown', function (e) { + e.stopImmediatePropagation(); // console.log('mouseup on back'); + + _this._hide($elem); // If there is a parent submenu, call show + + + var parentSubMenu = $elem.parent('li').parent('ul').parent('li'); + + if (parentSubMenu.length) { + _this._show(parentSubMenu); + } + }); + } + /** + * Adds event listener to menu items w/o submenus to close open menus on click. + * @function + * @private + */ + + }, { + key: "_menuLinkEvents", + value: function _menuLinkEvents() { + var _this = this; + + this.$menuItems.not('.is-drilldown-submenu-parent').off('click.zf.drilldown').on('click.zf.drilldown', function (e) { + // e.stopImmediatePropagation(); + setTimeout(function () { + _this._hideAll(); + }, 0); + }); + } + /** + * Sets the CSS classes for submenu to show it. + * @function + * @private + * @param {jQuery} $elem - the target submenu (`ul` tag) + * @param {boolean} trigger - trigger drilldown event + */ + + }, { + key: "_setShowSubMenuClasses", + value: function _setShowSubMenuClasses($elem, trigger) { + $elem.addClass('is-active').removeClass('invisible').attr('aria-hidden', false); + $elem.parent('li').attr('aria-expanded', true); + + if (trigger === true) { + this.$element.trigger('open.zf.drilldown', [$elem]); + } + } + /** + * Sets the CSS classes for submenu to hide it. + * @function + * @private + * @param {jQuery} $elem - the target submenu (`ul` tag) + * @param {boolean} trigger - trigger drilldown event + */ + + }, { + key: "_setHideSubMenuClasses", + value: function _setHideSubMenuClasses($elem, trigger) { + $elem.removeClass('is-active').addClass('invisible').attr('aria-hidden', true); + $elem.parent('li').attr('aria-expanded', false); + + if (trigger === true) { + $elem.trigger('hide.zf.drilldown', [$elem]); + } + } + /** + * Opens a specific drilldown (sub)menu no matter which (sub)menu in it is currently visible. + * Compared to _show() this lets you jump into any submenu without clicking through every submenu on the way to it. + * @function + * @fires Drilldown#open + * @param {jQuery} $elem - the target (sub)menu (`ul` tag) + * @param {boolean} autoFocus - if true the first link in the target (sub)menu gets auto focused + */ + + }, { + key: "_showMenu", + value: function _showMenu($elem, autoFocus) { + var _this = this; // Reset drilldown + + + var $expandedSubmenus = this.$element.find('li[aria-expanded="true"] > ul[data-submenu]'); + $expandedSubmenus.each(function (index) { + _this._setHideSubMenuClasses($(this)); + }); // Save the menu as the currently displayed one. + + this.$currentMenu = $elem; // If target menu is root, focus first link & exit + + if ($elem.is('[data-drilldown]')) { + if (autoFocus === true) $elem.find('li[role="treeitem"] > a').first().focus(); + if (this.options.autoHeight) this.$wrapper.css('height', $elem.data('calcHeight')); + return; + } // Find all submenus on way to root incl. the element itself + + + var $submenus = $elem.children().first().parentsUntil('[data-drilldown]', '[data-submenu]'); // Open target menu and all submenus on its way to root + + $submenus.each(function (index) { + // Update height of first child (target menu) if autoHeight option true + if (index === 0 && _this.options.autoHeight) { + _this.$wrapper.css('height', $(this).data('calcHeight')); + } + + var isLastChild = index == $submenus.length - 1; // Add transitionsend listener to last child (root due to reverse order) to open target menu's first link + // Last child makes sure the event gets always triggered even if going through several menus + + if (isLastChild === true) { + $(this).one(transitionend($(this)), function () { + if (autoFocus === true) { + $elem.find('li[role="treeitem"] > a').first().focus(); + } + }); + } + + _this._setShowSubMenuClasses($(this), isLastChild); + }); + } + /** + * Opens a submenu. + * @function + * @fires Drilldown#open + * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag. + */ + + }, { + key: "_show", + value: function _show($elem) { + var $submenu = $elem.children('[data-submenu]'); + $elem.attr('aria-expanded', true); + this.$currentMenu = $submenu; + $submenu.addClass('is-active').removeClass('invisible').attr('aria-hidden', false); + + if (this.options.autoHeight) { + this.$wrapper.css({ + height: $submenu.data('calcHeight') + }); + } + /** + * Fires when the submenu has opened. + * @event Drilldown#open + */ + + + this.$element.trigger('open.zf.drilldown', [$elem]); + } + /** + * Hides a submenu + * @function + * @fires Drilldown#hide + * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag. + */ + + }, { + key: "_hide", + value: function _hide($elem) { + if (this.options.autoHeight) this.$wrapper.css({ + height: $elem.parent().closest('ul').data('calcHeight') + }); + + $elem.parent('li').attr('aria-expanded', false); + $elem.attr('aria-hidden', true); + $elem.addClass('is-closing').one(transitionend($elem), function () { + $elem.removeClass('is-active is-closing'); + $elem.blur().addClass('invisible'); + }); + /** + * Fires when the submenu has closed. + * @event Drilldown#hide + */ + + $elem.trigger('hide.zf.drilldown', [$elem]); + } + /** + * Iterates through the nested menus to calculate the min-height, and max-width for the menu. + * Prevents content jumping. + * @function + * @private + */ + + }, { + key: "_getMaxDims", + value: function _getMaxDims() { + var maxHeight = 0, + result = {}, + _this = this; // Recalculate menu heights and total max height + + + this.$submenus.add(this.$element).each(function () { + var numOfElems = $(this).children('li').length; + var height = Box.GetDimensions(this).height; + maxHeight = height > maxHeight ? height : maxHeight; + + if (_this.options.autoHeight) { + $(this).data('calcHeight', height); + } + }); + if (this.options.autoHeight) result['height'] = this.$currentMenu.data('calcHeight');else result['min-height'] = "".concat(maxHeight, "px"); + result['max-width'] = "".concat(this.$element[0].getBoundingClientRect().width, "px"); + return result; + } + /** + * Destroys the Drilldown Menu + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler); + + this._hideAll(); + + this.$element.off('mutateme.zf.trigger'); + Nest.Burn(this.$element, 'drilldown'); + this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role'); + this.$submenuAnchors.each(function () { + $(this).off('.zf.drilldown'); + }); + this.$element.find('[data-is-parent-link]').detach(); + this.$submenus.removeClass('drilldown-submenu-cover-previous invisible'); + this.$element.find('a').each(function () { + var $link = $(this); + $link.removeAttr('tabindex'); + + if ($link.data('savedHref')) { + $link.attr('href', $link.data('savedHref')).removeData('savedHref'); + } else { + return; + } + }); + } + }]); + + return Drilldown; +}(Plugin); + +Drilldown.defaults = { + /** + * Drilldowns depend on styles in order to function properly; in the default build of Foundation these are + * on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization. + * @option + * @type {boolian} + * @default true + */ + autoApplyClass: true, + + /** + * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting. + * @option + * @type {string} + * @default '
  • Back
  • ' + */ + backButton: '
  • Back
  • ', + + /** + * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`. + * @option + * @type {string} + * @default top + */ + backButtonPosition: 'top', + + /** + * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\`) if copy and pasting. + * @option + * @type {string} + * @default '
    ' + */ + wrapper: '
    ', + + /** + * Adds the parent link to the submenu. + * @option + * @type {boolean} + * @default false + */ + parentLink: false, + + /** + * Allow the menu to return to root list on body click. + * @option + * @type {boolean} + * @default false + */ + closeOnClick: false, + + /** + * Allow the menu to auto adjust height. + * @option + * @type {boolean} + * @default false + */ + autoHeight: false, + + /** + * Animate the auto adjust height. + * @option + * @type {boolean} + * @default false + */ + animateHeight: false, + + /** + * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button + * @option + * @type {boolean} + * @default false + */ + scrollTop: false, + + /** + * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken + * @option + * @type {string} + * @default '' + */ + scrollTopElement: '', + + /** + * ScrollTop offset + * @option + * @type {number} + * @default 0 + */ + scrollTopOffset: 0, + + /** + * Scroll animation duration + * @option + * @type {number} + * @default 500 + */ + animationDuration: 500, + + /** + * Scroll animation easing. Can be `'swing'` or `'linear'`. + * @option + * @type {string} + * @see {@link https://api.jquery.com/animate|JQuery animate} + * @default 'swing' + */ + animationEasing: 'swing' // holdOpen: false + +}; + +var POSITIONS = ['left', 'right', 'top', 'bottom']; +var VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center']; +var HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center']; +var ALIGNMENTS = { + 'left': VERTICAL_ALIGNMENTS, + 'right': VERTICAL_ALIGNMENTS, + 'top': HORIZONTAL_ALIGNMENTS, + 'bottom': HORIZONTAL_ALIGNMENTS +}; + +function nextItem(item, array) { + var currentIdx = array.indexOf(item); + + if (currentIdx === array.length - 1) { + return array[0]; + } else { + return array[currentIdx + 1]; + } +} + +var Positionable = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Positionable, _Plugin); + + function Positionable() { + _classCallCheck(this, Positionable); + + return _possibleConstructorReturn(this, _getPrototypeOf(Positionable).apply(this, arguments)); + } + + _createClass(Positionable, [{ + key: "_init", + + /** + * Abstract class encapsulating the tether-like explicit positioning logic + * including repositioning based on overlap. + * Expects classes to define defaults for vOffset, hOffset, position, + * alignment, allowOverlap, and allowBottomOverlap. They can do this by + * extending the defaults, or (for now recommended due to the way docs are + * generated) by explicitly declaring them. + * + **/ + value: function _init() { + this.triedPositions = {}; + this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position; + this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment; + this.originalPosition = this.position; + this.originalAlignment = this.alignment; + } + }, { + key: "_getDefaultPosition", + value: function _getDefaultPosition() { + return 'bottom'; + } + }, { + key: "_getDefaultAlignment", + value: function _getDefaultAlignment() { + switch (this.position) { + case 'bottom': + case 'top': + return rtl() ? 'right' : 'left'; + + case 'left': + case 'right': + return 'bottom'; + } + } + /** + * Adjusts the positionable possible positions by iterating through alignments + * and positions. + * @function + * @private + */ + + }, { + key: "_reposition", + value: function _reposition() { + if (this._alignmentsExhausted(this.position)) { + this.position = nextItem(this.position, POSITIONS); + this.alignment = ALIGNMENTS[this.position][0]; + } else { + this._realign(); + } + } + /** + * Adjusts the dropdown pane possible positions by iterating through alignments + * on the current position. + * @function + * @private + */ + + }, { + key: "_realign", + value: function _realign() { + this._addTriedPosition(this.position, this.alignment); + + this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position]); + } + }, { + key: "_addTriedPosition", + value: function _addTriedPosition(position, alignment) { + this.triedPositions[position] = this.triedPositions[position] || []; + this.triedPositions[position].push(alignment); + } + }, { + key: "_positionsExhausted", + value: function _positionsExhausted() { + var isExhausted = true; + + for (var i = 0; i < POSITIONS.length; i++) { + isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]); + } + + return isExhausted; + } + }, { + key: "_alignmentsExhausted", + value: function _alignmentsExhausted(position) { + return this.triedPositions[position] && this.triedPositions[position].length == ALIGNMENTS[position].length; + } // When we're trying to center, we don't want to apply offset that's going to + // take us just off center, so wrap around to return 0 for the appropriate + // offset in those alignments. TODO: Figure out if we want to make this + // configurable behavior... it feels more intuitive, especially for tooltips, but + // it's possible someone might actually want to start from center and then nudge + // slightly off. + + }, { + key: "_getVOffset", + value: function _getVOffset() { + return this.options.vOffset; + } + }, { + key: "_getHOffset", + value: function _getHOffset() { + return this.options.hOffset; + } + }, { + key: "_setPosition", + value: function _setPosition($anchor, $element, $parent) { + if ($anchor.attr('aria-expanded') === 'false') { + return false; + } + + var $eleDims = Box.GetDimensions($element), + $anchorDims = Box.GetDimensions($anchor); + + if (!this.options.allowOverlap) { + // restore original position & alignment before checking overlap + this.position = this.originalPosition; + this.alignment = this.originalAlignment; + } + + $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset())); + + if (!this.options.allowOverlap) { + var minOverlap = 100000000; // default coordinates to how we start, in case we can't figure out better + + var minCoordinates = { + position: this.position, + alignment: this.alignment + }; + + while (!this._positionsExhausted()) { + var overlap = Box.OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap); + + if (overlap === 0) { + return; + } + + if (overlap < minOverlap) { + minOverlap = overlap; + minCoordinates = { + position: this.position, + alignment: this.alignment + }; + } + + this._reposition(); + + $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset())); + } // If we get through the entire loop, there was no non-overlapping + // position available. Pick the version with least overlap. + + + this.position = minCoordinates.position; + this.alignment = minCoordinates.alignment; + $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset())); + } + } + }]); + + return Positionable; +}(Plugin); + +Positionable.defaults = { + /** + * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto. + * @option + * @type {string} + * @default 'auto' + */ + position: 'auto', + + /** + * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto. + * @option + * @type {string} + * @default 'auto' + */ + alignment: 'auto', + + /** + * Allow overlap of container/window. If false, dropdown positionable first + * try to position as defined by data-position and data-alignment, but + * reposition if it would cause an overflow. + * @option + * @type {boolean} + * @default false + */ + allowOverlap: false, + + /** + * Allow overlap of only the bottom of the container. This is the most common + * behavior for dropdowns, allowing the dropdown to extend the bottom of the + * screen but not otherwise influence or break out of the container. + * @option + * @type {boolean} + * @default true + */ + allowBottomOverlap: true, + + /** + * Number of pixels the positionable should be separated vertically from anchor + * @option + * @type {number} + * @default 0 + */ + vOffset: 0, + + /** + * Number of pixels the positionable should be separated horizontally from anchor + * @option + * @type {number} + * @default 0 + */ + hOffset: 0 +}; + +/** + * Dropdown module. + * @module foundation.dropdown + * @requires foundation.util.keyboard + * @requires foundation.util.box + * @requires foundation.util.triggers + */ + +var Dropdown = +/*#__PURE__*/ +function (_Positionable) { + _inherits(Dropdown, _Positionable); + + function Dropdown() { + _classCallCheck(this, Dropdown); + + return _possibleConstructorReturn(this, _getPrototypeOf(Dropdown).apply(this, arguments)); + } + + _createClass(Dropdown, [{ + key: "_setup", + + /** + * Creates a new instance of a dropdown. + * @class + * @name Dropdown + * @param {jQuery} element - jQuery object to make into a dropdown. + * Object should be of the dropdown panel, rather than its anchor. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options); + this.className = 'Dropdown'; // ie9 back compat + // Triggers init is idempotent, just need to make sure it is initialized + + Triggers.init($); + + this._init(); + + Keyboard.register('Dropdown', { + 'ENTER': 'toggle', + 'SPACE': 'toggle', + 'ESCAPE': 'close' + }); + } + /** + * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor. + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + var $id = this.$element.attr('id'); + this.$anchors = $("[data-toggle=\"".concat($id, "\"]")).length ? $("[data-toggle=\"".concat($id, "\"]")) : $("[data-open=\"".concat($id, "\"]")); + this.$anchors.attr({ + 'aria-controls': $id, + 'data-is-focus': false, + 'data-yeti-box': $id, + 'aria-haspopup': true, + 'aria-expanded': false + }); + + this._setCurrentAnchor(this.$anchors.first()); + + if (this.options.parentClass) { + this.$parent = this.$element.parents('.' + this.options.parentClass); + } else { + this.$parent = null; + } // Do not change the `labelledby` if it is defined + + + var labelledby = this.$element.attr('aria-labelledby') || this.$currentAnchor.attr('id') || GetYoDigits(6, 'dd-anchor'); + this.$element.attr({ + 'aria-hidden': 'true', + 'data-yeti-box': $id, + 'data-resize': $id, + 'aria-labelledby': labelledby + }); + + _get(_getPrototypeOf(Dropdown.prototype), "_init", this).call(this); + + this._events(); + } + }, { + key: "_getDefaultPosition", + value: function _getDefaultPosition() { + // handle legacy classnames + var position = this.$element[0].className.match(/(top|left|right|bottom)/g); + + if (position) { + return position[0]; + } else { + return 'bottom'; + } + } + }, { + key: "_getDefaultAlignment", + value: function _getDefaultAlignment() { + // handle legacy float approach + var horizontalPosition = /float-(\S+)/.exec(this.$currentAnchor.attr('class')); + + if (horizontalPosition) { + return horizontalPosition[1]; + } + + return _get(_getPrototypeOf(Dropdown.prototype), "_getDefaultAlignment", this).call(this); + } + /** + * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true. + * Recursively calls itself if a collision is detected, with a new position class. + * @function + * @private + */ + + }, { + key: "_setPosition", + value: function _setPosition() { + this.$element.removeClass("has-position-".concat(this.position, " has-alignment-").concat(this.alignment)); + + _get(_getPrototypeOf(Dropdown.prototype), "_setPosition", this).call(this, this.$currentAnchor, this.$element, this.$parent); + + this.$element.addClass("has-position-".concat(this.position, " has-alignment-").concat(this.alignment)); + } + /** + * Make it a current anchor. + * Current anchor as the reference for the position of Dropdown panes. + * @param {HTML} el - DOM element of the anchor. + * @function + * @private + */ + + }, { + key: "_setCurrentAnchor", + value: function _setCurrentAnchor(el) { + this.$currentAnchor = $(el); + } + /** + * Adds event listeners to the element utilizing the triggers utility library. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this = this; + + this.$element.on({ + 'open.zf.trigger': this.open.bind(this), + 'close.zf.trigger': this.close.bind(this), + 'toggle.zf.trigger': this.toggle.bind(this), + 'resizeme.zf.trigger': this._setPosition.bind(this) + }); + this.$anchors.off('click.zf.trigger').on('click.zf.trigger', function () { + _this._setCurrentAnchor(this); + }); + + if (this.options.hover) { + this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { + _this._setCurrentAnchor(this); + + var bodyData = $('body').data(); + + if (typeof bodyData.whatinput === 'undefined' || bodyData.whatinput === 'mouse') { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.open(); + + _this.$anchors.data('hover', true); + }, _this.options.hoverDelay); + } + }).on('mouseleave.zf.dropdown', function () { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.close(); + + _this.$anchors.data('hover', false); + }, _this.options.hoverDelay); + }); + + if (this.options.hoverPane) { + this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { + clearTimeout(_this.timeout); + }).on('mouseleave.zf.dropdown', function () { + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.close(); + + _this.$anchors.data('hover', false); + }, _this.options.hoverDelay); + }); + } + } + + this.$anchors.add(this.$element).on('keydown.zf.dropdown', function (e) { + var $target = $(this), + visibleFocusableElements = Keyboard.findFocusable(_this.$element); + Keyboard.handleKey(e, 'Dropdown', { + open: function open() { + if ($target.is(_this.$anchors) && !$target.is('input, textarea')) { + _this.open(); + + _this.$element.attr('tabindex', -1).focus(); + + e.preventDefault(); + } + }, + close: function close() { + _this.close(); + + _this.$anchors.focus(); + } + }); + }); + } + /** + * Adds an event handler to the body to close any dropdowns on a click. + * @function + * @private + */ + + }, { + key: "_addBodyHandler", + value: function _addBodyHandler() { + var $body = $(document.body).not(this.$element), + _this = this; + + $body.off('click.zf.dropdown').on('click.zf.dropdown', function (e) { + if (_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) { + return; + } + + if (_this.$element.is(e.target) || _this.$element.find(e.target).length) { + return; + } + + _this.close(); + + $body.off('click.zf.dropdown'); + }); + } + /** + * Opens the dropdown pane, and fires a bubbling event to close other dropdowns. + * @function + * @fires Dropdown#closeme + * @fires Dropdown#show + */ + + }, { + key: "open", + value: function open() { + // var _this = this; + + /** + * Fires to close other open dropdowns, typically when dropdown is opening + * @event Dropdown#closeme + */ + this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id')); + this.$anchors.addClass('hover').attr({ + 'aria-expanded': true + }); // this.$element/*.show()*/; + + this.$element.addClass('is-opening'); + + this._setPosition(); + + this.$element.removeClass('is-opening').addClass('is-open').attr({ + 'aria-hidden': false + }); + + if (this.options.autoFocus) { + var $focusable = Keyboard.findFocusable(this.$element); + + if ($focusable.length) { + $focusable.eq(0).focus(); + } + } + + if (this.options.closeOnClick) { + this._addBodyHandler(); + } + + if (this.options.trapFocus) { + Keyboard.trapFocus(this.$element); + } + /** + * Fires once the dropdown is visible. + * @event Dropdown#show + */ + + + this.$element.trigger('show.zf.dropdown', [this.$element]); + } + /** + * Closes the open dropdown pane. + * @function + * @fires Dropdown#hide + */ + + }, { + key: "close", + value: function close() { + if (!this.$element.hasClass('is-open')) { + return false; + } + + this.$element.removeClass('is-open').attr({ + 'aria-hidden': true + }); + this.$anchors.removeClass('hover').attr('aria-expanded', false); + /** + * Fires once the dropdown is no longer visible. + * @event Dropdown#hide + */ + + this.$element.trigger('hide.zf.dropdown', [this.$element]); + + if (this.options.trapFocus) { + Keyboard.releaseFocus(this.$element); + } + } + /** + * Toggles the dropdown pane's visibility. + * @function + */ + + }, { + key: "toggle", + value: function toggle() { + if (this.$element.hasClass('is-open')) { + if (this.$anchors.data('hover')) return; + this.close(); + } else { + this.open(); + } + } + /** + * Destroys the dropdown. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.off('.zf.trigger').hide(); + this.$anchors.off('.zf.dropdown'); + $(document.body).off('click.zf.dropdown'); + } + }]); + + return Dropdown; +}(Positionable); + +Dropdown.defaults = { + /** + * Class that designates bounding container of Dropdown (default: window) + * @option + * @type {?string} + * @default null + */ + parentClass: null, + + /** + * Amount of time to delay opening a submenu on hover event. + * @option + * @type {number} + * @default 250 + */ + hoverDelay: 250, + + /** + * Allow submenus to open on hover events + * @option + * @type {boolean} + * @default false + */ + hover: false, + + /** + * Don't close dropdown when hovering over dropdown pane + * @option + * @type {boolean} + * @default false + */ + hoverPane: false, + + /** + * Number of pixels between the dropdown pane and the triggering element on open. + * @option + * @type {number} + * @default 0 + */ + vOffset: 0, + + /** + * Number of pixels between the dropdown pane and the triggering element on open. + * @option + * @type {number} + * @default 0 + */ + hOffset: 0, + + /** + * Position of dropdown. Can be left, right, bottom, top, or auto. + * @option + * @type {string} + * @default 'auto' + */ + position: 'auto', + + /** + * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto. + * @option + * @type {string} + * @default 'auto' + */ + alignment: 'auto', + + /** + * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow. + * @option + * @type {boolean} + * @default false + */ + allowOverlap: false, + + /** + * Allow overlap of only the bottom of the container. This is the most common + * behavior for dropdowns, allowing the dropdown to extend the bottom of the + * screen but not otherwise influence or break out of the container. + * @option + * @type {boolean} + * @default true + */ + allowBottomOverlap: true, + + /** + * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands. + * @option + * @type {boolean} + * @default false + */ + trapFocus: false, + + /** + * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening. + * @option + * @type {boolean} + * @default false + */ + autoFocus: false, + + /** + * Allows a click on the body to close the dropdown. + * @option + * @type {boolean} + * @default false + */ + closeOnClick: false +}; + +/** + * DropdownMenu module. + * @module foundation.dropdown-menu + * @requires foundation.util.keyboard + * @requires foundation.util.box + * @requires foundation.util.nest + */ + +var DropdownMenu = +/*#__PURE__*/ +function (_Plugin) { + _inherits(DropdownMenu, _Plugin); + + function DropdownMenu() { + _classCallCheck(this, DropdownMenu); + + return _possibleConstructorReturn(this, _getPrototypeOf(DropdownMenu).apply(this, arguments)); + } + + _createClass(DropdownMenu, [{ + key: "_setup", + + /** + * Creates a new instance of DropdownMenu. + * @class + * @name DropdownMenu + * @fires DropdownMenu#init + * @param {jQuery} element - jQuery object to make into a dropdown menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options); + this.className = 'DropdownMenu'; // ie9 back compat + + this._init(); + + Keyboard.register('DropdownMenu', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ARROW_RIGHT': 'next', + 'ARROW_UP': 'up', + 'ARROW_DOWN': 'down', + 'ARROW_LEFT': 'previous', + 'ESCAPE': 'close' + }); + } + /** + * Initializes the plugin, and calls _prepareMenu + * @private + * @function + */ + + }, { + key: "_init", + value: function _init() { + Nest.Feather(this.$element, 'dropdown'); + var subs = this.$element.find('li.is-dropdown-submenu-parent'); + this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub'); + this.$menuItems = this.$element.find('[role="menuitem"]'); + this.$tabs = this.$element.children('[role="menuitem"]'); + this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass); + + if (this.options.alignment === 'auto') { + if (this.$element.hasClass(this.options.rightClass) || rtl() || this.$element.parents('.top-bar-right').is('*')) { + this.options.alignment = 'right'; + subs.addClass('opens-left'); + } else { + this.options.alignment = 'left'; + subs.addClass('opens-right'); + } + } else { + if (this.options.alignment === 'right') { + subs.addClass('opens-left'); + } else { + subs.addClass('opens-right'); + } + } + + this.changed = false; + + this._events(); + } + }, { + key: "_isVertical", + value: function _isVertical() { + return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column'; + } + }, { + key: "_isRtl", + value: function _isRtl() { + return this.$element.hasClass('align-right') || rtl() && !this.$element.hasClass('align-left'); + } + /** + * Adds event listeners to elements within the menu + * @private + * @function + */ + + }, { + key: "_events", + value: function _events() { + var _this = this, + hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined', + parClass = 'is-dropdown-submenu-parent'; // used for onClick and in the keyboard handlers + + + var handleClickFn = function handleClickFn(e) { + var $elem = $(e.target).parentsUntil('ul', ".".concat(parClass)), + hasSub = $elem.hasClass(parClass), + hasClicked = $elem.attr('data-is-click') === 'true', + $sub = $elem.children('.is-dropdown-submenu'); + + if (hasSub) { + if (hasClicked) { + if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) { + return; + } else { + e.stopImmediatePropagation(); + e.preventDefault(); + + _this._hide($elem); + } + } else { + e.preventDefault(); + e.stopImmediatePropagation(); + + _this._show($sub); + + $elem.add($elem.parentsUntil(_this.$element, ".".concat(parClass))).attr('data-is-click', true); + } + } + }; + + if (this.options.clickOpen || hasTouch) { + this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn); + } // Handle Leaf element Clicks + + + if (_this.options.closeOnClickInside) { + this.$menuItems.on('click.zf.dropdownmenu', function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + + if (!hasSub) { + _this._hide(); + } + }); + } + + if (!this.options.disableHover) { + this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + + if (hasSub) { + clearTimeout($elem.data('_delay')); + $elem.data('_delay', setTimeout(function () { + _this._show($elem.children('.is-dropdown-submenu')); + }, _this.options.hoverDelay)); + } + }); + onLeaveElement(this.$menuItems, function (e) { + var $elem = $(this), + hasSub = $elem.hasClass(parClass); + + if (hasSub && _this.options.autoclose) { + if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { + return false; + } + + clearTimeout($elem.data('_delay')); + $elem.data('_delay', setTimeout(function () { + _this._hide($elem); + }, _this.options.closingTime)); + } + }); + } + + this.$menuItems.on('keydown.zf.dropdownmenu', function (e) { + var $element = $(e.target).parentsUntil('ul', '[role="menuitem"]'), + isTab = _this.$tabs.index($element) > -1, + $elements = isTab ? _this.$tabs : $element.siblings('li').add($element), + $prevElement, + $nextElement; + $elements.each(function (i) { + if ($(this).is($element)) { + $prevElement = $elements.eq(i - 1); + $nextElement = $elements.eq(i + 1); + return; + } + }); + + var nextSibling = function nextSibling() { + $nextElement.children('a:first').focus(); + e.preventDefault(); + }, + prevSibling = function prevSibling() { + $prevElement.children('a:first').focus(); + e.preventDefault(); + }, + openSub = function openSub() { + var $sub = $element.children('ul.is-dropdown-submenu'); + + if ($sub.length) { + _this._show($sub); + + $element.find('li > a:first').focus(); + e.preventDefault(); + } else { + return; + } + }, + closeSub = function closeSub() { + //if ($element.is(':first-child')) { + var close = $element.parent('ul').parent('li'); + close.children('a:first').focus(); + + _this._hide(close); + + e.preventDefault(); //} + }; + + var functions = { + open: openSub, + close: function close() { + _this._hide(_this.$element); + + _this.$menuItems.eq(0).children('a').focus(); // focus to first element + + + e.preventDefault(); + }, + handled: function handled() { + e.stopImmediatePropagation(); + } + }; + + if (isTab) { + if (_this._isVertical()) { + // vertical menu + if (_this._isRtl()) { + // right aligned + $.extend(functions, { + down: nextSibling, + up: prevSibling, + next: closeSub, + previous: openSub + }); + } else { + // left aligned + $.extend(functions, { + down: nextSibling, + up: prevSibling, + next: openSub, + previous: closeSub + }); + } + } else { + // horizontal menu + if (_this._isRtl()) { + // right aligned + $.extend(functions, { + next: prevSibling, + previous: nextSibling, + down: openSub, + up: closeSub + }); + } else { + // left aligned + $.extend(functions, { + next: nextSibling, + previous: prevSibling, + down: openSub, + up: closeSub + }); + } + } + } else { + // not tabs -> one sub + if (_this._isRtl()) { + // right aligned + $.extend(functions, { + next: closeSub, + previous: openSub, + down: nextSibling, + up: prevSibling + }); + } else { + // left aligned + $.extend(functions, { + next: openSub, + previous: closeSub, + down: nextSibling, + up: prevSibling + }); + } + } + + Keyboard.handleKey(e, 'DropdownMenu', functions); + }); + } + /** + * Adds an event handler to the body to close any dropdowns on a click. + * @function + * @private + */ + + }, { + key: "_addBodyHandler", + value: function _addBodyHandler() { + var $body = $(document.body), + _this = this; + + $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu').on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function (e) { + var $link = _this.$element.find(e.target); + + if ($link.length) { + return; + } + + _this._hide(); + + $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu'); + }); + } + /** + * Opens a dropdown pane, and checks for collisions first. + * @param {jQuery} $sub - ul element that is a submenu to show + * @function + * @private + * @fires Dropdownmenu#show + */ + + }, { + key: "_show", + value: function _show($sub) { + var idx = this.$tabs.index(this.$tabs.filter(function (i, el) { + return $(el).find($sub).length > 0; + })); + var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent'); + + this._hide($sibs, idx); + + $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active'); + var clear = Box.ImNotTouchingYou($sub, null, true); + + if (!clear) { + var oldClass = this.options.alignment === 'left' ? '-right' : '-left', + $parentLi = $sub.parent('.is-dropdown-submenu-parent'); + $parentLi.removeClass("opens".concat(oldClass)).addClass("opens-".concat(this.options.alignment)); + clear = Box.ImNotTouchingYou($sub, null, true); + + if (!clear) { + $parentLi.removeClass("opens-".concat(this.options.alignment)).addClass('opens-inner'); + } + + this.changed = true; + } + + $sub.css('visibility', ''); + + if (this.options.closeOnClick) { + this._addBodyHandler(); + } + /** + * Fires when the new dropdown pane is visible. + * @event Dropdownmenu#show + */ + + + this.$element.trigger('show.zf.dropdownmenu', [$sub]); + } + /** + * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything. + * @function + * @param {jQuery} $elem - element with a submenu to hide + * @param {Number} idx - index of the $tabs collection to hide + * @private + */ + + }, { + key: "_hide", + value: function _hide($elem, idx) { + var $toClose; + + if ($elem && $elem.length) { + $toClose = $elem; + } else if (typeof idx !== 'undefined') { + $toClose = this.$tabs.not(function (i, el) { + return i === idx; + }); + } else { + $toClose = this.$element; + } + + var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0; + + if (somethingToClose) { + $toClose.find('li.is-active').add($toClose).attr({ + 'data-is-click': false + }).removeClass('is-active'); + $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active'); + + if (this.changed || $toClose.find('opens-inner').length) { + var oldClass = this.options.alignment === 'left' ? 'right' : 'left'; + $toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass("opens-inner opens-".concat(this.options.alignment)).addClass("opens-".concat(oldClass)); + this.changed = false; + } + /** + * Fires when the open menus are closed. + * @event Dropdownmenu#hide + */ + + + this.$element.trigger('hide.zf.dropdownmenu', [$toClose]); + } + } + /** + * Destroys the plugin. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner'); + $(document.body).off('.zf.dropdownmenu'); + Nest.Burn(this.$element, 'dropdown'); + } + }]); + + return DropdownMenu; +}(Plugin); +/** + * Default settings for plugin + */ + + +DropdownMenu.defaults = { + /** + * Disallows hover events from opening submenus + * @option + * @type {boolean} + * @default false + */ + disableHover: false, + + /** + * Allow a submenu to automatically close on a mouseleave event, if not clicked open. + * @option + * @type {boolean} + * @default true + */ + autoclose: true, + + /** + * Amount of time to delay opening a submenu on hover event. + * @option + * @type {number} + * @default 50 + */ + hoverDelay: 50, + + /** + * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu. + * @option + * @type {boolean} + * @default false + */ + clickOpen: false, + + /** + * Amount of time to delay closing a submenu on a mouseleave event. + * @option + * @type {number} + * @default 500 + */ + closingTime: 500, + + /** + * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`. + * @option + * @type {string} + * @default 'auto' + */ + alignment: 'auto', + + /** + * Allow clicks on the body to close any open submenus. + * @option + * @type {boolean} + * @default true + */ + closeOnClick: true, + + /** + * Allow clicks on leaf anchor links to close any open submenus. + * @option + * @type {boolean} + * @default true + */ + closeOnClickInside: true, + + /** + * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class. + * @option + * @type {string} + * @default 'vertical' + */ + verticalClass: 'vertical', + + /** + * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class. + * @option + * @type {string} + * @default 'align-right' + */ + rightClass: 'align-right', + + /** + * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile. + * @option + * @type {boolean} + * @default true + */ + forceFollow: true +}; + +/** + * Equalizer module. + * @module foundation.equalizer + * @requires foundation.util.mediaQuery + * @requires foundation.util.imageLoader if equalizer contains images + */ + +var Equalizer = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Equalizer, _Plugin); + + function Equalizer() { + _classCallCheck(this, Equalizer); + + return _possibleConstructorReturn(this, _getPrototypeOf(Equalizer).apply(this, arguments)); + } + + _createClass(Equalizer, [{ + key: "_setup", + + /** + * Creates a new instance of Equalizer. + * @class + * @name Equalizer + * @fires Equalizer#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Equalizer.defaults, this.$element.data(), options); + this.className = 'Equalizer'; // ie9 back compat + + this._init(); + } + /** + * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load. + * @private + */ + + }, { + key: "_init", + value: function _init() { + var eqId = this.$element.attr('data-equalizer') || ''; + var $watched = this.$element.find("[data-equalizer-watch=\"".concat(eqId, "\"]")); + + MediaQuery._init(); + + this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]'); + this.$element.attr('data-resize', eqId || GetYoDigits(6, 'eq')); + this.$element.attr('data-mutate', eqId || GetYoDigits(6, 'eq')); + this.hasNested = this.$element.find('[data-equalizer]').length > 0; + this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0; + this.isOn = false; + this._bindHandler = { + onResizeMeBound: this._onResizeMe.bind(this), + onPostEqualizedBound: this._onPostEqualized.bind(this) + }; + var imgs = this.$element.find('img'); + var tooSmall; + + if (this.options.equalizeOn) { + tooSmall = this._checkMQ(); + $(window).on('changed.zf.mediaquery', this._checkMQ.bind(this)); + } else { + this._events(); + } + + if (typeof tooSmall !== 'undefined' && tooSmall === false || typeof tooSmall === 'undefined') { + if (imgs.length) { + onImagesLoaded(imgs, this._reflow.bind(this)); + } else { + this._reflow(); + } + } + } + /** + * Removes event listeners if the breakpoint is too small. + * @private + */ + + }, { + key: "_pauseEvents", + value: function _pauseEvents() { + this.isOn = false; + this.$element.off({ + '.zf.equalizer': this._bindHandler.onPostEqualizedBound, + 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound, + 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound + }); + } + /** + * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound + * @private + */ + + }, { + key: "_onResizeMe", + value: function _onResizeMe(e) { + this._reflow(); + } + /** + * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound + * @private + */ + + }, { + key: "_onPostEqualized", + value: function _onPostEqualized(e) { + if (e.target !== this.$element[0]) { + this._reflow(); + } + } + /** + * Initializes events for Equalizer. + * @private + */ + + }, { + key: "_events", + value: function _events() { + + this._pauseEvents(); + + if (this.hasNested) { + this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound); + } else { + this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound); + this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound); + } + + this.isOn = true; + } + /** + * Checks the current breakpoint to the minimum required size. + * @private + */ + + }, { + key: "_checkMQ", + value: function _checkMQ() { + var tooSmall = !MediaQuery.is(this.options.equalizeOn); + + if (tooSmall) { + if (this.isOn) { + this._pauseEvents(); + + this.$watched.css('height', 'auto'); + } + } else { + if (!this.isOn) { + this._events(); + } + } + + return tooSmall; + } + /** + * A noop version for the plugin + * @private + */ + + }, { + key: "_killswitch", + value: function _killswitch() { + return; + } + /** + * Calls necessary functions to update Equalizer upon DOM change + * @private + */ + + }, { + key: "_reflow", + value: function _reflow() { + if (!this.options.equalizeOnStack) { + if (this._isStacked()) { + this.$watched.css('height', 'auto'); + return false; + } + } + + if (this.options.equalizeByRow) { + this.getHeightsByRow(this.applyHeightByRow.bind(this)); + } else { + this.getHeights(this.applyHeight.bind(this)); + } + } + /** + * Manually determines if the first 2 elements are *NOT* stacked. + * @private + */ + + }, { + key: "_isStacked", + value: function _isStacked() { + if (!this.$watched[0] || !this.$watched[1]) { + return true; + } + + return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top; + } + /** + * Finds the outer heights of children contained within an Equalizer parent and returns them in an array + * @param {Function} cb - A non-optional callback to return the heights array to. + * @returns {Array} heights - An array of heights of children within Equalizer container + */ + + }, { + key: "getHeights", + value: function getHeights(cb) { + var heights = []; + + for (var i = 0, len = this.$watched.length; i < len; i++) { + this.$watched[i].style.height = 'auto'; + heights.push(this.$watched[i].offsetHeight); + } + + cb(heights); + } + /** + * Finds the outer heights of children contained within an Equalizer parent and returns them in an array + * @param {Function} cb - A non-optional callback to return the heights array to. + * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child + */ + + }, { + key: "getHeightsByRow", + value: function getHeightsByRow(cb) { + var lastElTopOffset = this.$watched.length ? this.$watched.first().offset().top : 0, + groups = [], + group = 0; //group by Row + + groups[group] = []; + + for (var i = 0, len = this.$watched.length; i < len; i++) { + this.$watched[i].style.height = 'auto'; //maybe could use this.$watched[i].offsetTop + + var elOffsetTop = $(this.$watched[i]).offset().top; + + if (elOffsetTop != lastElTopOffset) { + group++; + groups[group] = []; + lastElTopOffset = elOffsetTop; + } + + groups[group].push([this.$watched[i], this.$watched[i].offsetHeight]); + } + + for (var j = 0, ln = groups.length; j < ln; j++) { + var heights = $(groups[j]).map(function () { + return this[1]; + }).get(); + var max = Math.max.apply(null, heights); + groups[j].push(max); + } + + cb(groups); + } + /** + * Changes the CSS height property of each child in an Equalizer parent to match the tallest + * @param {array} heights - An array of heights of children within Equalizer container + * @fires Equalizer#preequalized + * @fires Equalizer#postequalized + */ + + }, { + key: "applyHeight", + value: function applyHeight(heights) { + var max = Math.max.apply(null, heights); + /** + * Fires before the heights are applied + * @event Equalizer#preequalized + */ + + this.$element.trigger('preequalized.zf.equalizer'); + this.$watched.css('height', max); + /** + * Fires when the heights have been applied + * @event Equalizer#postequalized + */ + + this.$element.trigger('postequalized.zf.equalizer'); + } + /** + * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row + * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child + * @fires Equalizer#preequalized + * @fires Equalizer#preequalizedrow + * @fires Equalizer#postequalizedrow + * @fires Equalizer#postequalized + */ + + }, { + key: "applyHeightByRow", + value: function applyHeightByRow(groups) { + /** + * Fires before the heights are applied + */ + this.$element.trigger('preequalized.zf.equalizer'); + + for (var i = 0, len = groups.length; i < len; i++) { + var groupsILength = groups[i].length, + max = groups[i][groupsILength - 1]; + + if (groupsILength <= 2) { + $(groups[i][0][0]).css({ + 'height': 'auto' + }); + continue; + } + /** + * Fires before the heights per row are applied + * @event Equalizer#preequalizedrow + */ + + + this.$element.trigger('preequalizedrow.zf.equalizer'); + + for (var j = 0, lenJ = groupsILength - 1; j < lenJ; j++) { + $(groups[i][j][0]).css({ + 'height': max + }); + } + /** + * Fires when the heights per row have been applied + * @event Equalizer#postequalizedrow + */ + + + this.$element.trigger('postequalizedrow.zf.equalizer'); + } + /** + * Fires when the heights have been applied + */ + + + this.$element.trigger('postequalized.zf.equalizer'); + } + /** + * Destroys an instance of Equalizer. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this._pauseEvents(); + + this.$watched.css('height', 'auto'); + } + }]); + + return Equalizer; +}(Plugin); +/** + * Default settings for plugin + */ + + +Equalizer.defaults = { + /** + * Enable height equalization when stacked on smaller screens. + * @option + * @type {boolean} + * @default false + */ + equalizeOnStack: false, + + /** + * Enable height equalization row by row. + * @option + * @type {boolean} + * @default false + */ + equalizeByRow: false, + + /** + * String representing the minimum breakpoint size the plugin should equalize heights on. + * @option + * @type {string} + * @default '' + */ + equalizeOn: '' +}; + +/** + * Interchange module. + * @module foundation.interchange + * @requires foundation.util.mediaQuery + */ + +var Interchange = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Interchange, _Plugin); + + function Interchange() { + _classCallCheck(this, Interchange); + + return _possibleConstructorReturn(this, _getPrototypeOf(Interchange).apply(this, arguments)); + } + + _createClass(Interchange, [{ + key: "_setup", + + /** + * Creates a new instance of Interchange. + * @class + * @name Interchange + * @fires Interchange#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Interchange.defaults, options); + this.rules = []; + this.currentPath = ''; + this.className = 'Interchange'; // ie9 back compat + + this._init(); + + this._events(); + } + /** + * Initializes the Interchange plugin and calls functions to get interchange functioning on load. + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + MediaQuery._init(); + + var id = this.$element[0].id || GetYoDigits(6, 'interchange'); + this.$element.attr({ + 'data-resize': id, + 'id': id + }); + + this._addBreakpoints(); + + this._generateRules(); + + this._reflow(); + } + /** + * Initializes events for Interchange. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this2 = this; + + this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function () { + return _this2._reflow(); + }); + } + /** + * Calls necessary functions to update Interchange upon DOM change + * @function + * @private + */ + + }, { + key: "_reflow", + value: function _reflow() { + var match; // Iterate through each rule, but only save the last match + + for (var i in this.rules) { + if (this.rules.hasOwnProperty(i)) { + var rule = this.rules[i]; + + if (window.matchMedia(rule.query).matches) { + match = rule; + } + } + } + + if (match) { + this.replace(match.path); + } + } + /** + * Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object. + * @function + * @private + */ + + }, { + key: "_addBreakpoints", + value: function _addBreakpoints() { + for (var i in MediaQuery.queries) { + if (MediaQuery.queries.hasOwnProperty(i)) { + var query = MediaQuery.queries[i]; + Interchange.SPECIAL_QUERIES[query.name] = query.value; + } + } + } + /** + * Checks the Interchange element for the provided media query + content pairings + * @function + * @private + * @param {Object} element - jQuery object that is an Interchange instance + * @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys + */ + + }, { + key: "_generateRules", + value: function _generateRules(element) { + var rulesList = []; + var rules; + + if (this.options.rules) { + rules = this.options.rules; + } else { + rules = this.$element.data('interchange'); + } + + rules = typeof rules === 'string' ? rules.match(/\[.*?, .*?\]/g) : rules; + + for (var i in rules) { + if (rules.hasOwnProperty(i)) { + var rule = rules[i].slice(1, -1).split(', '); + var path = rule.slice(0, -1).join(''); + var query = rule[rule.length - 1]; + + if (Interchange.SPECIAL_QUERIES[query]) { + query = Interchange.SPECIAL_QUERIES[query]; + } + + rulesList.push({ + path: path, + query: query + }); + } + } + + this.rules = rulesList; + } + /** + * Update the `src` property of an image, or change the HTML of a container, to the specified path. + * @function + * @param {String} path - Path to the image or HTML partial. + * @fires Interchange#replaced + */ + + }, { + key: "replace", + value: function replace(path) { + if (this.currentPath === path) return; + + var _this = this, + trigger = 'replaced.zf.interchange'; // Replacing images + + + if (this.$element[0].nodeName === 'IMG') { + this.$element.attr('src', path).on('load', function () { + _this.currentPath = path; + }).trigger(trigger); + } // Replacing background images + else if (path.match(/\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)) { + path = path.replace(/\(/g, '%28').replace(/\)/g, '%29'); + this.$element.css({ + 'background-image': 'url(' + path + ')' + }).trigger(trigger); + } // Replacing HTML + else { + $.get(path, function (response) { + _this.$element.html(response).trigger(trigger); + + $(response).foundation(); + _this.currentPath = path; + }); + } + /** + * Fires when content in an Interchange element is done being loaded. + * @event Interchange#replaced + */ + // this.$element.trigger('replaced.zf.interchange'); + + } + /** + * Destroys an instance of interchange. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.off('resizeme.zf.trigger'); + } + }]); + + return Interchange; +}(Plugin); +/** + * Default settings for plugin + */ + + +Interchange.defaults = { + /** + * Rules to be applied to Interchange elements. Set with the `data-interchange` array notation. + * @option + * @type {?array} + * @default null + */ + rules: null +}; +Interchange.SPECIAL_QUERIES = { + 'landscape': 'screen and (orientation: landscape)', + 'portrait': 'screen and (orientation: portrait)', + 'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)' +}; + +/** + * SmoothScroll module. + * @module foundation.smooth-scroll + */ + +var SmoothScroll = +/*#__PURE__*/ +function (_Plugin) { + _inherits(SmoothScroll, _Plugin); + + function SmoothScroll() { + _classCallCheck(this, SmoothScroll); + + return _possibleConstructorReturn(this, _getPrototypeOf(SmoothScroll).apply(this, arguments)); + } + + _createClass(SmoothScroll, [{ + key: "_setup", + + /** + * Creates a new instance of SmoothScroll. + * @class + * @name SmoothScroll + * @fires SmoothScroll#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, SmoothScroll.defaults, this.$element.data(), options); + this.className = 'SmoothScroll'; // ie9 back compat + + this._init(); + } + /** + * Initialize the SmoothScroll plugin + * @private + */ + + }, { + key: "_init", + value: function _init() { + var id = this.$element[0].id || GetYoDigits(6, 'smooth-scroll'); + this.$element.attr({ + id: id + }); + + this._events(); + } + /** + * Initializes events for SmoothScroll. + * @private + */ + + }, { + key: "_events", + value: function _events() { + this.$element.on('click.zf.smoothScroll', this._handleLinkClick); + this.$element.on('click.zf.smoothScroll', 'a[href^="#"]', this._handleLinkClick); + } + /** + * Handle the given event to smoothly scroll to the anchor pointed by the event target. + * @param {*} e - event + * @function + * @private + */ + + }, { + key: "_handleLinkClick", + value: function _handleLinkClick(e) { + var _this = this; + + // Follow the link if it does not point to an anchor. + if (!$(e.currentTarget).is('a[href^="#"]')) return; + var arrival = e.currentTarget.getAttribute('href'); + this._inTransition = true; + SmoothScroll.scrollToLoc(arrival, this.options, function () { + _this._inTransition = false; + }); + e.preventDefault(); + } + }, { + key: "_destroy", + + /** + * Destroys the SmoothScroll instance. + * @function + */ + value: function _destroy() { + this.$element.off('click.zf.smoothScroll', this._handleLinkClick); + this.$element.off('click.zf.smoothScroll', 'a[href^="#"]', this._handleLinkClick); + } + }], [{ + key: "scrollToLoc", + + /** + * Function to scroll to a given location on the page. + * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo' + * @param {Object} options - The options to use. + * @param {Function} callback - The callback function. + * @static + * @function + */ + value: function scrollToLoc(loc) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SmoothScroll.defaults; + var callback = arguments.length > 2 ? arguments[2] : undefined; + var $loc = $(loc); // Do nothing if target does not exist to prevent errors + + if (!$loc.length) return false; + var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset); + $('html, body').stop(true).animate({ + scrollTop: scrollPos + }, options.animationDuration, options.animationEasing, function () { + if (typeof callback === 'function') { + callback(); + } + }); + } + }]); + + return SmoothScroll; +}(Plugin); +/** + * Default settings for plugin. + */ + + +SmoothScroll.defaults = { + /** + * Amount of time, in ms, the animated scrolling should take between locations. + * @option + * @type {number} + * @default 500 + */ + animationDuration: 500, + + /** + * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`. + * @option + * @type {string} + * @default 'linear' + * @see {@link https://api.jquery.com/animate|Jquery animate} + */ + animationEasing: 'linear', + + /** + * Number of pixels to use as a marker for location changes. + * @option + * @type {number} + * @default 50 + */ + threshold: 50, + + /** + * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar. + * @option + * @type {number} + * @default 0 + */ + offset: 0 +}; + +/** + * Magellan module. + * @module foundation.magellan + * @requires foundation.smoothScroll + */ + +var Magellan = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Magellan, _Plugin); + + function Magellan() { + _classCallCheck(this, Magellan); + + return _possibleConstructorReturn(this, _getPrototypeOf(Magellan).apply(this, arguments)); + } + + _createClass(Magellan, [{ + key: "_setup", + + /** + * Creates a new instance of Magellan. + * @class + * @name Magellan + * @fires Magellan#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Magellan.defaults, this.$element.data(), options); + this.className = 'Magellan'; // ie9 back compat + + this._init(); + + this.calcPoints(); + } + /** + * Initializes the Magellan plugin and calls functions to get equalizer functioning on load. + * @private + */ + + }, { + key: "_init", + value: function _init() { + var id = this.$element[0].id || GetYoDigits(6, 'magellan'); + + this.$targets = $('[data-magellan-target]'); + this.$links = this.$element.find('a'); + this.$element.attr({ + 'data-resize': id, + 'data-scroll': id, + 'id': id + }); + this.$active = $(); + this.scrollPos = parseInt(window.pageYOffset, 10); + + this._events(); + } + /** + * Calculates an array of pixel values that are the demarcation lines between locations on the page. + * Can be invoked if new elements are added or the size of a location changes. + * @function + */ + + }, { + key: "calcPoints", + value: function calcPoints() { + var _this = this, + body = document.body, + html = document.documentElement; + + this.points = []; + this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight)); + this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight)); + this.$targets.each(function () { + var $tar = $(this), + pt = Math.round($tar.offset().top - _this.options.threshold); + $tar.targetPoint = pt; + + _this.points.push(pt); + }); + } + /** + * Initializes events for Magellan. + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this = this, + $body = $('html, body'), + opts = { + duration: _this.options.animationDuration, + easing: _this.options.animationEasing + }; + + $(window).one('load', function () { + if (_this.options.deepLinking) { + if (location.hash) { + _this.scrollToLoc(location.hash); + } + } + + _this.calcPoints(); + + _this._updateActive(); + }); + _this.onLoadListener = onLoad($(window), function () { + _this.$element.on({ + 'resizeme.zf.trigger': _this.reflow.bind(_this), + 'scrollme.zf.trigger': _this._updateActive.bind(_this) + }).on('click.zf.magellan', 'a[href^="#"]', function (e) { + e.preventDefault(); + var arrival = this.getAttribute('href'); + + _this.scrollToLoc(arrival); + }); + }); + + this._deepLinkScroll = function (e) { + if (_this.options.deepLinking) { + _this.scrollToLoc(window.location.hash); + } + }; + + $(window).on('hashchange', this._deepLinkScroll); + } + /** + * Function to scroll to a given location on the page. + * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo' + * @function + */ + + }, { + key: "scrollToLoc", + value: function scrollToLoc(loc) { + this._inTransition = true; + + var _this = this; + + var options = { + animationEasing: this.options.animationEasing, + animationDuration: this.options.animationDuration, + threshold: this.options.threshold, + offset: this.options.offset + }; + SmoothScroll.scrollToLoc(loc, options, function () { + _this._inTransition = false; + }); + } + /** + * Calls necessary functions to update Magellan upon DOM change + * @function + */ + + }, { + key: "reflow", + value: function reflow() { + this.calcPoints(); + + this._updateActive(); + } + /** + * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled. + * @private + * @function + * @fires Magellan#update + */ + + }, { + key: "_updateActive", + value: function _updateActive() + /*evt, elem, scrollPos*/ + { + var _this2 = this; + + if (this._inTransition) return; + var newScrollPos = parseInt(window.pageYOffset, 10); + var isScrollingUp = this.scrollPos > newScrollPos; + this.scrollPos = newScrollPos; + var activeIdx; // Before the first point: no link + + if (newScrollPos < this.points[0]) ; + /* do nothing */ + // At the bottom of the page: last link + else if (newScrollPos + this.winHeight === this.docHeight) { + activeIdx = this.points.length - 1; + } // Otherwhise, use the last visible link + else { + var visibleLinks = this.points.filter(function (p, i) { + return p - _this2.options.offset - (isScrollingUp ? _this2.options.threshold : 0) <= newScrollPos; + }); + activeIdx = visibleLinks.length ? visibleLinks.length - 1 : 0; + } // Get the new active link + + + var $oldActive = this.$active; + var activeHash = ''; + + if (typeof activeIdx !== 'undefined') { + this.$active = this.$links.filter('[href="#' + this.$targets.eq(activeIdx).data('magellan-target') + '"]'); + if (this.$active.length) activeHash = this.$active[0].getAttribute('href'); + } else { + this.$active = $(); + } + + var isNewActive = !(!this.$active.length && !$oldActive.length) && !this.$active.is($oldActive); + var isNewHash = activeHash !== window.location.hash; // Update the active link element + + if (isNewActive) { + $oldActive.removeClass(this.options.activeClass); + this.$active.addClass(this.options.activeClass); + } // Update the hash (it may have changed with the same active link) + + + if (this.options.deepLinking && isNewHash) { + if (window.history.pushState) { + // Set or remove the hash (see: https://stackoverflow.com/a/5298684/4317384 + var url = activeHash ? activeHash : window.location.pathname + window.location.search; + window.history.pushState(null, null, url); + } else { + window.location.hash = activeHash; + } + } + + if (isNewActive) { + /** + * Fires when magellan is finished updating to the new active element. + * @event Magellan#update + */ + this.$element.trigger('update.zf.magellan', [this.$active]); + } + } + /** + * Destroys an instance of Magellan and resets the url of the window. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.off('.zf.trigger .zf.magellan').find(".".concat(this.options.activeClass)).removeClass(this.options.activeClass); + + if (this.options.deepLinking) { + var hash = this.$active[0].getAttribute('href'); + window.location.hash.replace(hash, ''); + } + + $(window).off('hashchange', this._deepLinkScroll); + if (this.onLoadListener) $(window).off(this.onLoadListener); + } + }]); + + return Magellan; +}(Plugin); +/** + * Default settings for plugin + */ + + +Magellan.defaults = { + /** + * Amount of time, in ms, the animated scrolling should take between locations. + * @option + * @type {number} + * @default 500 + */ + animationDuration: 500, + + /** + * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`. + * @option + * @type {string} + * @default 'linear' + * @see {@link https://api.jquery.com/animate|Jquery animate} + */ + animationEasing: 'linear', + + /** + * Number of pixels to use as a marker for location changes. + * @option + * @type {number} + * @default 50 + */ + threshold: 50, + + /** + * Class applied to the active locations link on the magellan container. + * @option + * @type {string} + * @default 'is-active' + */ + activeClass: 'is-active', + + /** + * Allows the script to manipulate the url of the current page, and if supported, alter the history. + * @option + * @type {boolean} + * @default false + */ + deepLinking: false, + + /** + * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar. + * @option + * @type {number} + * @default 0 + */ + offset: 0 +}; + +/** + * OffCanvas module. + * @module foundation.offcanvas + * @requires foundation.util.keyboard + * @requires foundation.util.mediaQuery + * @requires foundation.util.triggers + */ + +var OffCanvas = +/*#__PURE__*/ +function (_Plugin) { + _inherits(OffCanvas, _Plugin); + + function OffCanvas() { + _classCallCheck(this, OffCanvas); + + return _possibleConstructorReturn(this, _getPrototypeOf(OffCanvas).apply(this, arguments)); + } + + _createClass(OffCanvas, [{ + key: "_setup", + + /** + * Creates a new instance of an off-canvas wrapper. + * @class + * @name OffCanvas + * @fires OffCanvas#init + * @param {Object} element - jQuery object to initialize. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + var _this2 = this; + + this.className = 'OffCanvas'; // ie9 back compat + + this.$element = element; + this.options = $.extend({}, OffCanvas.defaults, this.$element.data(), options); + this.contentClasses = { + base: [], + reveal: [] + }; + this.$lastTrigger = $(); + this.$triggers = $(); + this.position = 'left'; + this.$content = $(); + this.nested = !!this.options.nested; // Defines the CSS transition/position classes of the off-canvas content container. + + $(['push', 'overlap']).each(function (index, val) { + _this2.contentClasses.base.push('has-transition-' + val); + }); + $(['left', 'right', 'top', 'bottom']).each(function (index, val) { + _this2.contentClasses.base.push('has-position-' + val); + + _this2.contentClasses.reveal.push('has-reveal-' + val); + }); // Triggers init is idempotent, just need to make sure it is initialized + + Triggers.init($); + + MediaQuery._init(); + + this._init(); + + this._events(); + + Keyboard.register('OffCanvas', { + 'ESCAPE': 'close' + }); + } + /** + * Initializes the off-canvas wrapper by adding the exit overlay (if needed). + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + var id = this.$element.attr('id'); + this.$element.attr('aria-hidden', 'true'); // Find off-canvas content, either by ID (if specified), by siblings or by closest selector (fallback) + + if (this.options.contentId) { + this.$content = $('#' + this.options.contentId); + } else if (this.$element.siblings('[data-off-canvas-content]').length) { + this.$content = this.$element.siblings('[data-off-canvas-content]').first(); + } else { + this.$content = this.$element.closest('[data-off-canvas-content]').first(); + } + + if (!this.options.contentId) { + // Assume that the off-canvas element is nested if it isn't a sibling of the content + this.nested = this.$element.siblings('[data-off-canvas-content]').length === 0; + } else if (this.options.contentId && this.options.nested === null) { + // Warning if using content ID without setting the nested option + // Once the element is nested it is required to work properly in this case + console.warn('Remember to use the nested option if using the content ID option!'); + } + + if (this.nested === true) { + // Force transition overlap if nested + this.options.transition = 'overlap'; // Remove appropriate classes if already assigned in markup + + this.$element.removeClass('is-transition-push'); + } + + this.$element.addClass("is-transition-".concat(this.options.transition, " is-closed")); // Find triggers that affect this element and add aria-expanded to them + + this.$triggers = $(document).find('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-expanded', 'false').attr('aria-controls', id); // Get position by checking for related CSS class + + this.position = this.$element.is('.position-left, .position-top, .position-right, .position-bottom') ? this.$element.attr('class').match(/position\-(left|top|right|bottom)/)[1] : this.position; // Add an overlay over the content if necessary + + if (this.options.contentOverlay === true) { + var overlay = document.createElement('div'); + var overlayPosition = $(this.$element).css("position") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute'; + overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition); + this.$overlay = $(overlay); + + if (overlayPosition === 'is-overlay-fixed') { + $(this.$overlay).insertAfter(this.$element); + } else { + this.$content.append(this.$overlay); + } + } // Get the revealOn option from the class. + + + var revealOnRegExp = new RegExp(RegExpEscape(this.options.revealClass) + '([^\\s]+)', 'g'); + var revealOnClass = revealOnRegExp.exec(this.$element[0].className); + + if (revealOnClass) { + this.options.isRevealed = true; + this.options.revealOn = this.options.revealOn || revealOnClass[1]; + } // Ensure the `reveal-on-*` class is set. + + + if (this.options.isRevealed === true && this.options.revealOn) { + this.$element.first().addClass("".concat(this.options.revealClass).concat(this.options.revealOn)); + + this._setMQChecker(); + } + + if (this.options.transitionTime) { + this.$element.css('transition-duration', this.options.transitionTime); + } // Initally remove all transition/position CSS classes from off-canvas content container. + + + this._removeContentClasses(); + } + /** + * Adds event handlers to the off-canvas wrapper and the exit overlay. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + this.$element.off('.zf.trigger .zf.offcanvas').on({ + 'open.zf.trigger': this.open.bind(this), + 'close.zf.trigger': this.close.bind(this), + 'toggle.zf.trigger': this.toggle.bind(this), + 'keydown.zf.offcanvas': this._handleKeyboard.bind(this) + }); + + if (this.options.closeOnClick === true) { + var $target = this.options.contentOverlay ? this.$overlay : this.$content; + $target.on({ + 'click.zf.offcanvas': this.close.bind(this) + }); + } + } + /** + * Applies event listener for elements that will reveal at certain breakpoints. + * @private + */ + + }, { + key: "_setMQChecker", + value: function _setMQChecker() { + var _this = this; + + this.onLoadListener = onLoad($(window), function () { + if (MediaQuery.atLeast(_this.options.revealOn)) { + _this.reveal(true); + } + }); + $(window).on('changed.zf.mediaquery', function () { + if (MediaQuery.atLeast(_this.options.revealOn)) { + _this.reveal(true); + } else { + _this.reveal(false); + } + }); + } + /** + * Removes the CSS transition/position classes of the off-canvas content container. + * Removing the classes is important when another off-canvas gets opened that uses the same content container. + * @param {Boolean} hasReveal - true if related off-canvas element is revealed. + * @private + */ + + }, { + key: "_removeContentClasses", + value: function _removeContentClasses(hasReveal) { + if (typeof hasReveal !== 'boolean') { + this.$content.removeClass(this.contentClasses.base.join(' ')); + } else if (hasReveal === false) { + this.$content.removeClass("has-reveal-".concat(this.position)); + } + } + /** + * Adds the CSS transition/position classes of the off-canvas content container, based on the opening off-canvas element. + * Beforehand any transition/position class gets removed. + * @param {Boolean} hasReveal - true if related off-canvas element is revealed. + * @private + */ + + }, { + key: "_addContentClasses", + value: function _addContentClasses(hasReveal) { + this._removeContentClasses(hasReveal); + + if (typeof hasReveal !== 'boolean') { + this.$content.addClass("has-transition-".concat(this.options.transition, " has-position-").concat(this.position)); + } else if (hasReveal === true) { + this.$content.addClass("has-reveal-".concat(this.position)); + } + } + /** + * Handles the revealing/hiding the off-canvas at breakpoints, not the same as open. + * @param {Boolean} isRevealed - true if element should be revealed. + * @function + */ + + }, { + key: "reveal", + value: function reveal(isRevealed) { + if (isRevealed) { + this.close(); + this.isRevealed = true; + this.$element.attr('aria-hidden', 'false'); + this.$element.off('open.zf.trigger toggle.zf.trigger'); + this.$element.removeClass('is-closed'); + } else { + this.isRevealed = false; + this.$element.attr('aria-hidden', 'true'); + this.$element.off('open.zf.trigger toggle.zf.trigger').on({ + 'open.zf.trigger': this.open.bind(this), + 'toggle.zf.trigger': this.toggle.bind(this) + }); + this.$element.addClass('is-closed'); + } + + this._addContentClasses(isRevealed); + } + /** + * Stops scrolling of the body when offcanvas is open on mobile Safari and other troublesome browsers. + * @private + */ + + }, { + key: "_stopScrolling", + value: function _stopScrolling(event) { + return false; + } // Taken and adapted from http://stackoverflow.com/questions/16889447/prevent-full-page-scrolling-ios + // Only really works for y, not sure how to extend to x or if we need to. + + }, { + key: "_recordScrollable", + value: function _recordScrollable(event) { + var elem = this; // called from event handler context with this as elem + // If the element is scrollable (content overflows), then... + + if (elem.scrollHeight !== elem.clientHeight) { + // If we're at the top, scroll down one pixel to allow scrolling up + if (elem.scrollTop === 0) { + elem.scrollTop = 1; + } // If we're at the bottom, scroll up one pixel to allow scrolling down + + + if (elem.scrollTop === elem.scrollHeight - elem.clientHeight) { + elem.scrollTop = elem.scrollHeight - elem.clientHeight - 1; + } + } + + elem.allowUp = elem.scrollTop > 0; + elem.allowDown = elem.scrollTop < elem.scrollHeight - elem.clientHeight; + elem.lastY = event.originalEvent.pageY; + } + }, { + key: "_stopScrollPropagation", + value: function _stopScrollPropagation(event) { + var elem = this; // called from event handler context with this as elem + + var up = event.pageY < elem.lastY; + var down = !up; + elem.lastY = event.pageY; + + if (up && elem.allowUp || down && elem.allowDown) { + event.stopPropagation(); + } else { + event.preventDefault(); + } + } + /** + * Opens the off-canvas menu. + * @function + * @param {Object} event - Event object passed from listener. + * @param {jQuery} trigger - element that triggered the off-canvas to open. + * @fires Offcanvas#opened + * @todo also trigger 'open' event? + */ + + }, { + key: "open", + value: function open(event, trigger) { + if (this.$element.hasClass('is-open') || this.isRevealed) { + return; + } + + var _this = this; + + if (trigger) { + this.$lastTrigger = trigger; + } + + if (this.options.forceTo === 'top') { + window.scrollTo(0, 0); + } else if (this.options.forceTo === 'bottom') { + window.scrollTo(0, document.body.scrollHeight); + } + + if (this.options.transitionTime && this.options.transition !== 'overlap') { + this.$element.siblings('[data-off-canvas-content]').css('transition-duration', this.options.transitionTime); + } else { + this.$element.siblings('[data-off-canvas-content]').css('transition-duration', ''); + } + + this.$element.addClass('is-open').removeClass('is-closed'); + this.$triggers.attr('aria-expanded', 'true'); + this.$element.attr('aria-hidden', 'false'); + this.$content.addClass('is-open-' + this.position); // If `contentScroll` is set to false, add class and disable scrolling on touch devices. + + if (this.options.contentScroll === false) { + $('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling); + this.$element.on('touchstart', this._recordScrollable); + this.$element.on('touchmove', this._stopScrollPropagation); + } + + if (this.options.contentOverlay === true) { + this.$overlay.addClass('is-visible'); + } + + if (this.options.closeOnClick === true && this.options.contentOverlay === true) { + this.$overlay.addClass('is-closable'); + } + + if (this.options.autoFocus === true) { + this.$element.one(transitionend(this.$element), function () { + if (!_this.$element.hasClass('is-open')) { + return; // exit if prematurely closed + } + + var canvasFocus = _this.$element.find('[data-autofocus]'); + + if (canvasFocus.length) { + canvasFocus.eq(0).focus(); + } else { + _this.$element.find('a, button').eq(0).focus(); + } + }); + } + + if (this.options.trapFocus === true) { + this.$content.attr('tabindex', '-1'); + Keyboard.trapFocus(this.$element); + } + + this._addContentClasses(); + /** + * Fires when the off-canvas menu opens. + * @event Offcanvas#opened + */ + + + this.$element.trigger('opened.zf.offcanvas'); + } + /** + * Closes the off-canvas menu. + * @function + * @param {Function} cb - optional cb to fire after closure. + * @fires Offcanvas#closed + */ + + }, { + key: "close", + value: function close(cb) { + if (!this.$element.hasClass('is-open') || this.isRevealed) { + return; + } + + var _this = this; + + this.$element.removeClass('is-open'); + this.$element.attr('aria-hidden', 'true') + /** + * Fires when the off-canvas menu opens. + * @event Offcanvas#closed + */ + .trigger('closed.zf.offcanvas'); + this.$content.removeClass('is-open-left is-open-top is-open-right is-open-bottom'); // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices. + + if (this.options.contentScroll === false) { + $('body').removeClass('is-off-canvas-open').off('touchmove', this._stopScrolling); + this.$element.off('touchstart', this._recordScrollable); + this.$element.off('touchmove', this._stopScrollPropagation); + } + + if (this.options.contentOverlay === true) { + this.$overlay.removeClass('is-visible'); + } + + if (this.options.closeOnClick === true && this.options.contentOverlay === true) { + this.$overlay.removeClass('is-closable'); + } + + this.$triggers.attr('aria-expanded', 'false'); + + if (this.options.trapFocus === true) { + this.$content.removeAttr('tabindex'); + Keyboard.releaseFocus(this.$element); + } // Listen to transitionEnd and add class when done. + + + this.$element.one(transitionend(this.$element), function (e) { + _this.$element.addClass('is-closed'); + + _this._removeContentClasses(); + }); + } + /** + * Toggles the off-canvas menu open or closed. + * @function + * @param {Object} event - Event object passed from listener. + * @param {jQuery} trigger - element that triggered the off-canvas to open. + */ + + }, { + key: "toggle", + value: function toggle(event, trigger) { + if (this.$element.hasClass('is-open')) { + this.close(event, trigger); + } else { + this.open(event, trigger); + } + } + /** + * Handles keyboard input when detected. When the escape key is pressed, the off-canvas menu closes, and focus is restored to the element that opened the menu. + * @function + * @private + */ + + }, { + key: "_handleKeyboard", + value: function _handleKeyboard(e) { + var _this3 = this; + + Keyboard.handleKey(e, 'OffCanvas', { + close: function close() { + _this3.close(); + + _this3.$lastTrigger.focus(); + + return true; + }, + handled: function handled() { + e.stopPropagation(); + e.preventDefault(); + } + }); + } + /** + * Destroys the offcanvas plugin. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.close(); + this.$element.off('.zf.trigger .zf.offcanvas'); + this.$overlay.off('.zf.offcanvas'); + if (this.onLoadListener) $(window).off(this.onLoadListener); + } + }]); + + return OffCanvas; +}(Plugin); + +OffCanvas.defaults = { + /** + * Allow the user to click outside of the menu to close it. + * @option + * @type {boolean} + * @default true + */ + closeOnClick: true, + + /** + * Adds an overlay on top of `[data-off-canvas-content]`. + * @option + * @type {boolean} + * @default true + */ + contentOverlay: true, + + /** + * Target an off-canvas content container by ID that may be placed anywhere. If null the closest content container will be taken. + * @option + * @type {?string} + * @default null + */ + contentId: null, + + /** + * Define the off-canvas element is nested in an off-canvas content. This is required when using the contentId option for a nested element. + * @option + * @type {boolean} + * @default null + */ + nested: null, + + /** + * Enable/disable scrolling of the main content when an off canvas panel is open. + * @option + * @type {boolean} + * @default true + */ + contentScroll: true, + + /** + * Amount of time in ms the open and close transition requires. If none selected, pulls from body style. + * @option + * @type {number} + * @default null + */ + transitionTime: null, + + /** + * Type of transition for the offcanvas menu. Options are 'push', 'detached' or 'slide'. + * @option + * @type {string} + * @default push + */ + transition: 'push', + + /** + * Force the page to scroll to top or bottom on open. + * @option + * @type {?string} + * @default null + */ + forceTo: null, + + /** + * Allow the offcanvas to remain open for certain breakpoints. + * @option + * @type {boolean} + * @default false + */ + isRevealed: false, + + /** + * Breakpoint at which to reveal. JS will use a RegExp to target standard classes, if changing classnames, pass your class with the `revealClass` option. + * @option + * @type {?string} + * @default null + */ + revealOn: null, + + /** + * Force focus to the offcanvas on open. If true, will focus the opening trigger on close. + * @option + * @type {boolean} + * @default true + */ + autoFocus: true, + + /** + * Class used to force an offcanvas to remain open. Foundation defaults for this are `reveal-for-large` & `reveal-for-medium`. + * @option + * @type {string} + * @default reveal-for- + * @todo improve the regex testing for this. + */ + revealClass: 'reveal-for-', + + /** + * Triggers optional focus trapping when opening an offcanvas. Sets tabindex of [data-off-canvas-content] to -1 for accessibility purposes. + * @option + * @type {boolean} + * @default false + */ + trapFocus: false +}; + +/** + * Orbit module. + * @module foundation.orbit + * @requires foundation.util.keyboard + * @requires foundation.util.motion + * @requires foundation.util.timer + * @requires foundation.util.imageLoader + * @requires foundation.util.touch + */ + +var Orbit = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Orbit, _Plugin); + + function Orbit() { + _classCallCheck(this, Orbit); + + return _possibleConstructorReturn(this, _getPrototypeOf(Orbit).apply(this, arguments)); + } + + _createClass(Orbit, [{ + key: "_setup", + + /** + * Creates a new instance of an orbit carousel. + * @class + * @name Orbit + * @param {jQuery} element - jQuery object to make into an Orbit Carousel. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Orbit.defaults, this.$element.data(), options); + this.className = 'Orbit'; // ie9 back compat + + Touch.init($); // Touch init is idempotent, we just need to make sure it's initialied. + + this._init(); + + Keyboard.register('Orbit', { + 'ltr': { + 'ARROW_RIGHT': 'next', + 'ARROW_LEFT': 'previous' + }, + 'rtl': { + 'ARROW_LEFT': 'next', + 'ARROW_RIGHT': 'previous' + } + }); + } + /** + * Initializes the plugin by creating jQuery collections, setting attributes, and starting the animation. + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide + this._reset(); + + this.$wrapper = this.$element.find(".".concat(this.options.containerClass)); + this.$slides = this.$element.find(".".concat(this.options.slideClass)); + var $images = this.$element.find('img'), + initActive = this.$slides.filter('.is-active'), + id = this.$element[0].id || GetYoDigits(6, 'orbit'); + this.$element.attr({ + 'data-resize': id, + 'id': id + }); + + if (!initActive.length) { + this.$slides.eq(0).addClass('is-active'); + } + + if (!this.options.useMUI) { + this.$slides.addClass('no-motionui'); + } + + if ($images.length) { + onImagesLoaded($images, this._prepareForOrbit.bind(this)); + } else { + this._prepareForOrbit(); //hehe + + } + + if (this.options.bullets) { + this._loadBullets(); + } + + this._events(); + + if (this.options.autoPlay && this.$slides.length > 1) { + this.geoSync(); + } + + if (this.options.accessible) { + // allow wrapper to be focusable to enable arrow navigation + this.$wrapper.attr('tabindex', 0); + } + } + /** + * Creates a jQuery collection of bullets, if they are being used. + * @function + * @private + */ + + }, { + key: "_loadBullets", + value: function _loadBullets() { + this.$bullets = this.$element.find(".".concat(this.options.boxOfBullets)).find('button'); + } + /** + * Sets a `timer` object on the orbit, and starts the counter for the next slide. + * @function + */ + + }, { + key: "geoSync", + value: function geoSync() { + var _this = this; + + this.timer = new Timer(this.$element, { + duration: this.options.timerDelay, + infinite: false + }, function () { + _this.changeSlide(true); + }); + this.timer.start(); + } + /** + * Sets wrapper and slide heights for the orbit. + * @function + * @private + */ + + }, { + key: "_prepareForOrbit", + value: function _prepareForOrbit() { + + this._setWrapperHeight(); + } + /** + * Calulates the height of each slide in the collection, and uses the tallest one for the wrapper height. + * @function + * @private + * @param {Function} cb - a callback function to fire when complete. + */ + + }, { + key: "_setWrapperHeight", + value: function _setWrapperHeight(cb) { + //rewrite this to `for` loop + var max = 0, + temp, + counter = 0, + _this = this; + + this.$slides.each(function () { + temp = this.getBoundingClientRect().height; + $(this).attr('data-slide', counter); // hide all slides but the active one + + if (!/mui/g.test($(this)[0].className) && _this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) { + $(this).css({ + 'display': 'none' + }); + } + + max = temp > max ? temp : max; + counter++; + }); + + if (counter === this.$slides.length) { + this.$wrapper.css({ + 'height': max + }); //only change the wrapper height property once. + + if (cb) { + cb(max); + } //fire callback with max height dimension. + + } + } + /** + * Sets the max-height of each slide. + * @function + * @private + */ + + }, { + key: "_setSlideHeight", + value: function _setSlideHeight(height) { + this.$slides.each(function () { + $(this).css('max-height', height); + }); + } + /** + * Adds event listeners to basically everything within the element. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this = this; //*************************************** + //**Now using custom event - thanks to:** + //** Yohai Ararat of Toronto ** + //*************************************** + // + + + this.$element.off('.resizeme.zf.trigger').on({ + 'resizeme.zf.trigger': this._prepareForOrbit.bind(this) + }); + + if (this.$slides.length > 1) { + if (this.options.swipe) { + this.$slides.off('swipeleft.zf.orbit swiperight.zf.orbit').on('swipeleft.zf.orbit', function (e) { + e.preventDefault(); + + _this.changeSlide(true); + }).on('swiperight.zf.orbit', function (e) { + e.preventDefault(); + + _this.changeSlide(false); + }); + } //*************************************** + + + if (this.options.autoPlay) { + this.$slides.on('click.zf.orbit', function () { + _this.$element.data('clickedOn', _this.$element.data('clickedOn') ? false : true); + + _this.timer[_this.$element.data('clickedOn') ? 'pause' : 'start'](); + }); + + if (this.options.pauseOnHover) { + this.$element.on('mouseenter.zf.orbit', function () { + _this.timer.pause(); + }).on('mouseleave.zf.orbit', function () { + if (!_this.$element.data('clickedOn')) { + _this.timer.start(); + } + }); + } + } + + if (this.options.navButtons) { + var $controls = this.$element.find(".".concat(this.options.nextClass, ", .").concat(this.options.prevClass)); + $controls.attr('tabindex', 0) //also need to handle enter/return and spacebar key presses + .on('click.zf.orbit touchend.zf.orbit', function (e) { + e.preventDefault(); + + _this.changeSlide($(this).hasClass(_this.options.nextClass)); + }); + } + + if (this.options.bullets) { + this.$bullets.on('click.zf.orbit touchend.zf.orbit', function () { + if (/is-active/g.test(this.className)) { + return false; + } //if this is active, kick out of function. + + + var idx = $(this).data('slide'), + ltr = idx > _this.$slides.filter('.is-active').data('slide'), + $slide = _this.$slides.eq(idx); + + _this.changeSlide(ltr, $slide, idx); + }); + } + + if (this.options.accessible) { + this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) { + // handle keyboard event with keyboard util + Keyboard.handleKey(e, 'Orbit', { + next: function next() { + _this.changeSlide(true); + }, + previous: function previous() { + _this.changeSlide(false); + }, + handled: function handled() { + // if bullet is focused, make sure focus moves + if ($(e.target).is(_this.$bullets)) { + _this.$bullets.filter('.is-active').focus(); + } + } + }); + }); + } + } + } + /** + * Resets Orbit so it can be reinitialized + */ + + }, { + key: "_reset", + value: function _reset() { + // Don't do anything if there are no slides (first run) + if (typeof this.$slides == 'undefined') { + return; + } + + if (this.$slides.length > 1) { + // Remove old events + this.$element.off('.zf.orbit').find('*').off('.zf.orbit'); // Restart timer if autoPlay is enabled + + if (this.options.autoPlay) { + this.timer.restart(); + } // Reset all sliddes + + + this.$slides.each(function (el) { + $(el).removeClass('is-active is-active is-in').removeAttr('aria-live').hide(); + }); // Show the first slide + + this.$slides.first().addClass('is-active').show(); // Triggers when the slide has finished animating + + this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]); // Select first bullet if bullets are present + + if (this.options.bullets) { + this._updateBullets(0); + } + } + } + /** + * Changes the current slide to a new one. + * @function + * @param {Boolean} isLTR - if true the slide moves from right to left, if false the slide moves from left to right. + * @param {jQuery} chosenSlide - the jQuery element of the slide to show next, if one is selected. + * @param {Number} idx - the index of the new slide in its collection, if one chosen. + * @fires Orbit#slidechange + */ + + }, { + key: "changeSlide", + value: function changeSlide(isLTR, chosenSlide, idx) { + if (!this.$slides) { + return; + } // Don't freak out if we're in the middle of cleanup + + + var $curSlide = this.$slides.filter('.is-active').eq(0); + + if (/mui/g.test($curSlide[0].className)) { + return false; + } //if the slide is currently animating, kick out of the function + + + var $firstSlide = this.$slides.first(), + $lastSlide = this.$slides.last(), + dirIn = isLTR ? 'Right' : 'Left', + dirOut = isLTR ? 'Left' : 'Right', + _this = this, + $newSlide; + + if (!chosenSlide) { + //most of the time, this will be auto played or clicked from the navButtons. + $newSlide = isLTR ? //if wrapping enabled, check to see if there is a `next` or `prev` sibling, if not, select the first or last slide to fill in. if wrapping not enabled, attempt to select `next` or `prev`, if there's nothing there, the function will kick out on next step. CRAZY NESTED TERNARIES!!!!! + this.options.infiniteWrap ? $curSlide.next(".".concat(this.options.slideClass)).length ? $curSlide.next(".".concat(this.options.slideClass)) : $firstSlide : $curSlide.next(".".concat(this.options.slideClass)) : //pick next slide if moving left to right + this.options.infiniteWrap ? $curSlide.prev(".".concat(this.options.slideClass)).length ? $curSlide.prev(".".concat(this.options.slideClass)) : $lastSlide : $curSlide.prev(".".concat(this.options.slideClass)); //pick prev slide if moving right to left + } else { + $newSlide = chosenSlide; + } + + if ($newSlide.length) { + /** + * Triggers before the next slide starts animating in and only if a next slide has been found. + * @event Orbit#beforeslidechange + */ + this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]); + + if (this.options.bullets) { + idx = idx || this.$slides.index($newSlide); //grab index to update bullets + + this._updateBullets(idx); + } + + if (this.options.useMUI && !this.$element.is(':hidden')) { + Motion.animateIn($newSlide.addClass('is-active'), this.options["animInFrom".concat(dirIn)], function () { + $newSlide.css({ + 'display': 'block' + }).attr('aria-live', 'polite'); + }); + Motion.animateOut($curSlide.removeClass('is-active'), this.options["animOutTo".concat(dirOut)], function () { + $curSlide.removeAttr('aria-live'); + + if (_this.options.autoPlay && !_this.timer.isPaused) { + _this.timer.restart(); + } //do stuff? + + }); + } else { + $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide(); + $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show(); + + if (this.options.autoPlay && !this.timer.isPaused) { + this.timer.restart(); + } + } + /** + * Triggers when the slide has finished animating in. + * @event Orbit#slidechange + */ + + + this.$element.trigger('slidechange.zf.orbit', [$newSlide]); + } + } + /** + * Updates the active state of the bullets, if displayed. + * @function + * @private + * @param {Number} idx - the index of the current slide. + */ + + }, { + key: "_updateBullets", + value: function _updateBullets(idx) { + var $oldBullet = this.$element.find(".".concat(this.options.boxOfBullets)).find('.is-active').removeClass('is-active').blur(), + span = $oldBullet.find('span:last').detach(), + $newBullet = this.$bullets.eq(idx).addClass('is-active').append(span); + } + /** + * Destroys the carousel and hides the element. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.off('.zf.orbit').find('*').off('.zf.orbit').end().hide(); + } + }]); + + return Orbit; +}(Plugin); + +Orbit.defaults = { + /** + * Tells the JS to look for and loadBullets. + * @option + * @type {boolean} + * @default true + */ + bullets: true, + + /** + * Tells the JS to apply event listeners to nav buttons + * @option + * @type {boolean} + * @default true + */ + navButtons: true, + + /** + * motion-ui animation class to apply + * @option + * @type {string} + * @default 'slide-in-right' + */ + animInFromRight: 'slide-in-right', + + /** + * motion-ui animation class to apply + * @option + * @type {string} + * @default 'slide-out-right' + */ + animOutToRight: 'slide-out-right', + + /** + * motion-ui animation class to apply + * @option + * @type {string} + * @default 'slide-in-left' + * + */ + animInFromLeft: 'slide-in-left', + + /** + * motion-ui animation class to apply + * @option + * @type {string} + * @default 'slide-out-left' + */ + animOutToLeft: 'slide-out-left', + + /** + * Allows Orbit to automatically animate on page load. + * @option + * @type {boolean} + * @default true + */ + autoPlay: true, + + /** + * Amount of time, in ms, between slide transitions + * @option + * @type {number} + * @default 5000 + */ + timerDelay: 5000, + + /** + * Allows Orbit to infinitely loop through the slides + * @option + * @type {boolean} + * @default true + */ + infiniteWrap: true, + + /** + * Allows the Orbit slides to bind to swipe events for mobile, requires an additional util library + * @option + * @type {boolean} + * @default true + */ + swipe: true, + + /** + * Allows the timing function to pause animation on hover. + * @option + * @type {boolean} + * @default true + */ + pauseOnHover: true, + + /** + * Allows Orbit to bind keyboard events to the slider, to animate frames with arrow keys + * @option + * @type {boolean} + * @default true + */ + accessible: true, + + /** + * Class applied to the container of Orbit + * @option + * @type {string} + * @default 'orbit-container' + */ + containerClass: 'orbit-container', + + /** + * Class applied to individual slides. + * @option + * @type {string} + * @default 'orbit-slide' + */ + slideClass: 'orbit-slide', + + /** + * Class applied to the bullet container. You're welcome. + * @option + * @type {string} + * @default 'orbit-bullets' + */ + boxOfBullets: 'orbit-bullets', + + /** + * Class applied to the `next` navigation button. + * @option + * @type {string} + * @default 'orbit-next' + */ + nextClass: 'orbit-next', + + /** + * Class applied to the `previous` navigation button. + * @option + * @type {string} + * @default 'orbit-previous' + */ + prevClass: 'orbit-previous', + + /** + * Boolean to flag the js to use motion ui classes or not. Default to true for backwards compatibility. + * @option + * @type {boolean} + * @default true + */ + useMUI: true +}; + +var MenuPlugins = { + dropdown: { + cssClass: 'dropdown', + plugin: DropdownMenu + }, + drilldown: { + cssClass: 'drilldown', + plugin: Drilldown + }, + accordion: { + cssClass: 'accordion-menu', + plugin: AccordionMenu + } +}; // import "foundation.util.triggers.js"; + +/** + * ResponsiveMenu module. + * @module foundation.responsiveMenu + * @requires foundation.util.triggers + * @requires foundation.util.mediaQuery + */ + +var ResponsiveMenu = +/*#__PURE__*/ +function (_Plugin) { + _inherits(ResponsiveMenu, _Plugin); + + function ResponsiveMenu() { + _classCallCheck(this, ResponsiveMenu); + + return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveMenu).apply(this, arguments)); + } + + _createClass(ResponsiveMenu, [{ + key: "_setup", + + /** + * Creates a new instance of a responsive menu. + * @class + * @name ResponsiveMenu + * @fires ResponsiveMenu#init + * @param {jQuery} element - jQuery object to make into a dropdown menu. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = $(element); + this.rules = this.$element.data('responsive-menu'); + this.currentMq = null; + this.currentPlugin = null; + this.className = 'ResponsiveMenu'; // ie9 back compat + + this._init(); + + this._events(); + } + /** + * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element. + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + MediaQuery._init(); // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules + + + if (typeof this.rules === 'string') { + var rulesTree = {}; // Parse rules from "classes" pulled from data attribute + + var rules = this.rules.split(' '); // Iterate through every rule found + + for (var i = 0; i < rules.length; i++) { + var rule = rules[i].split('-'); + var ruleSize = rule.length > 1 ? rule[0] : 'small'; + var rulePlugin = rule.length > 1 ? rule[1] : rule[0]; + + if (MenuPlugins[rulePlugin] !== null) { + rulesTree[ruleSize] = MenuPlugins[rulePlugin]; + } + } + + this.rules = rulesTree; + } + + if (!$.isEmptyObject(this.rules)) { + this._checkMediaQueries(); + } // Add data-mutate since children may need it. + + + this.$element.attr('data-mutate', this.$element.attr('data-mutate') || GetYoDigits(6, 'responsive-menu')); + } + /** + * Initializes events for the Menu. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this = this; + + $(window).on('changed.zf.mediaquery', function () { + _this._checkMediaQueries(); + }); // $(window).on('resize.zf.ResponsiveMenu', function() { + // _this._checkMediaQueries(); + // }); + } + /** + * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out. + * @function + * @private + */ + + }, { + key: "_checkMediaQueries", + value: function _checkMediaQueries() { + var matchedMq, + _this = this; // Iterate through each rule and find the last matching rule + + + $.each(this.rules, function (key) { + if (MediaQuery.atLeast(key)) { + matchedMq = key; + } + }); // No match? No dice + + if (!matchedMq) return; // Plugin already initialized? We good + + if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; // Remove existing plugin-specific CSS classes + + $.each(MenuPlugins, function (key, value) { + _this.$element.removeClass(value.cssClass); + }); // Add the CSS class for the new plugin + + this.$element.addClass(this.rules[matchedMq].cssClass); // Create an instance of the new plugin + + if (this.currentPlugin) this.currentPlugin.destroy(); + this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {}); + } + /** + * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.currentPlugin.destroy(); + $(window).off('.zf.ResponsiveMenu'); + } + }]); + + return ResponsiveMenu; +}(Plugin); + +ResponsiveMenu.defaults = {}; + +/** + * ResponsiveToggle module. + * @module foundation.responsiveToggle + * @requires foundation.util.mediaQuery + * @requires foundation.util.motion + */ + +var ResponsiveToggle = +/*#__PURE__*/ +function (_Plugin) { + _inherits(ResponsiveToggle, _Plugin); + + function ResponsiveToggle() { + _classCallCheck(this, ResponsiveToggle); + + return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveToggle).apply(this, arguments)); + } + + _createClass(ResponsiveToggle, [{ + key: "_setup", + + /** + * Creates a new instance of Tab Bar. + * @class + * @name ResponsiveToggle + * @fires ResponsiveToggle#init + * @param {jQuery} element - jQuery object to attach tab bar functionality to. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = $(element); + this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options); + this.className = 'ResponsiveToggle'; // ie9 back compat + + this._init(); + + this._events(); + } + /** + * Initializes the tab bar by finding the target element, toggling element, and running update(). + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + MediaQuery._init(); + + var targetID = this.$element.data('responsive-toggle'); + + if (!targetID) { + console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.'); + } + + this.$targetMenu = $("#".concat(targetID)); + this.$toggler = this.$element.find('[data-toggle]').filter(function () { + var target = $(this).data('toggle'); + return target === targetID || target === ""; + }); + this.options = $.extend({}, this.options, this.$targetMenu.data()); // If they were set, parse the animation classes + + if (this.options.animate) { + var input = this.options.animate.split(' '); + this.animationIn = input[0]; + this.animationOut = input[1] || null; + } + + this._update(); + } + /** + * Adds necessary event handlers for the tab bar to work. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + + this._updateMqHandler = this._update.bind(this); + $(window).on('changed.zf.mediaquery', this._updateMqHandler); + this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this)); + } + /** + * Checks the current media query to determine if the tab bar should be visible or hidden. + * @function + * @private + */ + + }, { + key: "_update", + value: function _update() { + // Mobile + if (!MediaQuery.atLeast(this.options.hideFor)) { + this.$element.show(); + this.$targetMenu.hide(); + } // Desktop + else { + this.$element.hide(); + this.$targetMenu.show(); + } + } + /** + * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it. + * @function + * @fires ResponsiveToggle#toggled + */ + + }, { + key: "toggleMenu", + value: function toggleMenu() { + var _this2 = this; + + if (!MediaQuery.atLeast(this.options.hideFor)) { + /** + * Fires when the element attached to the tab bar toggles. + * @event ResponsiveToggle#toggled + */ + if (this.options.animate) { + if (this.$targetMenu.is(':hidden')) { + Motion.animateIn(this.$targetMenu, this.animationIn, function () { + _this2.$element.trigger('toggled.zf.responsiveToggle'); + + _this2.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger'); + }); + } else { + Motion.animateOut(this.$targetMenu, this.animationOut, function () { + _this2.$element.trigger('toggled.zf.responsiveToggle'); + }); + } + } else { + this.$targetMenu.toggle(0); + this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger'); + this.$element.trigger('toggled.zf.responsiveToggle'); + } + } + } + }, { + key: "_destroy", + value: function _destroy() { + this.$element.off('.zf.responsiveToggle'); + this.$toggler.off('.zf.responsiveToggle'); + $(window).off('changed.zf.mediaquery', this._updateMqHandler); + } + }]); + + return ResponsiveToggle; +}(Plugin); + +ResponsiveToggle.defaults = { + /** + * The breakpoint after which the menu is always shown, and the tab bar is hidden. + * @option + * @type {string} + * @default 'medium' + */ + hideFor: 'medium', + + /** + * To decide if the toggle should be animated or not. + * @option + * @type {boolean} + * @default false + */ + animate: false +}; + +/** + * Reveal module. + * @module foundation.reveal + * @requires foundation.util.keyboard + * @requires foundation.util.triggers + * @requires foundation.util.mediaQuery + * @requires foundation.util.motion if using animations + */ + +var Reveal = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Reveal, _Plugin); + + function Reveal() { + _classCallCheck(this, Reveal); + + return _possibleConstructorReturn(this, _getPrototypeOf(Reveal).apply(this, arguments)); + } + + _createClass(Reveal, [{ + key: "_setup", + + /** + * Creates a new instance of Reveal. + * @class + * @name Reveal + * @param {jQuery} element - jQuery object to use for the modal. + * @param {Object} options - optional parameters. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Reveal.defaults, this.$element.data(), options); + this.className = 'Reveal'; // ie9 back compat + + this._init(); // Triggers init is idempotent, just need to make sure it is initialized + + + Triggers.init($); + Keyboard.register('Reveal', { + 'ESCAPE': 'close' + }); + } + /** + * Initializes the modal by adding the overlay and close buttons, (if selected). + * @private + */ + + }, { + key: "_init", + value: function _init() { + var _this2 = this; + + MediaQuery._init(); + + this.id = this.$element.attr('id'); + this.isActive = false; + this.cached = { + mq: MediaQuery.current + }; + this.$anchor = $("[data-open=\"".concat(this.id, "\"]")).length ? $("[data-open=\"".concat(this.id, "\"]")) : $("[data-toggle=\"".concat(this.id, "\"]")); + this.$anchor.attr({ + 'aria-controls': this.id, + 'aria-haspopup': true, + 'tabindex': 0 + }); + + if (this.options.fullScreen || this.$element.hasClass('full')) { + this.options.fullScreen = true; + this.options.overlay = false; + } + + if (this.options.overlay && !this.$overlay) { + this.$overlay = this._makeOverlay(this.id); + } + + this.$element.attr({ + 'role': 'dialog', + 'aria-hidden': true, + 'data-yeti-box': this.id, + 'data-resize': this.id + }); + + if (this.$overlay) { + this.$element.detach().appendTo(this.$overlay); + } else { + this.$element.detach().appendTo($(this.options.appendTo)); + this.$element.addClass('without-overlay'); + } + + this._events(); + + if (this.options.deepLink && window.location.hash === "#".concat(this.id)) { + this.onLoadListener = onLoad($(window), function () { + return _this2.open(); + }); + } + } + /** + * Creates an overlay div to display behind the modal. + * @private + */ + + }, { + key: "_makeOverlay", + value: function _makeOverlay() { + var additionalOverlayClasses = ''; + + if (this.options.additionalOverlayClasses) { + additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses; + } + + return $('
    ').addClass('reveal-overlay' + additionalOverlayClasses).appendTo(this.options.appendTo); + } + /** + * Updates position of modal + * TODO: Figure out if we actually need to cache these values or if it doesn't matter + * @private + */ + + }, { + key: "_updatePosition", + value: function _updatePosition() { + var width = this.$element.outerWidth(); + var outerWidth = $(window).width(); + var height = this.$element.outerHeight(); + var outerHeight = $(window).height(); + var left, + top = null; + + if (this.options.hOffset === 'auto') { + left = parseInt((outerWidth - width) / 2, 10); + } else { + left = parseInt(this.options.hOffset, 10); + } + + if (this.options.vOffset === 'auto') { + if (height > outerHeight) { + top = parseInt(Math.min(100, outerHeight / 10), 10); + } else { + top = parseInt((outerHeight - height) / 4, 10); + } + } else if (this.options.vOffset !== null) { + top = parseInt(this.options.vOffset, 10); + } + + if (top !== null) { + this.$element.css({ + top: top + 'px' + }); + } // only worry about left if we don't have an overlay or we have a horizontal offset, + // otherwise we're perfectly in the middle + + + if (!this.$overlay || this.options.hOffset !== 'auto') { + this.$element.css({ + left: left + 'px' + }); + this.$element.css({ + margin: '0px' + }); + } + } + /** + * Adds event handlers for the modal. + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this3 = this; + + var _this = this; + + this.$element.on({ + 'open.zf.trigger': this.open.bind(this), + 'close.zf.trigger': function closeZfTrigger(event, $element) { + if (event.target === _this.$element[0] || $(event.target).parents('[data-closable]')[0] === $element) { + // only close reveal when it's explicitly called + return _this3.close.apply(_this3); + } + }, + 'toggle.zf.trigger': this.toggle.bind(this), + 'resizeme.zf.trigger': function resizemeZfTrigger() { + _this._updatePosition(); + } + }); + + if (this.options.closeOnClick && this.options.overlay) { + this.$overlay.off('.zf.reveal').on('click.zf.reveal', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) { + return; + } + + _this.close(); + }); + } + + if (this.options.deepLink) { + $(window).on("hashchange.zf.reveal:".concat(this.id), this._handleState.bind(this)); + } + } + /** + * Handles modal methods on back/forward button clicks or any other event that triggers hashchange. + * @private + */ + + }, { + key: "_handleState", + value: function _handleState(e) { + if (window.location.hash === '#' + this.id && !this.isActive) { + this.open(); + } else { + this.close(); + } + } + /** + * Disables the scroll when Reveal is shown to prevent the background from shifting + * @param {number} scrollTop - Scroll to visually apply, window current scroll by default + */ + + }, { + key: "_disableScroll", + value: function _disableScroll(scrollTop) { + scrollTop = scrollTop || $(window).scrollTop(); + + if ($(document).height() > $(window).height()) { + $("html").css("top", -scrollTop); + } + } + /** + * Reenables the scroll when Reveal closes + * @param {number} scrollTop - Scroll to restore, html "top" property by default (as set by `_disableScroll`) + */ + + }, { + key: "_enableScroll", + value: function _enableScroll(scrollTop) { + scrollTop = scrollTop || parseInt($("html").css("top")); + + if ($(document).height() > $(window).height()) { + $("html").css("top", ""); + $(window).scrollTop(-scrollTop); + } + } + /** + * Opens the modal controlled by `this.$anchor`, and closes all others by default. + * @function + * @fires Reveal#closeme + * @fires Reveal#open + */ + + }, { + key: "open", + value: function open() { + var _this4 = this; + + // either update or replace browser history + var hash = "#".concat(this.id); + + if (this.options.deepLink && window.location.hash !== hash) { + if (window.history.pushState) { + if (this.options.updateHistory) { + window.history.pushState({}, '', hash); + } else { + window.history.replaceState({}, '', hash); + } + } else { + window.location.hash = hash; + } + } // Remember anchor that opened it to set focus back later, have general anchors as fallback + + + this.$activeAnchor = $(document.activeElement).is(this.$anchor) ? $(document.activeElement) : this.$anchor; + this.isActive = true; // Make elements invisible, but remove display: none so we can get size and positioning + + this.$element.css({ + 'visibility': 'hidden' + }).show().scrollTop(0); + + if (this.options.overlay) { + this.$overlay.css({ + 'visibility': 'hidden' + }).show(); + } + + this._updatePosition(); + + this.$element.hide().css({ + 'visibility': '' + }); + + if (this.$overlay) { + this.$overlay.css({ + 'visibility': '' + }).hide(); + + if (this.$element.hasClass('fast')) { + this.$overlay.addClass('fast'); + } else if (this.$element.hasClass('slow')) { + this.$overlay.addClass('slow'); + } + } + + if (!this.options.multipleOpened) { + /** + * Fires immediately before the modal opens. + * Closes any other modals that are currently open + * @event Reveal#closeme + */ + this.$element.trigger('closeme.zf.reveal', this.id); + } + + this._disableScroll(); + + var _this = this; // Motion UI method of reveal + + + if (this.options.animationIn) { + var afterAnimation = function afterAnimation() { + _this.$element.attr({ + 'aria-hidden': false, + 'tabindex': -1 + }).focus(); + + _this._addGlobalClasses(); + + Keyboard.trapFocus(_this.$element); + }; + + if (this.options.overlay) { + Motion.animateIn(this.$overlay, 'fade-in'); + } + + Motion.animateIn(this.$element, this.options.animationIn, function () { + if (_this4.$element) { + // protect against object having been removed + _this4.focusableElements = Keyboard.findFocusable(_this4.$element); + afterAnimation(); + } + }); + } // jQuery method of reveal + else { + if (this.options.overlay) { + this.$overlay.show(0); + } + + this.$element.show(this.options.showDelay); + } // handle accessibility + + + this.$element.attr({ + 'aria-hidden': false, + 'tabindex': -1 + }).focus(); + Keyboard.trapFocus(this.$element); + + this._addGlobalClasses(); + + this._addGlobalListeners(); + /** + * Fires when the modal has successfully opened. + * @event Reveal#open + */ + + + this.$element.trigger('open.zf.reveal'); + } + /** + * Adds classes and listeners on document required by open modals. + * + * The following classes are added and updated: + * - `.is-reveal-open` - Prevents the scroll on document + * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the + * scroll was not disabled. This prevent a "shift" of the page content due + * the scrollbar disappearing when the modal opens. + * + * @private + */ + + }, { + key: "_addGlobalClasses", + value: function _addGlobalClasses() { + var updateScrollbarClass = function updateScrollbarClass() { + $('html').toggleClass('zf-has-scroll', !!($(document).height() > $(window).height())); + }; + + this.$element.on('resizeme.zf.trigger.revealScrollbarListener', function () { + return updateScrollbarClass(); + }); + updateScrollbarClass(); + $('html').addClass('is-reveal-open'); + } + /** + * Removes classes and listeners on document that were required by open modals. + * @private + */ + + }, { + key: "_removeGlobalClasses", + value: function _removeGlobalClasses() { + this.$element.off('resizeme.zf.trigger.revealScrollbarListener'); + $('html').removeClass('is-reveal-open'); + $('html').removeClass('zf-has-scroll'); + } + /** + * Adds extra event handlers for the body and window if necessary. + * @private + */ + + }, { + key: "_addGlobalListeners", + value: function _addGlobalListeners() { + var _this = this; + + if (!this.$element) { + return; + } // If we're in the middle of cleanup, don't freak out + + + this.focusableElements = Keyboard.findFocusable(this.$element); + + if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) { + $('body').on('click.zf.reveal', function (e) { + if (e.target === _this.$element[0] || $.contains(_this.$element[0], e.target) || !$.contains(document, e.target)) { + return; + } + + _this.close(); + }); + } + + if (this.options.closeOnEsc) { + $(window).on('keydown.zf.reveal', function (e) { + Keyboard.handleKey(e, 'Reveal', { + close: function close() { + if (_this.options.closeOnEsc) { + _this.close(); + } + } + }); + }); + } + } + /** + * Closes the modal. + * @function + * @fires Reveal#closed + */ + + }, { + key: "close", + value: function close() { + if (!this.isActive || !this.$element.is(':visible')) { + return false; + } + + var _this = this; // Motion UI method of hiding + + + if (this.options.animationOut) { + if (this.options.overlay) { + Motion.animateOut(this.$overlay, 'fade-out'); + } + + Motion.animateOut(this.$element, this.options.animationOut, finishUp); + } // jQuery method of hiding + else { + this.$element.hide(this.options.hideDelay); + + if (this.options.overlay) { + this.$overlay.hide(0, finishUp); + } else { + finishUp(); + } + } // Conditionals to remove extra event listeners added on open + + + if (this.options.closeOnEsc) { + $(window).off('keydown.zf.reveal'); + } + + if (!this.options.overlay && this.options.closeOnClick) { + $('body').off('click.zf.reveal'); + } + + this.$element.off('keydown.zf.reveal'); + + function finishUp() { + // Get the current top before the modal is closed and restore the scroll after. + // TODO: use component properties instead of HTML properties + // See https://github.com/zurb/foundation-sites/pull/10786 + var scrollTop = parseInt($("html").css("top")); + + if ($('.reveal:visible').length === 0) { + _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal + + } + + Keyboard.releaseFocus(_this.$element); + + _this.$element.attr('aria-hidden', true); + + _this._enableScroll(scrollTop); + /** + * Fires when the modal is done closing. + * @event Reveal#closed + */ + + + _this.$element.trigger('closed.zf.reveal'); + } + /** + * Resets the modal content + * This prevents a running video to keep going in the background + */ + + + if (this.options.resetOnClose) { + this.$element.html(this.$element.html()); + } + + this.isActive = false; // If deepLink and we did not switched to an other modal... + + if (_this.options.deepLink && window.location.hash === "#".concat(this.id)) { + // Remove the history hash + if (window.history.replaceState) { + var urlWithoutHash = window.location.pathname + window.location.search; + + if (this.options.updateHistory) { + window.history.pushState({}, '', urlWithoutHash); // remove the hash + } else { + window.history.replaceState('', document.title, urlWithoutHash); + } + } else { + window.location.hash = ''; + } + } + + this.$activeAnchor.focus(); + } + /** + * Toggles the open/closed state of a modal. + * @function + */ + + }, { + key: "toggle", + value: function toggle() { + if (this.isActive) { + this.close(); + } else { + this.open(); + } + } + }, { + key: "_destroy", + + /** + * Destroys an instance of a modal. + * @function + */ + value: function _destroy() { + if (this.options.overlay) { + this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin() + + this.$overlay.hide().off().remove(); + } + + this.$element.hide().off(); + this.$anchor.off('.zf'); + $(window).off(".zf.reveal:".concat(this.id)); + if (this.onLoadListener) $(window).off(this.onLoadListener); + + if ($('.reveal:visible').length === 0) { + this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal + + } + } + }]); + + return Reveal; +}(Plugin); + +Reveal.defaults = { + /** + * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide. + * @option + * @type {string} + * @default '' + */ + animationIn: '', + + /** + * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide. + * @option + * @type {string} + * @default '' + */ + animationOut: '', + + /** + * Time, in ms, to delay the opening of a modal after a click if no animation used. + * @option + * @type {number} + * @default 0 + */ + showDelay: 0, + + /** + * Time, in ms, to delay the closing of a modal after a click if no animation used. + * @option + * @type {number} + * @default 0 + */ + hideDelay: 0, + + /** + * Allows a click on the body/overlay to close the modal. + * @option + * @type {boolean} + * @default true + */ + closeOnClick: true, + + /** + * Allows the modal to close if the user presses the `ESCAPE` key. + * @option + * @type {boolean} + * @default true + */ + closeOnEsc: true, + + /** + * If true, allows multiple modals to be displayed at once. + * @option + * @type {boolean} + * @default false + */ + multipleOpened: false, + + /** + * Distance, in pixels, the modal should push down from the top of the screen. + * @option + * @type {number|string} + * @default auto + */ + vOffset: 'auto', + + /** + * Distance, in pixels, the modal should push in from the side of the screen. + * @option + * @type {number|string} + * @default auto + */ + hOffset: 'auto', + + /** + * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well. + * @option + * @type {boolean} + * @default false + */ + fullScreen: false, + + /** + * Allows the modal to generate an overlay div, which will cover the view when modal opens. + * @option + * @type {boolean} + * @default true + */ + overlay: true, + + /** + * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background. + * @option + * @type {boolean} + * @default false + */ + resetOnClose: false, + + /** + * Link the location hash to the modal. + * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes. + * @option + * @type {boolean} + * @default false + */ + deepLink: false, + + /** + * If `deepLink` is enabled, update the browser history with the open modal + * @option + * @default false + */ + updateHistory: false, + + /** + * Allows the modal to append to custom div. + * @option + * @type {string} + * @default "body" + */ + appendTo: "body", + + /** + * Allows adding additional class names to the reveal overlay. + * @option + * @type {string} + * @default '' + */ + additionalOverlayClasses: '' +}; + +/** + * Slider module. + * @module foundation.slider + * @requires foundation.util.motion + * @requires foundation.util.triggers + * @requires foundation.util.keyboard + * @requires foundation.util.touch + */ + +var Slider = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Slider, _Plugin); + + function Slider() { + _classCallCheck(this, Slider); + + return _possibleConstructorReturn(this, _getPrototypeOf(Slider).apply(this, arguments)); + } + + _createClass(Slider, [{ + key: "_setup", + + /** + * Creates a new instance of a slider control. + * @class + * @name Slider + * @param {jQuery} element - jQuery object to make into a slider control. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Slider.defaults, this.$element.data(), options); + this.className = 'Slider'; // ie9 back compat + // Touch and Triggers inits are idempotent, we just need to make sure it's initialied. + + Touch.init($); + Triggers.init($); + + this._init(); + + Keyboard.register('Slider', { + 'ltr': { + 'ARROW_RIGHT': 'increase', + 'ARROW_UP': 'increase', + 'ARROW_DOWN': 'decrease', + 'ARROW_LEFT': 'decrease', + 'SHIFT_ARROW_RIGHT': 'increase_fast', + 'SHIFT_ARROW_UP': 'increase_fast', + 'SHIFT_ARROW_DOWN': 'decrease_fast', + 'SHIFT_ARROW_LEFT': 'decrease_fast', + 'HOME': 'min', + 'END': 'max' + }, + 'rtl': { + 'ARROW_LEFT': 'increase', + 'ARROW_RIGHT': 'decrease', + 'SHIFT_ARROW_LEFT': 'increase_fast', + 'SHIFT_ARROW_RIGHT': 'decrease_fast' + } + }); + } + /** + * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s). + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + this.inputs = this.$element.find('input'); + this.handles = this.$element.find('[data-slider-handle]'); + this.$handle = this.handles.eq(0); + this.$input = this.inputs.length ? this.inputs.eq(0) : $("#".concat(this.$handle.attr('aria-controls'))); + this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0); + + if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) { + this.options.disabled = true; + this.$element.addClass(this.options.disabledClass); + } + + if (!this.inputs.length) { + this.inputs = $().add(this.$input); + this.options.binding = true; + } + + this._setInitAttr(0); + + if (this.handles[1]) { + this.options.doubleSided = true; + this.$handle2 = this.handles.eq(1); + this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $("#".concat(this.$handle2.attr('aria-controls'))); + + if (!this.inputs[1]) { + this.inputs = this.inputs.add(this.$input2); + } + + this._setInitAttr(1); + } // Set handle positions + + + this.setHandles(); + + this._events(); + } + }, { + key: "setHandles", + value: function setHandles() { + var _this2 = this; + + if (this.handles[1]) { + this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, function () { + _this2._setHandlePos(_this2.$handle2, _this2.inputs.eq(1).val(), true); + }); + } else { + this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true); + } + } + }, { + key: "_reflow", + value: function _reflow() { + this.setHandles(); + } + /** + * @function + * @private + * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value) + */ + + }, { + key: "_pctOfBar", + value: function _pctOfBar(value) { + var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start); + + switch (this.options.positionValueFunction) { + case "pow": + pctOfBar = this._logTransform(pctOfBar); + break; + + case "log": + pctOfBar = this._powTransform(pctOfBar); + break; + } + + return pctOfBar.toFixed(2); + } + /** + * @function + * @private + * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value + */ + + }, { + key: "_value", + value: function _value(pctOfBar) { + switch (this.options.positionValueFunction) { + case "pow": + pctOfBar = this._powTransform(pctOfBar); + break; + + case "log": + pctOfBar = this._logTransform(pctOfBar); + break; + } + + var value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start); + return value; + } + /** + * @function + * @private + * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function + */ + + }, { + key: "_logTransform", + value: function _logTransform(value) { + return baseLog(this.options.nonLinearBase, value * (this.options.nonLinearBase - 1) + 1); + } + /** + * @function + * @private + * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function + */ + + }, { + key: "_powTransform", + value: function _powTransform(value) { + return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1); + } + /** + * Sets the position of the selected handle and fill bar. + * @function + * @private + * @param {jQuery} $hndl - the selected handle to move. + * @param {Number} location - floating point between the start and end values of the slider bar. + * @param {Function} cb - callback function to fire on completion. + * @fires Slider#moved + * @fires Slider#changed + */ + + }, { + key: "_setHandlePos", + value: function _setHandlePos($hndl, location, noInvert, cb) { + // don't move if the slider has been disabled since its initialization + if (this.$element.hasClass(this.options.disabledClass)) { + return; + } //might need to alter that slightly for bars that will have odd number selections. + + + location = parseFloat(location); //on input change events, convert string to number...grumble. + // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max + + if (location < this.options.start) { + location = this.options.start; + } else if (location > this.options.end) { + location = this.options.end; + } + + var isDbl = this.options.doubleSided; //this is for single-handled vertical sliders, it adjusts the value to account for the slider being "upside-down" + //for click and drag events, it's weird due to the scale(-1, 1) css property + + if (this.options.vertical && !noInvert) { + location = this.options.end - location; + } + + if (isDbl) { + //this block is to prevent 2 handles from crossing eachother. Could/should be improved. + if (this.handles.index($hndl) === 0) { + var h2Val = parseFloat(this.$handle2.attr('aria-valuenow')); + location = location >= h2Val ? h2Val - this.options.step : location; + } else { + var h1Val = parseFloat(this.$handle.attr('aria-valuenow')); + location = location <= h1Val ? h1Val + this.options.step : location; + } + } + + var _this = this, + vert = this.options.vertical, + hOrW = vert ? 'height' : 'width', + lOrT = vert ? 'top' : 'left', + handleDim = $hndl[0].getBoundingClientRect()[hOrW], + elemDim = this.$element[0].getBoundingClientRect()[hOrW], + //percentage of bar min/max value based on click or drag point + pctOfBar = this._pctOfBar(location), + //number of actual pixels to shift the handle, based on the percentage obtained above + pxToMove = (elemDim - handleDim) * pctOfBar, + //percentage of bar to shift the handle + movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal); //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value + + + location = parseFloat(location.toFixed(this.options.decimal)); // declare empty object for css adjustments, only used with 2 handled-sliders + + var css = {}; + + this._setValues($hndl, location); // TODO update to calculate based on values set to respective inputs?? + + + if (isDbl) { + var isLeftHndl = this.handles.index($hndl) === 0, + //empty variable, will be used for min-height/width for fill bar + dim, + //percentage w/h of the handle compared to the slider bar + handlePct = ~~(percent(handleDim, elemDim) * 100); //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar + + if (isLeftHndl) { + //left or top percentage value to apply to the fill bar. + css[lOrT] = "".concat(movement, "%"); //calculate the new min-height/width for the fill bar. + + dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct; //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider + //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future. + + if (cb && typeof cb === 'function') { + cb(); + } //this is only needed for the initialization of 2 handled sliders + + } else { + //just caching the value of the left/bottom handle's left/top property + var handlePos = parseFloat(this.$handle[0].style[lOrT]); //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0 + //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself + + dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start) / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct; + } // assign the min-height/width to our css object + + + css["min-".concat(hOrW)] = "".concat(dim, "%"); + } + + this.$element.one('finished.zf.animate', function () { + /** + * Fires when the handle is done moving. + * @event Slider#moved + */ + _this.$element.trigger('moved.zf.slider', [$hndl]); + }); //because we don't know exactly how the handle will be moved, check the amount of time it should take to move. + + var moveTime = this.$element.data('dragging') ? 1000 / 60 : this.options.moveTime; + Move(moveTime, $hndl, function () { + // adjusting the left/top property of the handle, based on the percentage calculated above + // if movement isNaN, that is because the slider is hidden and we cannot determine handle width, + // fall back to next best guess. + if (isNaN(movement)) { + $hndl.css(lOrT, "".concat(pctOfBar * 100, "%")); + } else { + $hndl.css(lOrT, "".concat(movement, "%")); + } + + if (!_this.options.doubleSided) { + //if single-handled, a simple method to expand the fill bar + _this.$fill.css(hOrW, "".concat(pctOfBar * 100, "%")); + } else { + //otherwise, use the css object we created above + _this.$fill.css(css); + } + }); + /** + * Fires when the value has not been change for a given time. + * @event Slider#changed + */ + + clearTimeout(_this.timeout); + _this.timeout = setTimeout(function () { + _this.$element.trigger('changed.zf.slider', [$hndl]); + }, _this.options.changedDelay); + } + /** + * Sets the initial attribute for the slider element. + * @function + * @private + * @param {Number} idx - index of the current handle/input to use. + */ + + }, { + key: "_setInitAttr", + value: function _setInitAttr(idx) { + var initVal = idx === 0 ? this.options.initialStart : this.options.initialEnd; + var id = this.inputs.eq(idx).attr('id') || GetYoDigits(6, 'slider'); + this.inputs.eq(idx).attr({ + 'id': id, + 'max': this.options.end, + 'min': this.options.start, + 'step': this.options.step + }); + this.inputs.eq(idx).val(initVal); + this.handles.eq(idx).attr({ + 'role': 'slider', + 'aria-controls': id, + 'aria-valuemax': this.options.end, + 'aria-valuemin': this.options.start, + 'aria-valuenow': initVal, + 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal', + 'tabindex': 0 + }); + } + /** + * Sets the input and `aria-valuenow` values for the slider element. + * @function + * @private + * @param {jQuery} $handle - the currently selected handle. + * @param {Number} val - floating point of the new value. + */ + + }, { + key: "_setValues", + value: function _setValues($handle, val) { + var idx = this.options.doubleSided ? this.handles.index($handle) : 0; + this.inputs.eq(idx).val(val); + $handle.attr('aria-valuenow', val); + } + /** + * Handles events on the slider element. + * Calculates the new location of the current handle. + * If there are two handles and the bar was clicked, it determines which handle to move. + * @function + * @private + * @param {Object} e - the `event` object passed from the listener. + * @param {jQuery} $handle - the current handle to calculate for, if selected. + * @param {Number} val - floating point number for the new value of the slider. + * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn. + */ + + }, { + key: "_handleEvent", + value: function _handleEvent(e, $handle, val) { + var value, hasVal; + + if (!val) { + //click or drag events + e.preventDefault(); + + var _this = this, + vertical = this.options.vertical, + param = vertical ? 'height' : 'width', + direction = vertical ? 'top' : 'left', + eventOffset = vertical ? e.pageY : e.pageX, + halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2, + barDim = this.$element[0].getBoundingClientRect()[param], + windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft(); + + var elemOffset = this.$element.offset()[direction]; // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates... + // best way to guess this is simulated is if clientY == pageY + + if (e.clientY === e.pageY) { + eventOffset = eventOffset + windowScroll; + } + + var eventFromBar = eventOffset - elemOffset; + var barXY; + + if (eventFromBar < 0) { + barXY = 0; + } else if (eventFromBar > barDim) { + barXY = barDim; + } else { + barXY = eventFromBar; + } + + var offsetPct = percent(barXY, barDim); + value = this._value(offsetPct); // turn everything around for RTL, yay math! + + if (rtl() && !this.options.vertical) { + value = this.options.end - value; + } + + value = _this._adjustValue(null, value); //boolean flag for the setHandlePos fn, specifically for vertical sliders + + hasVal = false; + + if (!$handle) { + //figure out which handle it is, pass it to the next function. + var firstHndlPos = absPosition(this.$handle, direction, barXY, param), + secndHndlPos = absPosition(this.$handle2, direction, barXY, param); + $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2; + } + } else { + //change event on input + value = this._adjustValue(null, val); + hasVal = true; + } + + this._setHandlePos($handle, value, hasVal); + } + /** + * Adjustes value for handle in regard to step value. returns adjusted value + * @function + * @private + * @param {jQuery} $handle - the selected handle. + * @param {Number} value - value to adjust. used if $handle is falsy + */ + + }, { + key: "_adjustValue", + value: function _adjustValue($handle, value) { + var val, + step = this.options.step, + div = parseFloat(step / 2), + left, + prev_val, + next_val; + + if (!!$handle) { + val = parseFloat($handle.attr('aria-valuenow')); + } else { + val = value; + } + + if (val >= 0) { + left = val % step; + } else { + left = step + val % step; + } + + prev_val = val - left; + next_val = prev_val + step; + + if (left === 0) { + return val; + } + + val = val >= prev_val + div ? next_val : prev_val; + return val; + } + /** + * Adds event listeners to the slider elements. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + this._eventsForHandle(this.$handle); + + if (this.handles[1]) { + this._eventsForHandle(this.$handle2); + } + } + /** + * Adds event listeners a particular handle + * @function + * @private + * @param {jQuery} $handle - the current handle to apply listeners to. + */ + + }, { + key: "_eventsForHandle", + value: function _eventsForHandle($handle) { + var _this = this, + curHandle; + + var handleChangeEvent = function handleChangeEvent(e) { + var idx = _this.inputs.index($(this)); + + _this._handleEvent(e, _this.handles.eq(idx), $(this).val()); + }; // IE only triggers the change event when the input loses focus which strictly follows the HTML specification + // listen for the enter key and trigger a change + // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events + + + this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) { + if (e.keyCode == 13) handleChangeEvent.call(this, e); + }); + this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent); + + if (this.options.clickSelect) { + this.$element.off('click.zf.slider').on('click.zf.slider', function (e) { + if (_this.$element.data('dragging')) { + return false; + } + + if (!$(e.target).is('[data-slider-handle]')) { + if (_this.options.doubleSided) { + _this._handleEvent(e); + } else { + _this._handleEvent(e, _this.$handle); + } + } + }); + } + + if (this.options.draggable) { + this.handles.addTouch(); + var $body = $('body'); + $handle.off('mousedown.zf.slider').on('mousedown.zf.slider', function (e) { + $handle.addClass('is-dragging'); + + _this.$fill.addClass('is-dragging'); // + + + _this.$element.data('dragging', true); + + curHandle = $(e.currentTarget); + $body.on('mousemove.zf.slider', function (e) { + e.preventDefault(); + + _this._handleEvent(e, curHandle); + }).on('mouseup.zf.slider', function (e) { + _this._handleEvent(e, curHandle); + + $handle.removeClass('is-dragging'); + + _this.$fill.removeClass('is-dragging'); + + _this.$element.data('dragging', false); + + $body.off('mousemove.zf.slider mouseup.zf.slider'); + }); + }) // prevent events triggered by touch + .on('selectstart.zf.slider touchmove.zf.slider', function (e) { + e.preventDefault(); + }); + } + + $handle.off('keydown.zf.slider').on('keydown.zf.slider', function (e) { + var _$handle = $(this), + idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0, + oldValue = parseFloat(_this.inputs.eq(idx).val()), + newValue; // handle keyboard event with keyboard util + + + Keyboard.handleKey(e, 'Slider', { + decrease: function decrease() { + newValue = oldValue - _this.options.step; + }, + increase: function increase() { + newValue = oldValue + _this.options.step; + }, + decrease_fast: function decrease_fast() { + newValue = oldValue - _this.options.step * 10; + }, + increase_fast: function increase_fast() { + newValue = oldValue + _this.options.step * 10; + }, + min: function min() { + newValue = _this.options.start; + }, + max: function max() { + newValue = _this.options.end; + }, + handled: function handled() { + // only set handle pos when event was handled specially + e.preventDefault(); + + _this._setHandlePos(_$handle, newValue, true); + } + }); + /*if (newValue) { // if pressed key has special function, update value + e.preventDefault(); + _this._setHandlePos(_$handle, newValue); + }*/ + }); + } + /** + * Destroys the slider plugin. + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.handles.off('.zf.slider'); + this.inputs.off('.zf.slider'); + this.$element.off('.zf.slider'); + clearTimeout(this.timeout); + } + }]); + + return Slider; +}(Plugin); + +Slider.defaults = { + /** + * Minimum value for the slider scale. + * @option + * @type {number} + * @default 0 + */ + start: 0, + + /** + * Maximum value for the slider scale. + * @option + * @type {number} + * @default 100 + */ + end: 100, + + /** + * Minimum value change per change event. + * @option + * @type {number} + * @default 1 + */ + step: 1, + + /** + * Value at which the handle/input *(left handle/first input)* should be set to on initialization. + * @option + * @type {number} + * @default 0 + */ + initialStart: 0, + + /** + * Value at which the right handle/second input should be set to on initialization. + * @option + * @type {number} + * @default 100 + */ + initialEnd: 100, + + /** + * Allows the input to be located outside the container and visible. Set to by the JS + * @option + * @type {boolean} + * @default false + */ + binding: false, + + /** + * Allows the user to click/tap on the slider bar to select a value. + * @option + * @type {boolean} + * @default true + */ + clickSelect: true, + + /** + * Set to true and use the `vertical` class to change alignment to vertical. + * @option + * @type {boolean} + * @default false + */ + vertical: false, + + /** + * Allows the user to drag the slider handle(s) to select a value. + * @option + * @type {boolean} + * @default true + */ + draggable: true, + + /** + * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`. + * @option + * @type {boolean} + * @default false + */ + disabled: false, + + /** + * Allows the use of two handles. Double checked by the JS. Changes some logic handling. + * @option + * @type {boolean} + * @default false + */ + doubleSided: false, + + /** + * Potential future feature. + */ + // steps: 100, + + /** + * Number of decimal places the plugin should go to for floating point precision. + * @option + * @type {number} + * @default 2 + */ + decimal: 2, + + /** + * Time delay for dragged elements. + */ + // dragDelay: 0, + + /** + * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings. + * @option + * @type {number} + * @default 200 + */ + moveTime: 200, + //update this if changing the transition time in the sass + + /** + * Class applied to disabled sliders. + * @option + * @type {string} + * @default 'disabled' + */ + disabledClass: 'disabled', + + /** + * Will invert the default layout for a vertical slider. + * @option + * @type {boolean} + * @default false + */ + invertVertical: false, + + /** + * Milliseconds before the `changed.zf-slider` event is triggered after value change. + * @option + * @type {number} + * @default 500 + */ + changedDelay: 500, + + /** + * Basevalue for non-linear sliders + * @option + * @type {number} + * @default 5 + */ + nonLinearBase: 5, + + /** + * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting. + * @option + * @type {string} + * @default 'linear' + */ + positionValueFunction: 'linear' +}; + +function percent(frac, num) { + return frac / num; +} + +function absPosition($handle, dir, clickPos, param) { + return Math.abs($handle.position()[dir] + $handle[param]() / 2 - clickPos); +} + +function baseLog(base, value) { + return Math.log(value) / Math.log(base); +} + +/** + * Sticky module. + * @module foundation.sticky + * @requires foundation.util.triggers + * @requires foundation.util.mediaQuery + */ + +var Sticky = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Sticky, _Plugin); + + function Sticky() { + _classCallCheck(this, Sticky); + + return _possibleConstructorReturn(this, _getPrototypeOf(Sticky).apply(this, arguments)); + } + + _createClass(Sticky, [{ + key: "_setup", + + /** + * Creates a new instance of a sticky thing. + * @class + * @name Sticky + * @param {jQuery} element - jQuery object to make sticky. + * @param {Object} options - options object passed when creating the element programmatically. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Sticky.defaults, this.$element.data(), options); + this.className = 'Sticky'; // ie9 back compat + // Triggers init is idempotent, just need to make sure it is initialized + + Triggers.init($); + + this._init(); + } + /** + * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + MediaQuery._init(); + + var $parent = this.$element.parent('[data-sticky-container]'), + id = this.$element[0].id || GetYoDigits(6, 'sticky'), + _this = this; + + if ($parent.length) { + this.$container = $parent; + } else { + this.wasWrapped = true; + this.$element.wrap(this.options.container); + this.$container = this.$element.parent(); + } + + this.$container.addClass(this.options.containerClass); + this.$element.addClass(this.options.stickyClass).attr({ + 'data-resize': id, + 'data-mutate': id + }); + + if (this.options.anchor !== '') { + $('#' + _this.options.anchor).attr({ + 'data-mutate': id + }); + } + + this.scrollCount = this.options.checkEvery; + this.isStuck = false; + this.onLoadListener = onLoad($(window), function () { + //We calculate the container height to have correct values for anchor points offset calculation. + _this.containerHeight = _this.$element.css("display") == "none" ? 0 : _this.$element[0].getBoundingClientRect().height; + + _this.$container.css('height', _this.containerHeight); + + _this.elemHeight = _this.containerHeight; + + if (_this.options.anchor !== '') { + _this.$anchor = $('#' + _this.options.anchor); + } else { + _this._parsePoints(); + } + + _this._setSizes(function () { + var scroll = window.pageYOffset; + + _this._calc(false, scroll); //Unstick the element will ensure that proper classes are set. + + + if (!_this.isStuck) { + _this._removeSticky(scroll >= _this.topPoint ? false : true); + } + }); + + _this._events(id.split('-').reverse().join('-')); + }); + } + /** + * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on. + * @function + * @private + */ + + }, { + key: "_parsePoints", + value: function _parsePoints() { + var top = this.options.topAnchor == "" ? 1 : this.options.topAnchor, + btm = this.options.btmAnchor == "" ? document.documentElement.scrollHeight : this.options.btmAnchor, + pts = [top, btm], + breaks = {}; + + for (var i = 0, len = pts.length; i < len && pts[i]; i++) { + var pt; + + if (typeof pts[i] === 'number') { + pt = pts[i]; + } else { + var place = pts[i].split(':'), + anchor = $("#".concat(place[0])); + pt = anchor.offset().top; + + if (place[1] && place[1].toLowerCase() === 'bottom') { + pt += anchor[0].getBoundingClientRect().height; + } + } + + breaks[i] = pt; + } + + this.points = breaks; + return; + } + /** + * Adds event handlers for the scrolling element. + * @private + * @param {String} id - pseudo-random id for unique scroll event listener. + */ + + }, { + key: "_events", + value: function _events(id) { + var _this = this, + scrollListener = this.scrollListener = "scroll.zf.".concat(id); + + if (this.isOn) { + return; + } + + if (this.canStick) { + this.isOn = true; + $(window).off(scrollListener).on(scrollListener, function (e) { + if (_this.scrollCount === 0) { + _this.scrollCount = _this.options.checkEvery; + + _this._setSizes(function () { + _this._calc(false, window.pageYOffset); + }); + } else { + _this.scrollCount--; + + _this._calc(false, window.pageYOffset); + } + }); + } + + this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function (e, el) { + _this._eventsHandler(id); + }); + this.$element.on('mutateme.zf.trigger', function (e, el) { + _this._eventsHandler(id); + }); + + if (this.$anchor) { + this.$anchor.on('mutateme.zf.trigger', function (e, el) { + _this._eventsHandler(id); + }); + } + } + /** + * Handler for events. + * @private + * @param {String} id - pseudo-random id for unique scroll event listener. + */ + + }, { + key: "_eventsHandler", + value: function _eventsHandler(id) { + var _this = this, + scrollListener = this.scrollListener = "scroll.zf.".concat(id); + + _this._setSizes(function () { + _this._calc(false); + + if (_this.canStick) { + if (!_this.isOn) { + _this._events(id); + } + } else if (_this.isOn) { + _this._pauseListeners(scrollListener); + } + }); + } + /** + * Removes event handlers for scroll and change events on anchor. + * @fires Sticky#pause + * @param {String} scrollListener - unique, namespaced scroll listener attached to `window` + */ + + }, { + key: "_pauseListeners", + value: function _pauseListeners(scrollListener) { + this.isOn = false; + $(window).off(scrollListener); + /** + * Fires when the plugin is paused due to resize event shrinking the view. + * @event Sticky#pause + * @private + */ + + this.$element.trigger('pause.zf.sticky'); + } + /** + * Called on every `scroll` event and on `_init` + * fires functions based on booleans and cached values + * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints. + * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`. + */ + + }, { + key: "_calc", + value: function _calc(checkSizes, scroll) { + if (checkSizes) { + this._setSizes(); + } + + if (!this.canStick) { + if (this.isStuck) { + this._removeSticky(true); + } + + return false; + } + + if (!scroll) { + scroll = window.pageYOffset; + } + + if (scroll >= this.topPoint) { + if (scroll <= this.bottomPoint) { + if (!this.isStuck) { + this._setSticky(); + } + } else { + if (this.isStuck) { + this._removeSticky(false); + } + } + } else { + if (this.isStuck) { + this._removeSticky(true); + } + } + } + /** + * Causes the $element to become stuck. + * Adds `position: fixed;`, and helper classes. + * @fires Sticky#stuckto + * @function + * @private + */ + + }, { + key: "_setSticky", + value: function _setSticky() { + var _this = this, + stickTo = this.options.stickTo, + mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom', + notStuckTo = stickTo === 'top' ? 'bottom' : 'top', + css = {}; + + css[mrgn] = "".concat(this.options[mrgn], "em"); + css[stickTo] = 0; + css[notStuckTo] = 'auto'; + this.isStuck = true; + this.$element.removeClass("is-anchored is-at-".concat(notStuckTo)).addClass("is-stuck is-at-".concat(stickTo)).css(css) + /** + * Fires when the $element has become `position: fixed;` + * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top` + * @event Sticky#stuckto + */ + .trigger("sticky.zf.stuckto:".concat(stickTo)); + this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function () { + _this._setSizes(); + }); + } + /** + * Causes the $element to become unstuck. + * Removes `position: fixed;`, and helper classes. + * Adds other helper classes. + * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element. + * @fires Sticky#unstuckfrom + * @private + */ + + }, { + key: "_removeSticky", + value: function _removeSticky(isTop) { + var stickTo = this.options.stickTo, + stickToTop = stickTo === 'top', + css = {}, + anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight, + mrgn = stickToTop ? 'marginTop' : 'marginBottom', + topOrBottom = isTop ? 'top' : 'bottom'; + css[mrgn] = 0; + css['bottom'] = 'auto'; + + if (isTop) { + css['top'] = 0; + } else { + css['top'] = anchorPt; + } + + this.isStuck = false; + this.$element.removeClass("is-stuck is-at-".concat(stickTo)).addClass("is-anchored is-at-".concat(topOrBottom)).css(css) + /** + * Fires when the $element has become anchored. + * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom` + * @event Sticky#unstuckfrom + */ + .trigger("sticky.zf.unstuckfrom:".concat(topOrBottom)); + } + /** + * Sets the $element and $container sizes for plugin. + * Calls `_setBreakPoints`. + * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`. + * @private + */ + + }, { + key: "_setSizes", + value: function _setSizes(cb) { + this.canStick = MediaQuery.is(this.options.stickyOn); + + if (!this.canStick) { + if (cb && typeof cb === 'function') { + cb(); + } + } + + var newElemWidth = this.$container[0].getBoundingClientRect().width, + comp = window.getComputedStyle(this.$container[0]), + pdngl = parseInt(comp['padding-left'], 10), + pdngr = parseInt(comp['padding-right'], 10); + + if (this.$anchor && this.$anchor.length) { + this.anchorHeight = this.$anchor[0].getBoundingClientRect().height; + } else { + this._parsePoints(); + } + + this.$element.css({ + 'max-width': "".concat(newElemWidth - pdngl - pdngr, "px") + }); + var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight; + + if (this.$element.css("display") == "none") { + newContainerHeight = 0; + } + + this.containerHeight = newContainerHeight; + this.$container.css({ + height: newContainerHeight + }); + this.elemHeight = newContainerHeight; + + if (!this.isStuck) { + if (this.$element.hasClass('is-at-bottom')) { + var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight; + this.$element.css('top', anchorPt); + } + } + + this._setBreakPoints(newContainerHeight, function () { + if (cb && typeof cb === 'function') { + cb(); + } + }); + } + /** + * Sets the upper and lower breakpoints for the element to become sticky/unsticky. + * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`. + * @param {Function} cb - optional callback function to be called on completion. + * @private + */ + + }, { + key: "_setBreakPoints", + value: function _setBreakPoints(elemHeight, cb) { + if (!this.canStick) { + if (cb && typeof cb === 'function') { + cb(); + } else { + return false; + } + } + + var mTop = emCalc(this.options.marginTop), + mBtm = emCalc(this.options.marginBottom), + topPoint = this.points ? this.points[0] : this.$anchor.offset().top, + bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight, + // topPoint = this.$anchor.offset().top || this.points[0], + // bottomPoint = topPoint + this.anchorHeight || this.points[1], + winHeight = window.innerHeight; + + if (this.options.stickTo === 'top') { + topPoint -= mTop; + bottomPoint -= elemHeight + mTop; + } else if (this.options.stickTo === 'bottom') { + topPoint -= winHeight - (elemHeight + mBtm); + bottomPoint -= winHeight - mBtm; + } + + this.topPoint = topPoint; + this.bottomPoint = bottomPoint; + + if (cb && typeof cb === 'function') { + cb(); + } + } + /** + * Destroys the current sticky element. + * Resets the element to the top position first. + * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this._removeSticky(true); + + this.$element.removeClass("".concat(this.options.stickyClass, " is-anchored is-at-top")).css({ + height: '', + top: '', + bottom: '', + 'max-width': '' + }).off('resizeme.zf.trigger').off('mutateme.zf.trigger'); + + if (this.$anchor && this.$anchor.length) { + this.$anchor.off('change.zf.sticky'); + } + + if (this.scrollListener) $(window).off(this.scrollListener); + if (this.onLoadListener) $(window).off(this.onLoadListener); + + if (this.wasWrapped) { + this.$element.unwrap(); + } else { + this.$container.removeClass(this.options.containerClass).css({ + height: '' + }); + } + } + }]); + + return Sticky; +}(Plugin); + +Sticky.defaults = { + /** + * Customizable container template. Add your own classes for styling and sizing. + * @option + * @type {string} + * @default '<div data-sticky-container></div>' + */ + container: '
    ', + + /** + * Location in the view the element sticks to. Can be `'top'` or `'bottom'`. + * @option + * @type {string} + * @default 'top' + */ + stickTo: 'top', + + /** + * If anchored to a single element, the id of that element. + * @option + * @type {string} + * @default '' + */ + anchor: '', + + /** + * If using more than one element as anchor points, the id of the top anchor. + * @option + * @type {string} + * @default '' + */ + topAnchor: '', + + /** + * If using more than one element as anchor points, the id of the bottom anchor. + * @option + * @type {string} + * @default '' + */ + btmAnchor: '', + + /** + * Margin, in `em`'s to apply to the top of the element when it becomes sticky. + * @option + * @type {number} + * @default 1 + */ + marginTop: 1, + + /** + * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky. + * @option + * @type {number} + * @default 1 + */ + marginBottom: 1, + + /** + * Breakpoint string that is the minimum screen size an element should become sticky. + * @option + * @type {string} + * @default 'medium' + */ + stickyOn: 'medium', + + /** + * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`. + * @option + * @type {string} + * @default 'sticky' + */ + stickyClass: 'sticky', + + /** + * Class applied to sticky container. Foundation defaults to `sticky-container`. + * @option + * @type {string} + * @default 'sticky-container' + */ + containerClass: 'sticky-container', + + /** + * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll. + * @option + * @type {number} + * @default -1 + */ + checkEvery: -1 +}; +/** + * Helper function to calculate em values + * @param Number {em} - number of em's to calculate into pixels + */ + +function emCalc(em) { + return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em; +} + +/** + * Tabs module. + * @module foundation.tabs + * @requires foundation.util.keyboard + * @requires foundation.util.imageLoader if tabs contain images + */ + +var Tabs = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Tabs, _Plugin); + + function Tabs() { + _classCallCheck(this, Tabs); + + return _possibleConstructorReturn(this, _getPrototypeOf(Tabs).apply(this, arguments)); + } + + _createClass(Tabs, [{ + key: "_setup", + + /** + * Creates a new instance of tabs. + * @class + * @name Tabs + * @fires Tabs#init + * @param {jQuery} element - jQuery object to make into tabs. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Tabs.defaults, this.$element.data(), options); + this.className = 'Tabs'; // ie9 back compat + + this._init(); + + Keyboard.register('Tabs', { + 'ENTER': 'open', + 'SPACE': 'open', + 'ARROW_RIGHT': 'next', + 'ARROW_UP': 'previous', + 'ARROW_DOWN': 'next', + 'ARROW_LEFT': 'previous' // 'TAB': 'next', + // 'SHIFT_TAB': 'previous' + + }); + } + /** + * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab. + * @private + */ + + }, { + key: "_init", + value: function _init() { + var _this2 = this; + + var _this = this; + + this._isInitializing = true; + this.$element.attr({ + 'role': 'tablist' + }); + this.$tabTitles = this.$element.find(".".concat(this.options.linkClass)); + this.$tabContent = $("[data-tabs-content=\"".concat(this.$element[0].id, "\"]")); + this.$tabTitles.each(function () { + var $elem = $(this), + $link = $elem.find('a'), + isActive = $elem.hasClass("".concat(_this.options.linkActiveClass)), + hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1), + linkId = $link[0].id ? $link[0].id : "".concat(hash, "-label"), + $tabContent = $("#".concat(hash)); + $elem.attr({ + 'role': 'presentation' + }); + $link.attr({ + 'role': 'tab', + 'aria-controls': hash, + 'aria-selected': isActive, + 'id': linkId, + 'tabindex': isActive ? '0' : '-1' + }); + $tabContent.attr({ + 'role': 'tabpanel', + 'aria-labelledby': linkId + }); // Save up the initial hash to return to it later when going back in history + + if (isActive) { + _this._initialAnchor = "#".concat(hash); + } + + if (!isActive) { + $tabContent.attr('aria-hidden', 'true'); + } + + if (isActive && _this.options.autoFocus) { + _this.onLoadListener = onLoad($(window), function () { + $('html, body').animate({ + scrollTop: $elem.offset().top + }, _this.options.deepLinkSmudgeDelay, function () { + $link.focus(); + }); + }); + } + }); + + if (this.options.matchHeight) { + var $images = this.$tabContent.find('img'); + + if ($images.length) { + onImagesLoaded($images, this._setHeight.bind(this)); + } else { + this._setHeight(); + } + } // Current context-bound function to open tabs on page load or history hashchange + + + this._checkDeepLink = function () { + var anchor = window.location.hash; + + if (!anchor.length) { + // If we are still initializing and there is no anchor, then there is nothing to do + if (_this2._isInitializing) return; // Otherwise, move to the initial anchor + + if (_this2._initialAnchor) anchor = _this2._initialAnchor; + } + + var $anchor = anchor && $(anchor); + + var $link = anchor && _this2.$element.find('[href$="' + anchor + '"]'); // Whether the anchor element that has been found is part of this element + + + var isOwnAnchor = !!($anchor.length && $link.length); // If there is an anchor for the hash, select it + + if ($anchor && $anchor.length && $link && $link.length) { + _this2.selectTab($anchor, true); + } // Otherwise, collapse everything + else { + _this2._collapse(); + } + + if (isOwnAnchor) { + // Roll up a little to show the titles + if (_this2.options.deepLinkSmudge) { + var offset = _this2.$element.offset(); + + $('html, body').animate({ + scrollTop: offset.top + }, _this2.options.deepLinkSmudgeDelay); + } + /** + * Fires when the plugin has deeplinked at pageload + * @event Tabs#deeplink + */ + + + _this2.$element.trigger('deeplink.zf.tabs', [$link, $anchor]); + } + }; //use browser to open a tab, if it exists in this tabset + + + if (this.options.deepLink) { + this._checkDeepLink(); + } + + this._events(); + + this._isInitializing = false; + } + /** + * Adds event handlers for items within the tabs. + * @private + */ + + }, { + key: "_events", + value: function _events() { + this._addKeyHandler(); + + this._addClickHandler(); + + this._setHeightMqHandler = null; + + if (this.options.matchHeight) { + this._setHeightMqHandler = this._setHeight.bind(this); + $(window).on('changed.zf.mediaquery', this._setHeightMqHandler); + } + + if (this.options.deepLink) { + $(window).on('hashchange', this._checkDeepLink); + } + } + /** + * Adds click handlers for items within the tabs. + * @private + */ + + }, { + key: "_addClickHandler", + value: function _addClickHandler() { + var _this = this; + + this.$element.off('click.zf.tabs').on('click.zf.tabs', ".".concat(this.options.linkClass), function (e) { + e.preventDefault(); + e.stopPropagation(); + + _this._handleTabChange($(this)); + }); + } + /** + * Adds keyboard event handlers for items within the tabs. + * @private + */ + + }, { + key: "_addKeyHandler", + value: function _addKeyHandler() { + var _this = this; + + this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) { + if (e.which === 9) return; + var $element = $(this), + $elements = $element.parent('ul').children('li'), + $prevElement, + $nextElement; + $elements.each(function (i) { + if ($(this).is($element)) { + if (_this.options.wrapOnKeys) { + $prevElement = i === 0 ? $elements.last() : $elements.eq(i - 1); + $nextElement = i === $elements.length - 1 ? $elements.first() : $elements.eq(i + 1); + } else { + $prevElement = $elements.eq(Math.max(0, i - 1)); + $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)); + } + + return; + } + }); // handle keyboard event with keyboard util + + Keyboard.handleKey(e, 'Tabs', { + open: function open() { + $element.find('[role="tab"]').focus(); + + _this._handleTabChange($element); + }, + previous: function previous() { + $prevElement.find('[role="tab"]').focus(); + + _this._handleTabChange($prevElement); + }, + next: function next() { + $nextElement.find('[role="tab"]').focus(); + + _this._handleTabChange($nextElement); + }, + handled: function handled() { + e.stopPropagation(); + e.preventDefault(); + } + }); + }); + } + /** + * Opens the tab `$targetContent` defined by `$target`. Collapses active tab. + * @param {jQuery} $target - Tab to open. + * @param {boolean} historyHandled - browser has already handled a history update + * @fires Tabs#change + * @function + */ + + }, { + key: "_handleTabChange", + value: function _handleTabChange($target, historyHandled) { + // With `activeCollapse`, if the target is the active Tab, collapse it. + if ($target.hasClass("".concat(this.options.linkActiveClass))) { + if (this.options.activeCollapse) { + this._collapse(); + } + + return; + } + + var $oldTab = this.$element.find(".".concat(this.options.linkClass, ".").concat(this.options.linkActiveClass)), + $tabLink = $target.find('[role="tab"]'), + target = $tabLink.attr('data-tabs-target'), + anchor = target && target.length ? "#".concat(target) : $tabLink[0].hash, + $targetContent = this.$tabContent.find(anchor); //close old tab + + this._collapseTab($oldTab); //open new tab + + + this._openTab($target); //either replace or update browser history + + + if (this.options.deepLink && !historyHandled) { + if (this.options.updateHistory) { + history.pushState({}, '', anchor); + } else { + history.replaceState({}, '', anchor); + } + } + /** + * Fires when the plugin has successfully changed tabs. + * @event Tabs#change + */ + + + this.$element.trigger('change.zf.tabs', [$target, $targetContent]); //fire to children a mutation event + + $targetContent.find("[data-mutate]").trigger("mutateme.zf.trigger"); + } + /** + * Opens the tab `$targetContent` defined by `$target`. + * @param {jQuery} $target - Tab to open. + * @function + */ + + }, { + key: "_openTab", + value: function _openTab($target) { + var $tabLink = $target.find('[role="tab"]'), + hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1), + $targetContent = this.$tabContent.find("#".concat(hash)); + $target.addClass("".concat(this.options.linkActiveClass)); + $tabLink.attr({ + 'aria-selected': 'true', + 'tabindex': '0' + }); + $targetContent.addClass("".concat(this.options.panelActiveClass)).removeAttr('aria-hidden'); + } + /** + * Collapses `$targetContent` defined by `$target`. + * @param {jQuery} $target - Tab to collapse. + * @function + */ + + }, { + key: "_collapseTab", + value: function _collapseTab($target) { + var $target_anchor = $target.removeClass("".concat(this.options.linkActiveClass)).find('[role="tab"]').attr({ + 'aria-selected': 'false', + 'tabindex': -1 + }); + $("#".concat($target_anchor.attr('aria-controls'))).removeClass("".concat(this.options.panelActiveClass)).attr({ + 'aria-hidden': 'true' + }); + } + /** + * Collapses the active Tab. + * @fires Tabs#collapse + * @function + */ + + }, { + key: "_collapse", + value: function _collapse() { + var $activeTab = this.$element.find(".".concat(this.options.linkClass, ".").concat(this.options.linkActiveClass)); + + if ($activeTab.length) { + this._collapseTab($activeTab); + /** + * Fires when the plugin has successfully collapsed tabs. + * @event Tabs#collapse + */ + + + this.$element.trigger('collapse.zf.tabs', [$activeTab]); + } + } + /** + * Public method for selecting a content pane to display. + * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display. + * @param {boolean} historyHandled - browser has already handled a history update + * @function + */ + + }, { + key: "selectTab", + value: function selectTab(elem, historyHandled) { + var idStr; + + if (_typeof(elem) === 'object') { + idStr = elem[0].id; + } else { + idStr = elem; + } + + if (idStr.indexOf('#') < 0) { + idStr = "#".concat(idStr); + } + + var $target = this.$tabTitles.has("[href$=\"".concat(idStr, "\"]")); + + this._handleTabChange($target, historyHandled); + } + }, { + key: "_setHeight", + + /** + * Sets the height of each panel to the height of the tallest panel. + * If enabled in options, gets called on media query change. + * If loading content via external source, can be called directly or with _reflow. + * If enabled with `data-match-height="true"`, tabs sets to equal height + * @function + * @private + */ + value: function _setHeight() { + var max = 0, + _this = this; // Lock down the `this` value for the root tabs object + + + this.$tabContent.find(".".concat(this.options.panelClass)).css('height', '').each(function () { + var panel = $(this), + isActive = panel.hasClass("".concat(_this.options.panelActiveClass)); // get the options from the parent instead of trying to get them from the child + + if (!isActive) { + panel.css({ + 'visibility': 'hidden', + 'display': 'block' + }); + } + + var temp = this.getBoundingClientRect().height; + + if (!isActive) { + panel.css({ + 'visibility': '', + 'display': '' + }); + } + + max = temp > max ? temp : max; + }).css('height', "".concat(max, "px")); + } + /** + * Destroys an instance of tabs. + * @fires Tabs#destroyed + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.find(".".concat(this.options.linkClass)).off('.zf.tabs').hide().end().find(".".concat(this.options.panelClass)).hide(); + + if (this.options.matchHeight) { + if (this._setHeightMqHandler != null) { + $(window).off('changed.zf.mediaquery', this._setHeightMqHandler); + } + } + + if (this.options.deepLink) { + $(window).off('hashchange', this._checkDeepLink); + } + + if (this.onLoadListener) { + $(window).off(this.onLoadListener); + } + } + }]); + + return Tabs; +}(Plugin); + +Tabs.defaults = { + /** + * Link the location hash to the active pane. + * Set the location hash when the active pane changes, and open the corresponding pane when the location changes. + * @option + * @type {boolean} + * @default false + */ + deepLink: false, + + /** + * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible + * @option + * @type {boolean} + * @default false + */ + deepLinkSmudge: false, + + /** + * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment + * @option + * @type {number} + * @default 300 + */ + deepLinkSmudgeDelay: 300, + + /** + * If `deepLink` is enabled, update the browser history with the open tab + * @option + * @type {boolean} + * @default false + */ + updateHistory: false, + + /** + * Allows the window to scroll to content of active pane on load. + * Not recommended if more than one tab panel per page. + * @option + * @type {boolean} + * @default false + */ + autoFocus: false, + + /** + * Allows keyboard input to 'wrap' around the tab links. + * @option + * @type {boolean} + * @default true + */ + wrapOnKeys: true, + + /** + * Allows the tab content panes to match heights if set to true. + * @option + * @type {boolean} + * @default false + */ + matchHeight: false, + + /** + * Allows active tabs to collapse when clicked. + * @option + * @type {boolean} + * @default false + */ + activeCollapse: false, + + /** + * Class applied to `li`'s in tab link list. + * @option + * @type {string} + * @default 'tabs-title' + */ + linkClass: 'tabs-title', + + /** + * Class applied to the active `li` in tab link list. + * @option + * @type {string} + * @default 'is-active' + */ + linkActiveClass: 'is-active', + + /** + * Class applied to the content containers. + * @option + * @type {string} + * @default 'tabs-panel' + */ + panelClass: 'tabs-panel', + + /** + * Class applied to the active content container. + * @option + * @type {string} + * @default 'is-active' + */ + panelActiveClass: 'is-active' +}; + +/** + * Toggler module. + * @module foundation.toggler + * @requires foundation.util.motion + * @requires foundation.util.triggers + */ + +var Toggler = +/*#__PURE__*/ +function (_Plugin) { + _inherits(Toggler, _Plugin); + + function Toggler() { + _classCallCheck(this, Toggler); + + return _possibleConstructorReturn(this, _getPrototypeOf(Toggler).apply(this, arguments)); + } + + _createClass(Toggler, [{ + key: "_setup", + + /** + * Creates a new instance of Toggler. + * @class + * @name Toggler + * @fires Toggler#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Toggler.defaults, element.data(), options); + this.className = ''; + this.className = 'Toggler'; // ie9 back compat + // Triggers init is idempotent, just need to make sure it is initialized + + Triggers.init($); + + this._init(); + + this._events(); + } + /** + * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate. + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + var input; // Parse animation classes if they were set + + if (this.options.animate) { + input = this.options.animate.split(' '); + this.animationIn = input[0]; + this.animationOut = input[1] || null; + } // Otherwise, parse toggle class + else { + input = this.$element.data('toggler'); // Allow for a . at the beginning of the string + + this.className = input[0] === '.' ? input.slice(1) : input; + } // Add ARIA attributes to triggers: + + + var id = this.$element[0].id, + $triggers = $("[data-open~=\"".concat(id, "\"], [data-close~=\"").concat(id, "\"], [data-toggle~=\"").concat(id, "\"]")); // - aria-expanded: according to the element visibility. + + $triggers.attr('aria-expanded', !this.$element.is(':hidden')); // - aria-controls: adding the element id to it if not already in it. + + $triggers.each(function (index, trigger) { + var $trigger = $(trigger); + var controls = $trigger.attr('aria-controls') || ''; + var containsId = new RegExp("\\b".concat(RegExpEscape(id), "\\b")).test(controls); + if (!containsId) $trigger.attr('aria-controls', controls ? "".concat(controls, " ").concat(id) : id); + }); + } + /** + * Initializes events for the toggle trigger. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this)); + } + /** + * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was "on" or "off". + * @function + * @fires Toggler#on + * @fires Toggler#off + */ + + }, { + key: "toggle", + value: function toggle() { + this[this.options.animate ? '_toggleAnimate' : '_toggleClass'](); + } + }, { + key: "_toggleClass", + value: function _toggleClass() { + this.$element.toggleClass(this.className); + var isOn = this.$element.hasClass(this.className); + + if (isOn) { + /** + * Fires if the target element has the class after a toggle. + * @event Toggler#on + */ + this.$element.trigger('on.zf.toggler'); + } else { + /** + * Fires if the target element does not have the class after a toggle. + * @event Toggler#off + */ + this.$element.trigger('off.zf.toggler'); + } + + this._updateARIA(isOn); + + this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger'); + } + }, { + key: "_toggleAnimate", + value: function _toggleAnimate() { + var _this = this; + + if (this.$element.is(':hidden')) { + Motion.animateIn(this.$element, this.animationIn, function () { + _this._updateARIA(true); + + this.trigger('on.zf.toggler'); + this.find('[data-mutate]').trigger('mutateme.zf.trigger'); + }); + } else { + Motion.animateOut(this.$element, this.animationOut, function () { + _this._updateARIA(false); + + this.trigger('off.zf.toggler'); + this.find('[data-mutate]').trigger('mutateme.zf.trigger'); + }); + } + } + }, { + key: "_updateARIA", + value: function _updateARIA(isOn) { + var id = this.$element[0].id; + $("[data-open=\"".concat(id, "\"], [data-close=\"").concat(id, "\"], [data-toggle=\"").concat(id, "\"]")).attr({ + 'aria-expanded': isOn ? true : false + }); + } + /** + * Destroys the instance of Toggler on the element. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.off('.zf.toggler'); + } + }]); + + return Toggler; +}(Plugin); + +Toggler.defaults = { + /** + * Tells the plugin if the element should animated when toggled. + * @option + * @type {boolean} + * @default false + */ + animate: false +}; + +/** + * Tooltip module. + * @module foundation.tooltip + * @requires foundation.util.box + * @requires foundation.util.mediaQuery + * @requires foundation.util.triggers + */ + +var Tooltip = +/*#__PURE__*/ +function (_Positionable) { + _inherits(Tooltip, _Positionable); + + function Tooltip() { + _classCallCheck(this, Tooltip); + + return _possibleConstructorReturn(this, _getPrototypeOf(Tooltip).apply(this, arguments)); + } + + _createClass(Tooltip, [{ + key: "_setup", + + /** + * Creates a new instance of a Tooltip. + * @class + * @name Tooltip + * @fires Tooltip#init + * @param {jQuery} element - jQuery object to attach a tooltip to. + * @param {Object} options - object to extend the default configuration. + */ + value: function _setup(element, options) { + this.$element = element; + this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options); + this.className = 'Tooltip'; // ie9 back compat + + this.isActive = false; + this.isClick = false; // Triggers init is idempotent, just need to make sure it is initialized + + Triggers.init($); + + this._init(); + } + /** + * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor. + * @private + */ + + }, { + key: "_init", + value: function _init() { + MediaQuery._init(); + + var elemId = this.$element.attr('aria-describedby') || GetYoDigits(6, 'tooltip'); + this.options.tipText = this.options.tipText || this.$element.attr('title'); + this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId); + + if (this.options.allowHtml) { + this.template.appendTo(document.body).html(this.options.tipText).hide(); + } else { + this.template.appendTo(document.body).text(this.options.tipText).hide(); + } + + this.$element.attr({ + 'title': '', + 'aria-describedby': elemId, + 'data-yeti-box': elemId, + 'data-toggle': elemId, + 'data-resize': elemId + }).addClass(this.options.triggerClass); + + _get(_getPrototypeOf(Tooltip.prototype), "_init", this).call(this); + + this._events(); + } + }, { + key: "_getDefaultPosition", + value: function _getDefaultPosition() { + // handle legacy classnames + var position = this.$element[0].className.match(/\b(top|left|right|bottom)\b/g); + return position ? position[0] : 'top'; + } + }, { + key: "_getDefaultAlignment", + value: function _getDefaultAlignment() { + return 'center'; + } + }, { + key: "_getHOffset", + value: function _getHOffset() { + if (this.position === 'left' || this.position === 'right') { + return this.options.hOffset + this.options.tooltipWidth; + } else { + return this.options.hOffset; + } + } + }, { + key: "_getVOffset", + value: function _getVOffset() { + if (this.position === 'top' || this.position === 'bottom') { + return this.options.vOffset + this.options.tooltipHeight; + } else { + return this.options.vOffset; + } + } + /** + * builds the tooltip element, adds attributes, and returns the template. + * @private + */ + + }, { + key: "_buildTemplate", + value: function _buildTemplate(id) { + var templateClasses = "".concat(this.options.tooltipClass, " ").concat(this.options.templateClasses).trim(); + var $template = $('
    ').addClass(templateClasses).attr({ + 'role': 'tooltip', + 'aria-hidden': true, + 'data-is-active': false, + 'data-is-focus': false, + 'id': id + }); + return $template; + } + /** + * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding. + * if the tooltip is larger than the screen width, default to full width - any user selected margin + * @private + */ + + }, { + key: "_setPosition", + value: function _setPosition() { + _get(_getPrototypeOf(Tooltip.prototype), "_setPosition", this).call(this, this.$element, this.template); + } + /** + * reveals the tooltip, and fires an event to close any other open tooltips on the page + * @fires Tooltip#closeme + * @fires Tooltip#show + * @function + */ + + }, { + key: "show", + value: function show() { + if (this.options.showOn !== 'all' && !MediaQuery.is(this.options.showOn)) { + // console.error('The screen is too small to display this tooltip'); + return false; + } + + var _this = this; + + this.template.css('visibility', 'hidden').show(); + + this._setPosition(); + + this.template.removeClass('top bottom left right').addClass(this.position); + this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment); + /** + * Fires to close all other open tooltips on the page + * @event Closeme#tooltip + */ + + this.$element.trigger('closeme.zf.tooltip', this.template.attr('id')); + this.template.attr({ + 'data-is-active': true, + 'aria-hidden': false + }); + _this.isActive = true; // console.log(this.template); + + this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function () {//maybe do stuff? + }); + /** + * Fires when the tooltip is shown + * @event Tooltip#show + */ + + this.$element.trigger('show.zf.tooltip'); + } + /** + * Hides the current tooltip, and resets the positioning class if it was changed due to collision + * @fires Tooltip#hide + * @function + */ + + }, { + key: "hide", + value: function hide() { + // console.log('hiding', this.$element.data('yeti-box')); + var _this = this; + + this.template.stop().attr({ + 'aria-hidden': true, + 'data-is-active': false + }).fadeOut(this.options.fadeOutDuration, function () { + _this.isActive = false; + _this.isClick = false; + }); + /** + * fires when the tooltip is hidden + * @event Tooltip#hide + */ + + this.$element.trigger('hide.zf.tooltip'); + } + /** + * adds event listeners for the tooltip and its anchor + * TODO combine some of the listeners like focus and mouseenter, etc. + * @private + */ + + }, { + key: "_events", + value: function _events() { + var _this = this; + + var $template = this.template; + var isFocus = false; + + if (!this.options.disableHover) { + this.$element.on('mouseenter.zf.tooltip', function (e) { + if (!_this.isActive) { + _this.timeout = setTimeout(function () { + _this.show(); + }, _this.options.hoverDelay); + } + }).on('mouseleave.zf.tooltip', function (e) { + clearTimeout(_this.timeout); + + if (!isFocus || _this.isClick && !_this.options.clickOpen) { + _this.hide(); + } + }); + } + + if (this.options.clickOpen) { + this.$element.on('mousedown.zf.tooltip', function (e) { + e.stopImmediatePropagation(); + + if (_this.isClick) ; else { + _this.isClick = true; + + if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) { + _this.show(); + } + } + }); + } else { + this.$element.on('mousedown.zf.tooltip', function (e) { + e.stopImmediatePropagation(); + _this.isClick = true; + }); + } + + if (!this.options.disableForTouch) { + this.$element.on('tap.zf.tooltip touchend.zf.tooltip', function (e) { + _this.isActive ? _this.hide() : _this.show(); + }); + } + + this.$element.on({ + // 'toggle.zf.trigger': this.toggle.bind(this), + // 'close.zf.trigger': this.hide.bind(this) + 'close.zf.trigger': this.hide.bind(this) + }); + this.$element.on('focus.zf.tooltip', function (e) { + isFocus = true; + + if (_this.isClick) { + // If we're not showing open on clicks, we need to pretend a click-launched focus isn't + // a real focus, otherwise on hover and come back we get bad behavior + if (!_this.options.clickOpen) { + isFocus = false; + } + + return false; + } else { + _this.show(); + } + }).on('focusout.zf.tooltip', function (e) { + isFocus = false; + _this.isClick = false; + + _this.hide(); + }).on('resizeme.zf.trigger', function () { + if (_this.isActive) { + _this._setPosition(); + } + }); + } + /** + * adds a toggle method, in addition to the static show() & hide() functions + * @function + */ + + }, { + key: "toggle", + value: function toggle() { + if (this.isActive) { + this.hide(); + } else { + this.show(); + } + } + /** + * Destroys an instance of tooltip, removes template element from the view. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tooltip').removeClass(this.options.triggerClass).removeClass('top right left bottom').removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box'); + this.template.remove(); + } + }]); + + return Tooltip; +}(Positionable); + +Tooltip.defaults = { + disableForTouch: false, + + /** + * Time, in ms, before a tooltip should open on hover. + * @option + * @type {number} + * @default 200 + */ + hoverDelay: 200, + + /** + * Time, in ms, a tooltip should take to fade into view. + * @option + * @type {number} + * @default 150 + */ + fadeInDuration: 150, + + /** + * Time, in ms, a tooltip should take to fade out of view. + * @option + * @type {number} + * @default 150 + */ + fadeOutDuration: 150, + + /** + * Disables hover events from opening the tooltip if set to true + * @option + * @type {boolean} + * @default false + */ + disableHover: false, + + /** + * Optional addtional classes to apply to the tooltip template on init. + * @option + * @type {string} + * @default '' + */ + templateClasses: '', + + /** + * Non-optional class added to tooltip templates. Foundation default is 'tooltip'. + * @option + * @type {string} + * @default 'tooltip' + */ + tooltipClass: 'tooltip', + + /** + * Class applied to the tooltip anchor element. + * @option + * @type {string} + * @default 'has-tip' + */ + triggerClass: 'has-tip', + + /** + * Minimum breakpoint size at which to open the tooltip. + * @option + * @type {string} + * @default 'small' + */ + showOn: 'small', + + /** + * Custom template to be used to generate markup for tooltip. + * @option + * @type {string} + * @default '' + */ + template: '', + + /** + * Text displayed in the tooltip template on open. + * @option + * @type {string} + * @default '' + */ + tipText: '', + touchCloseText: 'Tap to close.', + + /** + * Allows the tooltip to remain open if triggered with a click or touch event. + * @option + * @type {boolean} + * @default true + */ + clickOpen: true, + + /** + * Position of tooltip. Can be left, right, bottom, top, or auto. + * @option + * @type {string} + * @default 'auto' + */ + position: 'auto', + + /** + * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto. + * @option + * @type {string} + * @default 'auto' + */ + alignment: 'auto', + + /** + * Allow overlap of container/window. If false, tooltip will first try to + * position as defined by data-position and data-alignment, but reposition if + * it would cause an overflow. @option + * @type {boolean} + * @default false + */ + allowOverlap: false, + + /** + * Allow overlap of only the bottom of the container. This is the most common + * behavior for dropdowns, allowing the dropdown to extend the bottom of the + * screen but not otherwise influence or break out of the container. + * Less common for tooltips. + * @option + * @type {boolean} + * @default false + */ + allowBottomOverlap: false, + + /** + * Distance, in pixels, the template should push away from the anchor on the Y axis. + * @option + * @type {number} + * @default 0 + */ + vOffset: 0, + + /** + * Distance, in pixels, the template should push away from the anchor on the X axis + * @option + * @type {number} + * @default 0 + */ + hOffset: 0, + + /** + * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip + * @option + * @type {number} + * @default 14 + */ + tooltipHeight: 14, + + /** + * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip + * @option + * @type {number} + * @default 12 + */ + tooltipWidth: 12, + + /** + * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips, + * allowing HTML may open yourself up to XSS attacks. + * @option + * @type {boolean} + * @default false + */ + allowHtml: false +}; + +var MenuPlugins$1 = { + tabs: { + cssClass: 'tabs', + plugin: Tabs + }, + accordion: { + cssClass: 'accordion', + plugin: Accordion + } +}; +/** + * ResponsiveAccordionTabs module. + * @module foundation.responsiveAccordionTabs + * @requires foundation.util.motion + * @requires foundation.accordion + * @requires foundation.tabs + */ + +var ResponsiveAccordionTabs = +/*#__PURE__*/ +function (_Plugin) { + _inherits(ResponsiveAccordionTabs, _Plugin); + + function ResponsiveAccordionTabs() { + _classCallCheck(this, ResponsiveAccordionTabs); + + return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveAccordionTabs).apply(this, arguments)); + } + + _createClass(ResponsiveAccordionTabs, [{ + key: "_setup", + + /** + * Creates a new instance of a responsive accordion tabs. + * @class + * @name ResponsiveAccordionTabs + * @fires ResponsiveAccordionTabs#init + * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs. + * @param {Object} options - Overrides to the default plugin settings. + */ + value: function _setup(element, options) { + this.$element = $(element); + this.options = $.extend({}, this.$element.data(), options); + this.rules = this.$element.data('responsive-accordion-tabs'); + this.currentMq = null; + this.currentPlugin = null; + this.className = 'ResponsiveAccordionTabs'; // ie9 back compat + + if (!this.$element.attr('id')) { + this.$element.attr('id', GetYoDigits(6, 'responsiveaccordiontabs')); + } + + this._init(); + + this._events(); + } + /** + * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element. + * @function + * @private + */ + + }, { + key: "_init", + value: function _init() { + MediaQuery._init(); // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules + + + if (typeof this.rules === 'string') { + var rulesTree = {}; // Parse rules from "classes" pulled from data attribute + + var rules = this.rules.split(' '); // Iterate through every rule found + + for (var i = 0; i < rules.length; i++) { + var rule = rules[i].split('-'); + var ruleSize = rule.length > 1 ? rule[0] : 'small'; + var rulePlugin = rule.length > 1 ? rule[1] : rule[0]; + + if (MenuPlugins$1[rulePlugin] !== null) { + rulesTree[ruleSize] = MenuPlugins$1[rulePlugin]; + } + } + + this.rules = rulesTree; + } + + this._getAllOptions(); + + if (!$.isEmptyObject(this.rules)) { + this._checkMediaQueries(); + } + } + }, { + key: "_getAllOptions", + value: function _getAllOptions() { + //get all defaults and options + var _this = this; + + _this.allOptions = {}; + + for (var key in MenuPlugins$1) { + if (MenuPlugins$1.hasOwnProperty(key)) { + var obj = MenuPlugins$1[key]; + + try { + var dummyPlugin = $('
      '); + var tmpPlugin = new obj.plugin(dummyPlugin, _this.options); + + for (var keyKey in tmpPlugin.options) { + if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') { + var objObj = tmpPlugin.options[keyKey]; + _this.allOptions[keyKey] = objObj; + } + } + + tmpPlugin.destroy(); + } catch (e) {} + } + } + } + /** + * Initializes events for the Menu. + * @function + * @private + */ + + }, { + key: "_events", + value: function _events() { + this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this); + $(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler); + } + /** + * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out. + * @function + * @private + */ + + }, { + key: "_checkMediaQueries", + value: function _checkMediaQueries() { + var matchedMq, + _this = this; // Iterate through each rule and find the last matching rule + + + $.each(this.rules, function (key) { + if (MediaQuery.atLeast(key)) { + matchedMq = key; + } + }); // No match? No dice + + if (!matchedMq) return; // Plugin already initialized? We good + + if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; // Remove existing plugin-specific CSS classes + + $.each(MenuPlugins$1, function (key, value) { + _this.$element.removeClass(value.cssClass); + }); // Add the CSS class for the new plugin + + this.$element.addClass(this.rules[matchedMq].cssClass); // Create an instance of the new plugin + + if (this.currentPlugin) { + //don't know why but on nested elements data zfPlugin get's lost + if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin', this.storezfData); + this.currentPlugin.destroy(); + } + + this._handleMarkup(this.rules[matchedMq].cssClass); + + this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {}); + this.storezfData = this.currentPlugin.$element.data('zfPlugin'); + } + }, { + key: "_handleMarkup", + value: function _handleMarkup(toSet) { + var _this = this, + fromString = 'accordion'; + + var $panels = $('[data-tabs-content=' + this.$element.attr('id') + ']'); + if ($panels.length) fromString = 'tabs'; + + if (fromString === toSet) { + return; + } + var tabsTitle = _this.allOptions.linkClass ? _this.allOptions.linkClass : 'tabs-title'; + var tabsPanel = _this.allOptions.panelClass ? _this.allOptions.panelClass : 'tabs-panel'; + this.$element.removeAttr('role'); + var $liHeads = this.$element.children('.' + tabsTitle + ',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item'); + var $liHeadsA = $liHeads.children('a').removeClass('accordion-title'); + + if (fromString === 'tabs') { + $panels = $panels.children('.' + tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby'); + $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected'); + } else { + $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content'); + } + $panels.css({ + display: '', + visibility: '' + }); + $liHeads.css({ + display: '', + visibility: '' + }); + + if (toSet === 'accordion') { + $panels.each(function (key, value) { + $(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content', '').removeClass('is-active').css({ + height: '' + }); + $('[data-tabs-content=' + _this.$element.attr('id') + ']').after('
      ').detach(); + $liHeads.addClass('accordion-item').attr('data-accordion-item', ''); + $liHeadsA.addClass('accordion-title'); + }); + } else if (toSet === 'tabs') { + var $tabsContent = $('[data-tabs-content=' + _this.$element.attr('id') + ']'); + var $placeholder = $('#tabs-placeholder-' + _this.$element.attr('id')); + + if ($placeholder.length) { + $tabsContent = $('
      ').insertAfter($placeholder).attr('data-tabs-content', _this.$element.attr('id')); + $placeholder.remove(); + } else { + $tabsContent = $('
      ').insertAfter(_this.$element).attr('data-tabs-content', _this.$element.attr('id')); + } + $panels.each(function (key, value) { + var tempValue = $(value).appendTo($tabsContent).addClass(tabsPanel); + var hash = $liHeadsA.get(key).hash.slice(1); + var id = $(value).attr('id') || GetYoDigits(6, 'accordion'); + + if (hash !== id) { + if (hash !== '') { + $(value).attr('id', hash); + } else { + hash = id; + $(value).attr('id', hash); + $($liHeadsA.get(key)).attr('href', $($liHeadsA.get(key)).attr('href').replace('#', '') + '#' + hash); + } + } + var isActive = $($liHeads.get(key)).hasClass('is-active'); + + if (isActive) { + tempValue.addClass('is-active'); + } + }); + $liHeads.addClass(tabsTitle); + } + } + /** + * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out. + * @function + */ + + }, { + key: "_destroy", + value: function _destroy() { + if (this.currentPlugin) this.currentPlugin.destroy(); + $(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler); + } + }]); + + return ResponsiveAccordionTabs; +}(Plugin); + +ResponsiveAccordionTabs.defaults = {}; + +Foundation.addToJquery($); // Add Foundation Utils to Foundation global namespace for backwards +// compatibility. + +Foundation.rtl = rtl; +Foundation.GetYoDigits = GetYoDigits; +Foundation.transitionend = transitionend; +Foundation.RegExpEscape = RegExpEscape; +Foundation.onLoad = onLoad; +Foundation.Box = Box; +Foundation.onImagesLoaded = onImagesLoaded; +Foundation.Keyboard = Keyboard; +Foundation.MediaQuery = MediaQuery; +Foundation.Motion = Motion; +Foundation.Move = Move; +Foundation.Nest = Nest; +Foundation.Timer = Timer; // Touch and Triggers previously were almost purely sede effect driven, +// so no need to add it to Foundation, just init them. + +Touch.init($); +Triggers.init($, Foundation); + +MediaQuery._init(); + +Foundation.plugin(Abide, 'Abide'); +Foundation.plugin(Accordion, 'Accordion'); +Foundation.plugin(AccordionMenu, 'AccordionMenu'); +Foundation.plugin(Drilldown, 'Drilldown'); +Foundation.plugin(Dropdown, 'Dropdown'); +Foundation.plugin(DropdownMenu, 'DropdownMenu'); +Foundation.plugin(Equalizer, 'Equalizer'); +Foundation.plugin(Interchange, 'Interchange'); +Foundation.plugin(Magellan, 'Magellan'); +Foundation.plugin(OffCanvas, 'OffCanvas'); +Foundation.plugin(Orbit, 'Orbit'); +Foundation.plugin(ResponsiveMenu, 'ResponsiveMenu'); +Foundation.plugin(ResponsiveToggle, 'ResponsiveToggle'); +Foundation.plugin(Reveal, 'Reveal'); +Foundation.plugin(Slider, 'Slider'); +Foundation.plugin(SmoothScroll, 'SmoothScroll'); +Foundation.plugin(Sticky, 'Sticky'); +Foundation.plugin(Tabs, 'Tabs'); +Foundation.plugin(Toggler, 'Toggler'); +Foundation.plugin(Tooltip, 'Tooltip'); +Foundation.plugin(ResponsiveAccordionTabs, 'ResponsiveAccordionTabs'); + +exports.CoreUtils = foundation_core_utils; +exports.Core = Foundation; +exports.Box = Box; +exports.onImagesLoaded = onImagesLoaded; +exports.Keyboard = Keyboard; +exports.MediaQuery = MediaQuery; +exports.Motion = Motion; +exports.Move = Move; +exports.Nest = Nest; +exports.Timer = Timer; +exports.Touch = Touch; +exports.Triggers = Triggers; +exports.Abide = Abide; +exports.Accordion = Accordion; +exports.AccordionMenu = AccordionMenu; +exports.Drilldown = Drilldown; +exports.Dropdown = Dropdown; +exports.DropdownMenu = DropdownMenu; +exports.Equalizer = Equalizer; +exports.Interchange = Interchange; +exports.Magellan = Magellan; +exports.OffCanvas = OffCanvas; +exports.Orbit = Orbit; +exports.ResponsiveMenu = ResponsiveMenu; +exports.ResponsiveToggle = ResponsiveToggle; +exports.Reveal = Reveal; +exports.Slider = Slider; +exports.SmoothScroll = SmoothScroll; +exports.Sticky = Sticky; +exports.Tabs = Tabs; +exports.Toggler = Toggler; +exports.Tooltip = Tooltip; +exports.ResponsiveAccordionTabs = ResponsiveAccordionTabs; +exports.Foundation = Foundation; +exports.default = Foundation; +//# sourceMappingURL=foundation.cjs.js.map diff --git a/dist/js/foundation.cjs.js.map b/dist/js/foundation.cjs.js.map new file mode 100644 index 000000000..87f4f4e09 --- /dev/null +++ b/dist/js/foundation.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"foundation.cjs.js","sources":["../../js/foundation.core.utils.js","../../js/foundation.util.mediaQuery.js","../../js/foundation.core.js","../../js/foundation.util.box.js","../../js/foundation.util.imageLoader.js","../../js/foundation.util.keyboard.js","../../js/foundation.util.motion.js","../../js/foundation.util.nest.js","../../js/foundation.util.timer.js","../../js/foundation.util.touch.js","../../js/foundation.util.triggers.js","../../js/foundation.core.plugin.js","../../js/foundation.abide.js","../../js/foundation.accordion.js","../../js/foundation.accordionMenu.js","../../js/foundation.drilldown.js","../../js/foundation.positionable.js","../../js/foundation.dropdown.js","../../js/foundation.dropdownMenu.js","../../js/foundation.equalizer.js","../../js/foundation.interchange.js","../../js/foundation.smoothScroll.js","../../js/foundation.magellan.js","../../js/foundation.offcanvas.js","../../js/foundation.orbit.js","../../js/foundation.responsiveMenu.js","../../js/foundation.responsiveToggle.js","../../js/foundation.reveal.js","../../js/foundation.slider.js","../../js/foundation.sticky.js","../../js/foundation.tabs.js","../../js/foundation.toggler.js","../../js/foundation.tooltip.js","../../js/foundation.responsiveAccordionTabs.js","../../js/entries/foundation.js"],"sourcesContent":["\"use strict\";\n\nimport $ from 'jquery';\n\n// Core Foundation Utilities, utilized in a number of places.\n\n /**\n * Returns a boolean for RTL support\n */\nfunction rtl() {\n return $('html').attr('dir') === 'rtl';\n}\n\n/**\n * returns a random base-36 uid with namespacing\n * @function\n * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.\n * @param {String} namespace - name of plugin to be incorporated in uid, optional.\n * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.\n * @returns {String} - unique id\n */\nfunction GetYoDigits(length, namespace){\n length = length || 6;\n return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1) + (namespace ? `-${namespace}` : '');\n}\n\n/**\n * Escape a string so it can be used as a regexp pattern\n * @function\n * @see https://stackoverflow.com/a/9310752/4317384\n *\n * @param {String} str - string to escape.\n * @returns {String} - escaped string\n */\nfunction RegExpEscape(str){\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nfunction transitionend($elem){\n var transitions = {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'transitionend',\n 'OTransition': 'otransitionend'\n };\n var elem = document.createElement('div'),\n end;\n\n for (var t in transitions){\n if (typeof elem.style[t] !== 'undefined'){\n end = transitions[t];\n }\n }\n if(end){\n return end;\n }else{\n end = setTimeout(function(){\n $elem.triggerHandler('transitionend', [$elem]);\n }, 1);\n return 'transitionend';\n }\n}\n\n/**\n * Return an event type to listen for window load.\n *\n * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered.\n * If `handler` is passed, attach it to the event on `$elem`.\n * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself.\n * @function\n *\n * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed.\n * @param {Function} [] handler - function to attach to the event.\n * @returns {String} - event type that should or will be triggered.\n */\nfunction onLoad($elem, handler) {\n const didLoad = document.readyState === 'complete';\n const eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad';\n const cb = () => $elem.triggerHandler(eventType);\n\n if ($elem) {\n if (handler) $elem.one(eventType, handler);\n\n if (didLoad)\n setTimeout(cb);\n else\n $(window).one('load', cb);\n }\n\n return eventType;\n}\n\nfunction onLeaveElement($elem, handler, { leaveWindow = true } = {}) {\n const eventType = 'mouseleave.zf.util.onLeaveElement';\n\n if ($elem && handler) {\n\n $elem.on(eventType, function leaveHandler(e, ...rest) {\n const _this = this;\n setTimeout(function leaveEventDebouncer() {\n\n if (e.relatedTarget === null && leaveWindow && document.hasFocus && document.hasFocus()) {\n\n $(document).one('mouseenter', function reenterHandler(reeenterE) {\n if ($elem.has(reeenterE.target).length) { return false };\n e.relatedTarget = reeenterE.target;\n handler.call(_this, e, ...rest);\n });\n\n return false;\n }\n\n handler.call(_this, e, ...rest);\n });\n });\n }\n\n return eventType;\n}\n\nexport { rtl, GetYoDigits, RegExpEscape, transitionend, onLoad, onLeaveElement };\n","'use strict';\n\nimport $ from 'jquery';\n\n// Default set of media queries\nconst defaultQueries = {\n 'default' : 'only screen',\n landscape : 'only screen and (orientation: landscape)',\n portrait : 'only screen and (orientation: portrait)',\n retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n 'only screen and (min--moz-device-pixel-ratio: 2),' +\n 'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n 'only screen and (min-device-pixel-ratio: 2),' +\n 'only screen and (min-resolution: 192dpi),' +\n 'only screen and (min-resolution: 2dppx)'\n };\n\n\n// matchMedia() polyfill - Test a CSS media type/query in JS.\n// Authors & copyright(c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n/* eslint-disable */\nwindow.matchMedia || (window.matchMedia = (function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = (window.styleMedia || window.media);\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n if (!script) {\n document.head.appendChild(style);\n } else {\n script.parentNode.insertBefore(style, script);\n }\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function (media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function(media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n})());\n/* eslint-enable */\n\nvar MediaQuery = {\n queries: [],\n\n current: '',\n\n /**\n * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n * @function\n * @private\n */\n _init() {\n var self = this;\n var $meta = $('meta.foundation-mq');\n if(!$meta.length){\n $('').appendTo(document.head);\n }\n\n var extractedStyles = $('.foundation-mq').css('font-family');\n var namedQueries;\n\n namedQueries = parseStyleToObject(extractedStyles);\n\n for (var key in namedQueries) {\n if(namedQueries.hasOwnProperty(key)) {\n self.queries.push({\n name: key,\n value: `only screen and (min-width: ${namedQueries[key]})`\n });\n }\n }\n\n this.current = this._getCurrentSize();\n\n this._watcher();\n },\n\n /**\n * Checks if the screen is at least as wide as a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n */\n atLeast(size) {\n var query = this.get(size);\n\n if (query) {\n return window.matchMedia(query).matches;\n }\n\n return false;\n },\n\n /**\n * Checks if the screen matches to a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n */\n is(size) {\n size = size.trim().split(' ');\n if(size.length > 1 && size[1] === 'only') {\n if(size[0] === this._getCurrentSize()) return true;\n } else {\n return this.atLeast(size[0]);\n }\n return false;\n },\n\n /**\n * Gets the media query of a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to get.\n * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n */\n get(size) {\n for (var i in this.queries) {\n if(this.queries.hasOwnProperty(i)) {\n var query = this.queries[i];\n if (size === query.name) return query.value;\n }\n }\n\n return null;\n },\n\n /**\n * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n * @function\n * @private\n * @returns {String} Name of the current breakpoint.\n */\n _getCurrentSize() {\n var matched;\n\n for (var i = 0; i < this.queries.length; i++) {\n var query = this.queries[i];\n\n if (window.matchMedia(query.value).matches) {\n matched = query;\n }\n }\n\n if (typeof matched === 'object') {\n return matched.name;\n } else {\n return matched;\n }\n },\n\n /**\n * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n * @function\n * @private\n */\n _watcher() {\n $(window).off('resize.zf.mediaquery').on('resize.zf.mediaquery', () => {\n var newSize = this._getCurrentSize(), currentSize = this.current;\n\n if (newSize !== currentSize) {\n // Change the current media query\n this.current = newSize;\n\n // Broadcast the media query change on the window\n $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n }\n });\n }\n};\n\n\n\n// Thank you: https://github.com/sindresorhus/query-string\nfunction parseStyleToObject(str) {\n var styleObject = {};\n\n if (typeof str !== 'string') {\n return styleObject;\n }\n\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n if (!str) {\n return styleObject;\n }\n\n styleObject = str.split('&').reduce(function(ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = parts[0];\n var val = parts[1];\n key = decodeURIComponent(key);\n\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n } else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n } else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n\n return styleObject;\n}\n\nexport {MediaQuery};\n","\"use strict\";\n\nimport $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\n\nvar FOUNDATION_VERSION = '6.5.0-rc.4';\n\n// Global Foundation object\n// This is attached to the window, or used as a module for AMD/Browserify\nvar Foundation = {\n version: FOUNDATION_VERSION,\n\n /**\n * Stores initialized plugins.\n */\n _plugins: {},\n\n /**\n * Stores generated unique ids for plugin instances\n */\n _uuids: [],\n\n /**\n * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.\n * @param {Object} plugin - The constructor of the plugin.\n */\n plugin: function(plugin, name) {\n // Object key to use when adding to global Foundation object\n // Examples: Foundation.Reveal, Foundation.OffCanvas\n var className = (name || functionName(plugin));\n // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin\n // Examples: data-reveal, data-off-canvas\n var attrName = hyphenate(className);\n\n // Add to the Foundation object and the plugins list (for reflowing)\n this._plugins[attrName] = this[className] = plugin;\n },\n /**\n * @function\n * Populates the _uuids array with pointers to each individual plugin instance.\n * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.\n * Also fires the initialization event for each plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @param {String} name - the name of the plugin, passed as a camelCased string.\n * @fires Plugin#init\n */\n registerPlugin: function(plugin, name){\n var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();\n plugin.uuid = GetYoDigits(6, pluginName);\n\n if(!plugin.$element.attr(`data-${pluginName}`)){ plugin.$element.attr(`data-${pluginName}`, plugin.uuid); }\n if(!plugin.$element.data('zfPlugin')){ plugin.$element.data('zfPlugin', plugin); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n plugin.$element.trigger(`init.zf.${pluginName}`);\n\n this._uuids.push(plugin.uuid);\n\n return;\n },\n /**\n * @function\n * Removes the plugins uuid from the _uuids array.\n * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.\n * Also fires the destroyed event for the plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @fires Plugin#destroyed\n */\n unregisterPlugin: function(plugin){\n var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));\n\n this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);\n plugin.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in plugin){\n plugin[prop] = null;//clean up script to prep for garbage collection.\n }\n return;\n },\n\n /**\n * @function\n * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.\n * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`\n * @default If no argument is passed, reflow all currently active plugins.\n */\n reInit: function(plugins){\n var isJQ = plugins instanceof $;\n try{\n if(isJQ){\n plugins.each(function(){\n $(this).data('zfPlugin')._init();\n });\n }else{\n var type = typeof plugins,\n _this = this,\n fns = {\n 'object': function(plgs){\n plgs.forEach(function(p){\n p = hyphenate(p);\n $('[data-'+ p +']').foundation('_init');\n });\n },\n 'string': function(){\n plugins = hyphenate(plugins);\n $('[data-'+ plugins +']').foundation('_init');\n },\n 'undefined': function(){\n this['object'](Object.keys(_this._plugins));\n }\n };\n fns[type](plugins);\n }\n }catch(err){\n console.error(err);\n }finally{\n return plugins;\n }\n },\n\n /**\n * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.\n * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.\n * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.\n */\n reflow: function(elem, plugins) {\n\n // If plugins is undefined, just grab everything\n if (typeof plugins === 'undefined') {\n plugins = Object.keys(this._plugins);\n }\n // If plugins is a string, convert it to an array with one item\n else if (typeof plugins === 'string') {\n plugins = [plugins];\n }\n\n var _this = this;\n\n // Iterate through each plugin\n $.each(plugins, function(i, name) {\n // Get the current plugin\n var plugin = _this._plugins[name];\n\n // Localize the search to all elements inside elem, as well as elem itself, unless elem === document\n var $elem = $(elem).find('[data-'+name+']').addBack('[data-'+name+']');\n\n // For each plugin found, initialize it\n $elem.each(function() {\n var $el = $(this),\n opts = {};\n // Don't double-dip on plugins\n if ($el.data('zfPlugin')) {\n console.warn(\"Tried to initialize \"+name+\" on an element that already has a Foundation plugin.\");\n return;\n }\n\n if($el.attr('data-options')){\n var thing = $el.attr('data-options').split(';').forEach(function(e, i){\n var opt = e.split(':').map(function(el){ return el.trim(); });\n if(opt[0]) opts[opt[0]] = parseValue(opt[1]);\n });\n }\n try{\n $el.data('zfPlugin', new plugin($(this), opts));\n }catch(er){\n console.error(er);\n }finally{\n return;\n }\n });\n });\n },\n getFnName: functionName,\n\n addToJquery: function($) {\n // TODO: consider not making this a jQuery function\n // TODO: need way to reflow vs. re-initialize\n /**\n * The Foundation jQuery method.\n * @param {String|Array} method - An action to perform on the current jQuery object.\n */\n var foundation = function(method) {\n var type = typeof method,\n $noJS = $('.no-js');\n\n if($noJS.length){\n $noJS.removeClass('no-js');\n }\n\n if(type === 'undefined'){//needs to initialize the Foundation object, or an individual plugin.\n MediaQuery._init();\n Foundation.reflow(this);\n }else if(type === 'string'){//an individual method to invoke on a plugin or group of plugins\n var args = Array.prototype.slice.call(arguments, 1);//collect all the arguments, if necessary\n var plugClass = this.data('zfPlugin');//determine the class of plugin\n\n if(typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined'){//make sure both the class and method exist\n if(this.length === 1){//if there's only one, call it directly.\n plugClass[method].apply(plugClass, args);\n }else{\n this.each(function(i, el){//otherwise loop through the jQuery collection and invoke the method on each\n plugClass[method].apply($(el).data('zfPlugin'), args);\n });\n }\n }else{//error for no class or no method\n throw new ReferenceError(\"We're sorry, '\" + method + \"' is not an available method for \" + (plugClass ? functionName(plugClass) : 'this element') + '.');\n }\n }else{//error for invalid argument type\n throw new TypeError(`We're sorry, ${type} is not a valid parameter. You must use a string representing the method you wish to invoke.`);\n }\n return this;\n };\n $.fn.foundation = foundation;\n return $;\n }\n};\n\nFoundation.util = {\n /**\n * Function for applying a debounce effect to a function call.\n * @function\n * @param {Function} func - Function to be called at end of timeout.\n * @param {Number} delay - Time in ms to delay the call of `func`.\n * @returns function\n */\n throttle: function (func, delay) {\n var timer = null;\n\n return function () {\n var context = this, args = arguments;\n\n if (timer === null) {\n timer = setTimeout(function () {\n func.apply(context, args);\n timer = null;\n }, delay);\n }\n };\n }\n};\n\nwindow.Foundation = Foundation;\n\n// Polyfill for requestAnimationFrame\n(function() {\n if (!Date.now || !window.Date.now)\n window.Date.now = Date.now = function() { return new Date().getTime(); };\n\n var vendors = ['webkit', 'moz'];\n for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];\n window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']\n || window[vp+'CancelRequestAnimationFrame']);\n }\n if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)\n || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function(callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function() { callback(lastTime = nextTime); },\n nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n }\n /**\n * Polyfill for performance.now, required by rAF\n */\n if(!window.performance || !window.performance.now){\n window.performance = {\n start: Date.now(),\n now: function(){ return Date.now() - this.start; }\n };\n }\n})();\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1),\n fToBind = this,\n fNOP = function() {},\n fBound = function() {\n return fToBind.apply(this instanceof fNOP\n ? this\n : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n if (this.prototype) {\n // native functions don't have a prototype\n fNOP.prototype = this.prototype;\n }\n fBound.prototype = new fNOP();\n\n return fBound;\n };\n}\n// Polyfill to get the name of a function in IE9\nfunction functionName(fn) {\n if (typeof Function.prototype.name === 'undefined') {\n var funcNameRegex = /function\\s([^(]{1,})\\(/;\n var results = (funcNameRegex).exec((fn).toString());\n return (results && results.length > 1) ? results[1].trim() : \"\";\n }\n else if (typeof fn.prototype === 'undefined') {\n return fn.constructor.name;\n }\n else {\n return fn.prototype.constructor.name;\n }\n}\nfunction parseValue(str){\n if ('true' === str) return true;\n else if ('false' === str) return false;\n else if (!isNaN(str * 1)) return parseFloat(str);\n return str;\n}\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nexport {Foundation};\n","'use strict';\n\n\nimport { rtl as Rtl } from \"./foundation.core.utils\";\n\nvar Box = {\n ImNotTouchingYou: ImNotTouchingYou,\n OverlapArea: OverlapArea,\n GetDimensions: GetDimensions,\n GetOffsets: GetOffsets,\n GetExplicitOffsets: GetExplicitOffsets\n}\n\n/**\n * Compares the dimensions of an element to a container and determines collision events with container.\n * @function\n * @param {jQuery} element - jQuery object to test for collisions.\n * @param {jQuery} parent - jQuery object to use as bounding container.\n * @param {Boolean} lrOnly - set to true to check left and right values only.\n * @param {Boolean} tbOnly - set to true to check top and bottom values only.\n * @default if no parent object passed, detects collisions with `window`.\n * @returns {Boolean} - true if collision free, false if a collision in any direction.\n */\nfunction ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {\n return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;\n};\n\nfunction OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {\n var eleDims = GetDimensions(element),\n topOver, bottomOver, leftOver, rightOver;\n if (parent) {\n var parDims = GetDimensions(parent);\n\n bottomOver = (parDims.height + parDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - parDims.offset.top;\n leftOver = eleDims.offset.left - parDims.offset.left;\n rightOver = (parDims.width + parDims.offset.left) - (eleDims.offset.left + eleDims.width);\n }\n else {\n bottomOver = (eleDims.windowDims.height + eleDims.windowDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - eleDims.windowDims.offset.top;\n leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;\n rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);\n }\n\n bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);\n topOver = Math.min(topOver, 0);\n leftOver = Math.min(leftOver, 0);\n rightOver = Math.min(rightOver, 0);\n\n if (lrOnly) {\n return leftOver + rightOver;\n }\n if (tbOnly) {\n return topOver + bottomOver;\n }\n\n // use sum of squares b/c we care about overlap area.\n return Math.sqrt((topOver * topOver) + (bottomOver * bottomOver) + (leftOver * leftOver) + (rightOver * rightOver));\n}\n\n/**\n * Uses native methods to return an object of dimension values.\n * @function\n * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.\n * @returns {Object} - nested object of integer pixel values\n * TODO - if element is window, return only those values.\n */\nfunction GetDimensions(elem){\n elem = elem.length ? elem[0] : elem;\n\n if (elem === window || elem === document) {\n throw new Error(\"I'm sorry, Dave. I'm afraid I can't do that.\");\n }\n\n var rect = elem.getBoundingClientRect(),\n parRect = elem.parentNode.getBoundingClientRect(),\n winRect = document.body.getBoundingClientRect(),\n winY = window.pageYOffset,\n winX = window.pageXOffset;\n\n return {\n width: rect.width,\n height: rect.height,\n offset: {\n top: rect.top + winY,\n left: rect.left + winX\n },\n parentDims: {\n width: parRect.width,\n height: parRect.height,\n offset: {\n top: parRect.top + winY,\n left: parRect.left + winX\n }\n },\n windowDims: {\n width: winRect.width,\n height: winRect.height,\n offset: {\n top: winY,\n left: winX\n }\n }\n }\n}\n\n/**\n * Returns an object of top and left integer pixel values for dynamically rendered elements,\n * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where\n * you don't know alignment, but generally from\n * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.\n * @function\n * @param {jQuery} element - jQuery object for the element being positioned.\n * @param {jQuery} anchor - jQuery object for the element's anchor point.\n * @param {String} position - a string relating to the desired position of the element, relative to it's anchor\n * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.\n * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.\n * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.\n * TODO alter/rewrite to work with `em` values as well/instead of pixels\n */\nfunction GetOffsets(element, anchor, position, vOffset, hOffset, isOverflow) {\n console.log(\"NOTE: GetOffsets is deprecated in favor of GetExplicitOffsets and will be removed in 6.5\");\n switch (position) {\n case 'top':\n return Rtl() ?\n GetExplicitOffsets(element, anchor, 'top', 'left', vOffset, hOffset, isOverflow) :\n GetExplicitOffsets(element, anchor, 'top', 'right', vOffset, hOffset, isOverflow);\n case 'bottom':\n return Rtl() ?\n GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow) :\n GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow);\n case 'center top':\n return GetExplicitOffsets(element, anchor, 'top', 'center', vOffset, hOffset, isOverflow);\n case 'center bottom':\n return GetExplicitOffsets(element, anchor, 'bottom', 'center', vOffset, hOffset, isOverflow);\n case 'center left':\n return GetExplicitOffsets(element, anchor, 'left', 'center', vOffset, hOffset, isOverflow);\n case 'center right':\n return GetExplicitOffsets(element, anchor, 'right', 'center', vOffset, hOffset, isOverflow);\n case 'left bottom':\n return GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow);\n case 'right bottom':\n return GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow);\n // Backwards compatibility... this along with the reveal and reveal full\n // classes are the only ones that didn't reference anchor\n case 'center':\n return {\n left: ($eleDims.windowDims.offset.left + ($eleDims.windowDims.width / 2)) - ($eleDims.width / 2) + hOffset,\n top: ($eleDims.windowDims.offset.top + ($eleDims.windowDims.height / 2)) - ($eleDims.height / 2 + vOffset)\n }\n case 'reveal':\n return {\n left: ($eleDims.windowDims.width - $eleDims.width) / 2 + hOffset,\n top: $eleDims.windowDims.offset.top + vOffset\n }\n case 'reveal full':\n return {\n left: $eleDims.windowDims.offset.left,\n top: $eleDims.windowDims.offset.top\n }\n break;\n default:\n return {\n left: (Rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset: $anchorDims.offset.left + hOffset),\n top: $anchorDims.offset.top + $anchorDims.height + vOffset\n }\n\n }\n\n}\n\nfunction GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {\n var $eleDims = GetDimensions(element),\n $anchorDims = anchor ? GetDimensions(anchor) : null;\n\n var topVal, leftVal;\n\n // set position related attribute\n\n switch (position) {\n case 'top':\n topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);\n break;\n case 'bottom':\n topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;\n break;\n case 'left':\n leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);\n break;\n case 'right':\n leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;\n break;\n }\n\n\n // set alignment related attribute\n switch (position) {\n case 'top':\n case 'bottom':\n switch (alignment) {\n case 'left':\n leftVal = $anchorDims.offset.left + hOffset;\n break;\n case 'right':\n leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;\n break;\n case 'center':\n leftVal = isOverflow ? hOffset : (($anchorDims.offset.left + ($anchorDims.width / 2)) - ($eleDims.width / 2)) + hOffset;\n break;\n }\n break;\n case 'right':\n case 'left':\n switch (alignment) {\n case 'bottom':\n topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;\n break;\n case 'top':\n topVal = $anchorDims.offset.top + vOffset\n break;\n case 'center':\n topVal = ($anchorDims.offset.top + vOffset + ($anchorDims.height / 2)) - ($eleDims.height / 2)\n break;\n }\n break;\n }\n return {top: topVal, left: leftVal};\n}\n\nexport {Box};\n","'use strict';\n\nimport $ from 'jquery';\n\n/**\n * Runs a callback function when images are fully loaded.\n * @param {Object} images - Image(s) to check if loaded.\n * @param {Func} callback - Function to execute when image is fully loaded.\n */\nfunction onImagesLoaded(images, callback){\n var self = this,\n unloaded = images.length;\n\n if (unloaded === 0) {\n callback();\n }\n\n images.each(function(){\n // Check if image is loaded\n if (this.complete && typeof this.naturalWidth !== 'undefined') {\n singleImageLoaded();\n }\n else {\n // If the above check failed, simulate loading on detached element.\n var image = new Image();\n // Still count image as loaded if it finalizes with an error.\n var events = \"load.zf.images error.zf.images\";\n $(image).one(events, function me(event){\n // Unbind the event listeners. We're using 'one' but only one of the two events will have fired.\n $(this).off(events, me);\n singleImageLoaded();\n });\n image.src = $(this).attr('src');\n }\n });\n\n function singleImageLoaded() {\n unloaded--;\n if (unloaded === 0) {\n callback();\n }\n }\n}\n\nexport { onImagesLoaded };\n","/*******************************************\n * *\n * This util was created by Marius Olbertz *\n * Please thank Marius on GitHub /owlbertz *\n * or the web http://www.mariusolbertz.de/ *\n * *\n ******************************************/\n\n'use strict';\n\nimport $ from 'jquery';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst keyCodes = {\n 9: 'TAB',\n 13: 'ENTER',\n 27: 'ESCAPE',\n 32: 'SPACE',\n 35: 'END',\n 36: 'HOME',\n 37: 'ARROW_LEFT',\n 38: 'ARROW_UP',\n 39: 'ARROW_RIGHT',\n 40: 'ARROW_DOWN'\n}\n\nvar commands = {}\n\n// Functions pulled out to be referenceable from internals\nfunction findFocusable($element) {\n if(!$element) {return false; }\n return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function() {\n if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; } //only have visible elements and those that have a tabindex greater or equal 0\n return true;\n });\n}\n\nfunction parseKey(event) {\n var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();\n\n // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n key = key.replace(/\\W+/, '');\n\n if (event.shiftKey) key = `SHIFT_${key}`;\n if (event.ctrlKey) key = `CTRL_${key}`;\n if (event.altKey) key = `ALT_${key}`;\n\n // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n key = key.replace(/_$/, '');\n\n return key;\n}\n\nvar Keyboard = {\n keys: getKeyCodes(keyCodes),\n\n /**\n * Parses the (keyboard) event and returns a String that represents its key\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n * @param {Event} event - the event generated by the event handler\n * @return String key - String that represents the key pressed\n */\n parseKey: parseKey,\n\n /**\n * Handles the given (keyboard) event\n * @param {Event} event - the event generated by the event handler\n * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n * @param {Objects} functions - collection of functions that are to be executed\n */\n handleKey(event, component, functions) {\n var commandList = commands[component],\n keyCode = this.parseKey(event),\n cmds,\n command,\n fn;\n\n if (!commandList) return console.warn('Component not defined!');\n\n if (typeof commandList.ltr === 'undefined') { // this component does not differentiate between ltr and rtl\n cmds = commandList; // use plain list\n } else { // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n if (Rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);\n\n else cmds = $.extend({}, commandList.rtl, commandList.ltr);\n }\n command = cmds[keyCode];\n\n fn = functions[command];\n if (fn && typeof fn === 'function') { // execute function if exists\n var returnValue = fn.apply();\n if (functions.handled || typeof functions.handled === 'function') { // execute function when event was handled\n functions.handled(returnValue);\n }\n } else {\n if (functions.unhandled || typeof functions.unhandled === 'function') { // execute function when event was not handled\n functions.unhandled();\n }\n }\n },\n\n /**\n * Finds all focusable elements within the given `$element`\n * @param {jQuery} $element - jQuery object to search within\n * @return {jQuery} $focusable - all focusable elements within `$element`\n */\n\n findFocusable: findFocusable,\n\n /**\n * Returns the component name name\n * @param {Object} component - Foundation component, e.g. Slider or Reveal\n * @return String componentName\n */\n\n register(componentName, cmds) {\n commands[componentName] = cmds;\n },\n\n\n // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n //\n /**\n * Traps the focus in the given element.\n * @param {jQuery} $element jQuery object to trap the foucs into.\n */\n trapFocus($element) {\n var $focusable = findFocusable($element),\n $firstFocusable = $focusable.eq(0),\n $lastFocusable = $focusable.eq(-1);\n\n $element.on('keydown.zf.trapfocus', function(event) {\n if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n event.preventDefault();\n $firstFocusable.focus();\n }\n else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n event.preventDefault();\n $lastFocusable.focus();\n }\n });\n },\n /**\n * Releases the trapped focus from the given element.\n * @param {jQuery} $element jQuery object to release the focus for.\n */\n releaseFocus($element) {\n $element.off('keydown.zf.trapfocus');\n }\n}\n\n/*\n * Constants for easier comparing.\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n */\nfunction getKeyCodes(kcs) {\n var k = {};\n for (var kc in kcs) k[kcs[kc]] = kcs[kc];\n return k;\n}\n\nexport {Keyboard};\n","'use strict';\n\nimport $ from 'jquery';\nimport { transitionend } from './foundation.core.utils';\n\n/**\n * Motion module.\n * @module foundation.motion\n */\n\nconst initClasses = ['mui-enter', 'mui-leave'];\nconst activeClasses = ['mui-enter-active', 'mui-leave-active'];\n\nconst Motion = {\n animateIn: function(element, animation, cb) {\n animate(true, element, animation, cb);\n },\n\n animateOut: function(element, animation, cb) {\n animate(false, element, animation, cb);\n }\n}\n\nfunction Move(duration, elem, fn){\n var anim, prog, start = null;\n // console.log('called');\n\n if (duration === 0) {\n fn.apply(elem);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n return;\n }\n\n function move(ts){\n if(!start) start = ts;\n // console.log(start, ts);\n prog = ts - start;\n fn.apply(elem);\n\n if(prog < duration){ anim = window.requestAnimationFrame(move, elem); }\n else{\n window.cancelAnimationFrame(anim);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n }\n }\n anim = window.requestAnimationFrame(move);\n}\n\n/**\n * Animates an element in or out using a CSS transition class.\n * @function\n * @private\n * @param {Boolean} isIn - Defines if the animation is in or out.\n * @param {Object} element - jQuery or HTML object to animate.\n * @param {String} animation - CSS class to use.\n * @param {Function} cb - Callback to run when animation is finished.\n */\nfunction animate(isIn, element, animation, cb) {\n element = $(element).eq(0);\n\n if (!element.length) return;\n\n var initClass = isIn ? initClasses[0] : initClasses[1];\n var activeClass = isIn ? activeClasses[0] : activeClasses[1];\n\n // Set up the animation\n reset();\n\n element\n .addClass(animation)\n .css('transition', 'none');\n\n requestAnimationFrame(() => {\n element.addClass(initClass);\n if (isIn) element.show();\n });\n\n // Start the animation\n requestAnimationFrame(() => {\n element[0].offsetWidth;\n element\n .css('transition', '')\n .addClass(activeClass);\n });\n\n // Clean up the animation when it finishes\n element.one(transitionend(element), finish);\n\n // Hides the element (for out animations), resets the element, and runs a callback\n function finish() {\n if (!isIn) element.hide();\n reset();\n if (cb) cb.apply(element);\n }\n\n // Resets transitions and removes motion-specific classes\n function reset() {\n element[0].style.transitionDuration = 0;\n element.removeClass(`${initClass} ${activeClass} ${animation}`);\n }\n}\n\nexport { Move, Motion };\n\n","'use strict';\n\nimport $ from 'jquery';\n\nconst Nest = {\n Feather(menu, type = 'zf') {\n menu.attr('role', 'menubar');\n\n var items = menu.find('li').attr({'role': 'menuitem'}),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`,\n applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes.\n\n items.each(function() {\n var $item = $(this),\n $sub = $item.children('ul');\n\n if ($sub.length) {\n $item.addClass(hasSubClass);\n $sub.addClass(`submenu ${subMenuClass}`).attr({'data-submenu': ''});\n if(applyAria) {\n $item.attr({\n 'aria-haspopup': true,\n 'aria-label': $item.children('a:first').text()\n });\n // Note: Drilldowns behave differently in how they hide, and so need\n // additional attributes. We should look if this possibly over-generalized\n // utility (Nest) is appropriate when we rework menus in 6.4\n if(type === 'drilldown') {\n $item.attr({'aria-expanded': false});\n }\n }\n $sub\n .addClass(`submenu ${subMenuClass}`)\n .attr({\n 'data-submenu': '',\n 'role': 'menubar'\n });\n if(type === 'drilldown') {\n $sub.attr({'aria-hidden': true});\n }\n }\n\n if ($item.parent('[data-submenu]').length) {\n $item.addClass(`is-submenu-item ${subItemClass}`);\n }\n });\n\n return;\n },\n\n Burn(menu, type) {\n var //items = menu.find('li'),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`;\n\n menu\n .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li')\n .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`)\n .removeAttr('data-submenu').css('display', '');\n\n }\n}\n\nexport {Nest};\n","'use strict';\n\nimport $ from 'jquery';\n\nfunction Timer(elem, options, cb) {\n var _this = this,\n duration = options.duration,//options is an object for easily adding features later.\n nameSpace = Object.keys(elem.data())[0] || 'timer',\n remain = -1,\n start,\n timer;\n\n this.isPaused = false;\n\n this.restart = function() {\n remain = -1;\n clearTimeout(timer);\n this.start();\n }\n\n this.start = function() {\n this.isPaused = false;\n // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.\n clearTimeout(timer);\n remain = remain <= 0 ? duration : remain;\n elem.data('paused', false);\n start = Date.now();\n timer = setTimeout(function(){\n if(options.infinite){\n _this.restart();//rerun the timer.\n }\n if (cb && typeof cb === 'function') { cb(); }\n }, remain);\n elem.trigger(`timerstart.zf.${nameSpace}`);\n }\n\n this.pause = function() {\n this.isPaused = true;\n //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things.\n clearTimeout(timer);\n elem.data('paused', true);\n var end = Date.now();\n remain = remain - (end - start);\n elem.trigger(`timerpaused.zf.${nameSpace}`);\n }\n}\n\nexport {Timer};\n","//**************************************************\n//**Work inspired by multiple jquery swipe plugins**\n//**Done by Yohai Ararat ***************************\n//**************************************************\n\nimport $ from 'jquery';\n\nvar Touch = {};\n\nvar startPosX,\n startPosY,\n startTime,\n elapsedTime,\n startEvent,\n isMoving = false,\n didMoved = false;\n\nfunction onTouchEnd(e) {\n this.removeEventListener('touchmove', onTouchMove);\n this.removeEventListener('touchend', onTouchEnd);\n\n // If the touch did not move, consider it as a \"tap\"\n if (!didMoved) {\n var tapEvent = $.Event('tap', startEvent || e);\n $(this).trigger(tapEvent);\n }\n\n startEvent = null;\n isMoving = false;\n didMoved = false;\n}\n\nfunction onTouchMove(e) {\n if ($.spotSwipe.preventDefault) { e.preventDefault(); }\n\n if(isMoving) {\n var x = e.touches[0].pageX;\n var y = e.touches[0].pageY;\n var dx = startPosX - x;\n var dy = startPosY - y;\n var dir;\n didMoved = true;\n elapsedTime = new Date().getTime() - startTime;\n if(Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n dir = dx > 0 ? 'left' : 'right';\n }\n // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n // dir = dy > 0 ? 'down' : 'up';\n // }\n if(dir) {\n e.preventDefault();\n onTouchEnd.apply(this, arguments);\n $(this)\n .trigger($.Event('swipe', e), dir)\n .trigger($.Event(`swipe${dir}`, e));\n }\n }\n\n}\n\nfunction onTouchStart(e) {\n\n if (e.touches.length == 1) {\n startPosX = e.touches[0].pageX;\n startPosY = e.touches[0].pageY;\n startEvent = e;\n isMoving = true;\n didMoved = false;\n startTime = new Date().getTime();\n this.addEventListener('touchmove', onTouchMove, false);\n this.addEventListener('touchend', onTouchEnd, false);\n }\n}\n\nfunction init() {\n this.addEventListener && this.addEventListener('touchstart', onTouchStart, false);\n}\n\nfunction teardown() {\n this.removeEventListener('touchstart', onTouchStart);\n}\n\nclass SpotSwipe {\n constructor($) {\n this.version = '1.0.0';\n this.enabled = 'ontouchstart' in document.documentElement;\n this.preventDefault = false;\n this.moveThreshold = 75;\n this.timeThreshold = 200;\n this.$ = $;\n this._init();\n }\n\n _init() {\n var $ = this.$;\n $.event.special.swipe = { setup: init };\n $.event.special.tap = { setup: init };\n\n $.each(['left', 'up', 'down', 'right'], function () {\n $.event.special[`swipe${this}`] = { setup: function(){\n $(this).on('swipe', $.noop);\n } };\n });\n }\n}\n\n/****************************************************\n * As far as I can tell, both setupSpotSwipe and *\n * setupTouchHandler should be idempotent, *\n * because they directly replace functions & *\n * values, and do not add event handlers directly. *\n ****************************************************/\n\nTouch.setupSpotSwipe = function($) {\n $.spotSwipe = new SpotSwipe($);\n};\n\n/****************************************************\n * Method for adding pseudo drag events to elements *\n ***************************************************/\nTouch.setupTouchHandler = function($) {\n $.fn.addTouch = function(){\n this.each(function(i,el){\n $(el).bind('touchstart touchmove touchend touchcancel', function(event) {\n //we pass the original event object because the jQuery event\n //object is normalized to w3c specs and does not provide the TouchList\n handleTouch(event);\n });\n });\n\n var handleTouch = function(event){\n var touches = event.changedTouches,\n first = touches[0],\n eventTypes = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup'\n },\n type = eventTypes[event.type],\n simulatedEvent\n ;\n\n if('MouseEvent' in window && typeof window.MouseEvent === 'function') {\n simulatedEvent = new window.MouseEvent(type, {\n 'bubbles': true,\n 'cancelable': true,\n 'screenX': first.screenX,\n 'screenY': first.screenY,\n 'clientX': first.clientX,\n 'clientY': first.clientY\n });\n } else {\n simulatedEvent = document.createEvent('MouseEvent');\n simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);\n }\n first.target.dispatchEvent(simulatedEvent);\n };\n };\n};\n\nTouch.init = function ($) {\n\n if(typeof($.spotSwipe) === 'undefined') {\n Touch.setupSpotSwipe($);\n Touch.setupTouchHandler($);\n }\n};\n\nexport {Touch};\n","'use strict';\n\nimport $ from 'jquery';\nimport { onLoad } from './foundation.core.utils';\nimport { Motion } from './foundation.util.motion';\n\nconst MutationObserver = (function () {\n var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\n for (var i=0; i < prefixes.length; i++) {\n if (`${prefixes[i]}MutationObserver` in window) {\n return window[`${prefixes[i]}MutationObserver`];\n }\n }\n return false;\n}());\n\nconst triggers = (el, type) => {\n el.data(type).split(' ').forEach(id => {\n $(`#${id}`)[ type === 'close' ? 'trigger' : 'triggerHandler'](`${type}.zf.trigger`, [el]);\n });\n};\n\nvar Triggers = {\n Listeners: {\n Basic: {},\n Global: {}\n },\n Initializers: {}\n}\n\nTriggers.Listeners.Basic = {\n openListener: function() {\n triggers($(this), 'open');\n },\n closeListener: function() {\n let id = $(this).data('close');\n if (id) {\n triggers($(this), 'close');\n }\n else {\n $(this).trigger('close.zf.trigger');\n }\n },\n toggleListener: function() {\n let id = $(this).data('toggle');\n if (id) {\n triggers($(this), 'toggle');\n } else {\n $(this).trigger('toggle.zf.trigger');\n }\n },\n closeableListener: function(e) {\n e.stopPropagation();\n let animation = $(this).data('closable');\n\n if(animation !== ''){\n Motion.animateOut($(this), animation, function() {\n $(this).trigger('closed.zf');\n });\n }else{\n $(this).fadeOut().trigger('closed.zf');\n }\n },\n toggleFocusListener: function() {\n let id = $(this).data('toggle-focus');\n $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]);\n }\n};\n\n// Elements with [data-open] will reveal a plugin that supports it when clicked.\nTriggers.Initializers.addOpenListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);\n $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);\n}\n\n// Elements with [data-close] will close a plugin that supports it when clicked.\n// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.\nTriggers.Initializers.addCloseListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);\n $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);\n}\n\n// Elements with [data-toggle] will toggle a plugin that supports it when clicked.\nTriggers.Initializers.addToggleListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);\n $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);\n}\n\n// Elements with [data-closable] will respond to close.zf.trigger events.\nTriggers.Initializers.addCloseableListener = ($elem) => {\n $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);\n $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);\n}\n\n// Elements with [data-toggle-focus] will respond to coming in and out of focus\nTriggers.Initializers.addToggleFocusListener = ($elem) => {\n $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);\n $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);\n}\n\n\n\n// More Global/complex listeners and triggers\nTriggers.Listeners.Global = {\n resizeListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('resizeme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a resize event\n $nodes.attr('data-events', \"resize\");\n },\n scrollListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('scrollme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a scroll event\n $nodes.attr('data-events', \"scroll\");\n },\n closeMeListener: function(e, pluginId){\n let plugin = e.namespace.split('.')[0];\n let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box=\"${pluginId}\"]`);\n\n plugins.each(function(){\n let _this = $(this);\n _this.triggerHandler('close.zf.trigger', [_this]);\n });\n }\n}\n\n// Global, parses whole document.\nTriggers.Initializers.addClosemeListener = function(pluginName) {\n var yetiBoxes = $('[data-yeti-box]'),\n plugNames = ['dropdown', 'tooltip', 'reveal'];\n\n if(pluginName){\n if(typeof pluginName === 'string'){\n plugNames.push(pluginName);\n }else if(typeof pluginName === 'object' && typeof pluginName[0] === 'string'){\n plugNames.concat(pluginName);\n }else{\n console.error('Plugin names must be strings');\n }\n }\n if(yetiBoxes.length){\n let listeners = plugNames.map((name) => {\n return `closeme.zf.${name}`;\n }).join(' ');\n\n $(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);\n }\n}\n\nfunction debounceGlobalListener(debounce, trigger, listener) {\n let timer, args = Array.prototype.slice.call(arguments, 3);\n $(window).off(trigger).on(trigger, function(e) {\n if (timer) { clearTimeout(timer); }\n timer = setTimeout(function(){\n listener.apply(null, args);\n }, debounce || 10);//default time to emit scroll event\n });\n}\n\nTriggers.Initializers.addResizeListener = function(debounce){\n let $nodes = $('[data-resize]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);\n }\n}\n\nTriggers.Initializers.addScrollListener = function(debounce){\n let $nodes = $('[data-scroll]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);\n }\n}\n\nTriggers.Initializers.addMutationEventsListener = function($elem) {\n if(!MutationObserver){ return false; }\n let $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');\n\n //element callback\n var listeningElementsMutation = function (mutationRecordsList) {\n var $target = $(mutationRecordsList[0].target);\n\n //trigger the event handler for the element depending on type\n switch (mutationRecordsList[0].type) {\n case \"attributes\":\n if ($target.attr(\"data-events\") === \"scroll\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);\n }\n if ($target.attr(\"data-events\") === \"resize\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('resizeme.zf.trigger', [$target]);\n }\n if (mutationRecordsList[0].attributeName === \"style\") {\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n }\n break;\n\n case \"childList\":\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n break;\n\n default:\n return false;\n //nothing\n }\n };\n\n if ($nodes.length) {\n //for each element that needs to listen for resizing, scrolling, or mutation add a single observer\n for (var i = 0; i <= $nodes.length - 1; i++) {\n var elementObserver = new MutationObserver(listeningElementsMutation);\n elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: [\"data-events\", \"style\"] });\n }\n }\n}\n\nTriggers.Initializers.addSimpleListeners = function() {\n let $document = $(document);\n\n Triggers.Initializers.addOpenListener($document);\n Triggers.Initializers.addCloseListener($document);\n Triggers.Initializers.addToggleListener($document);\n Triggers.Initializers.addCloseableListener($document);\n Triggers.Initializers.addToggleFocusListener($document);\n\n}\n\nTriggers.Initializers.addGlobalListeners = function() {\n let $document = $(document);\n Triggers.Initializers.addMutationEventsListener($document);\n Triggers.Initializers.addResizeListener();\n Triggers.Initializers.addScrollListener();\n Triggers.Initializers.addClosemeListener();\n}\n\n\nTriggers.init = function ($, Foundation) {\n onLoad($(window), function () {\n if ($.triggersInitialized !== true) {\n Triggers.Initializers.addSimpleListeners();\n Triggers.Initializers.addGlobalListeners();\n $.triggersInitialized = true;\n }\n });\n\n if(Foundation) {\n Foundation.Triggers = Triggers;\n // Legacy included to be backwards compatible for now.\n Foundation.IHearYou = Triggers.Initializers.addGlobalListeners\n }\n}\n\nexport {Triggers};\n","'use strict';\n\nimport $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\n\n// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST\n// {function} _setup (replaces previous constructor),\n// {function} _destroy (replaces previous destroy)\nclass Plugin {\n\n constructor(element, options) {\n this._setup(element, options);\n var pluginName = getPluginName(this);\n this.uuid = GetYoDigits(6, pluginName);\n\n if(!this.$element.attr(`data-${pluginName}`)){ this.$element.attr(`data-${pluginName}`, this.uuid); }\n if(!this.$element.data('zfPlugin')){ this.$element.data('zfPlugin', this); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n this.$element.trigger(`init.zf.${pluginName}`);\n }\n\n destroy() {\n this._destroy();\n var pluginName = getPluginName(this);\n this.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in this){\n this[prop] = null;//clean up script to prep for garbage collection.\n }\n }\n}\n\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction getPluginName(obj) {\n if(typeof(obj.constructor.name) !== 'undefined') {\n return hyphenate(obj.constructor.name);\n } else {\n return hyphenate(obj.className);\n }\n}\n\nexport {Plugin};\n","'use strict';\n\nimport $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { GetYoDigits } from './foundation.core.utils';\n\n/**\n * Abide module.\n * @module foundation.abide\n */\n\nclass Abide extends Plugin {\n /**\n * Creates a new instance of Abide.\n * @class\n * @name Abide\n * @fires Abide#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options = {}) {\n this.$element = element;\n this.options = $.extend(true, {}, Abide.defaults, this.$element.data(), options);\n\n this.className = 'Abide'; // ie9 back compat\n this._init();\n }\n\n /**\n * Initializes the Abide plugin and calls functions to get Abide functioning on load.\n * @private\n */\n _init() {\n this.$inputs = $.merge( // Consider as input to validate:\n this.$element.find('input').not('[type=submit]'), // * all input fields expect submit\n this.$element.find('textarea, select') // * all textareas and select fields\n );\n const $globalErrors = this.$element.find('[data-abide-error]');\n\n // Add a11y attributes to all fields\n if (this.options.a11yAttributes) {\n this.$inputs.each((i, input) => this.addA11yAttributes($(input)));\n $globalErrors.each((i, error) => this.addGlobalErrorA11yAttributes($(error)));\n }\n\n this._events();\n }\n\n /**\n * Initializes events for Abide.\n * @private\n */\n _events() {\n this.$element.off('.abide')\n .on('reset.zf.abide', () => {\n this.resetForm();\n })\n .on('submit.zf.abide', () => {\n return this.validateForm();\n });\n\n if (this.options.validateOn === 'fieldChange') {\n this.$inputs\n .off('change.zf.abide')\n .on('change.zf.abide', (e) => {\n this.validateInput($(e.target));\n });\n }\n\n if (this.options.liveValidate) {\n this.$inputs\n .off('input.zf.abide')\n .on('input.zf.abide', (e) => {\n this.validateInput($(e.target));\n });\n }\n\n if (this.options.validateOnBlur) {\n this.$inputs\n .off('blur.zf.abide')\n .on('blur.zf.abide', (e) => {\n this.validateInput($(e.target));\n });\n }\n }\n\n /**\n * Calls necessary functions to update Abide upon DOM change\n * @private\n */\n _reflow() {\n this._init();\n }\n\n /**\n * Checks whether or not a form element has the required attribute and if it's checked or not\n * @param {Object} element - jQuery object to check for required attribute\n * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty\n */\n requiredCheck($el) {\n if (!$el.attr('required')) return true;\n\n var isGood = true;\n\n switch ($el[0].type) {\n case 'checkbox':\n isGood = $el[0].checked;\n break;\n\n case 'select':\n case 'select-one':\n case 'select-multiple':\n var opt = $el.find('option:selected');\n if (!opt.length || !opt.val()) isGood = false;\n break;\n\n default:\n if(!$el.val() || !$el.val().length) isGood = false;\n }\n\n return isGood;\n }\n\n /**\n * Get:\n * - Based on $el, the first element(s) corresponding to `formErrorSelector` in this order:\n * 1. The element's direct sibling('s).\n * 2. The element's parent's children.\n * - Element(s) with the attribute `[data-form-error-for]` set with the element's id.\n *\n * This allows for multiple form errors per input, though if none are found, no form errors will be shown.\n *\n * @param {Object} $el - jQuery object to use as reference to find the form error selector.\n * @returns {Object} jQuery object with the selector.\n */\n findFormError($el) {\n var id = $el[0].id;\n var $error = $el.siblings(this.options.formErrorSelector);\n\n if (!$error.length) {\n $error = $el.parent().find(this.options.formErrorSelector);\n }\n\n if (id) {\n $error = $error.add(this.$element.find(`[data-form-error-for=\"${id}\"]`));\n }\n\n return $error;\n }\n\n /**\n * Get the first element in this order:\n * 2. The '\n */\n backButton: '
    • Back
    • ',\n /**\n * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.\n * @option\n * @type {string}\n * @default top\n */\n backButtonPosition: 'top',\n /**\n * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
      '\n */\n wrapper: '
      ',\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Allow the menu to return to root list on body click.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * Allow the menu to auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n autoHeight: false,\n /**\n * Animate the auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n animateHeight: false,\n /**\n * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button\n * @option\n * @type {boolean}\n * @default false\n */\n scrollTop: false,\n /**\n * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken\n * @option\n * @type {string}\n * @default ''\n */\n scrollTopElement: '',\n /**\n * ScrollTop offset\n * @option\n * @type {number}\n * @default 0\n */\n scrollTopOffset: 0,\n /**\n * Scroll animation duration\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Scroll animation easing. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @see {@link https://api.jquery.com/animate|JQuery animate}\n * @default 'swing'\n */\n animationEasing: 'swing'\n // holdOpen: false\n};\n\nexport {Drilldown};\n","'use strict';\n\nimport { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst POSITIONS = ['left', 'right', 'top', 'bottom'];\nconst VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center'];\nconst HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center'];\n\nconst ALIGNMENTS = {\n 'left': VERTICAL_ALIGNMENTS,\n 'right': VERTICAL_ALIGNMENTS,\n 'top': HORIZONTAL_ALIGNMENTS,\n 'bottom': HORIZONTAL_ALIGNMENTS\n}\n\nfunction nextItem(item, array) {\n var currentIdx = array.indexOf(item);\n if(currentIdx === array.length - 1) {\n return array[0];\n } else {\n return array[currentIdx + 1];\n }\n}\n\n\nclass Positionable extends Plugin {\n /**\n * Abstract class encapsulating the tether-like explicit positioning logic\n * including repositioning based on overlap.\n * Expects classes to define defaults for vOffset, hOffset, position,\n * alignment, allowOverlap, and allowBottomOverlap. They can do this by\n * extending the defaults, or (for now recommended due to the way docs are\n * generated) by explicitly declaring them.\n *\n **/\n\n _init() {\n this.triedPositions = {};\n this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;\n this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;\n this.originalPosition = this.position;\n this.originalAlignment = this.alignment;\n }\n\n _getDefaultPosition () {\n return 'bottom';\n }\n\n _getDefaultAlignment() {\n switch(this.position) {\n case 'bottom':\n case 'top':\n return Rtl() ? 'right' : 'left';\n case 'left':\n case 'right':\n return 'bottom';\n }\n }\n\n /**\n * Adjusts the positionable possible positions by iterating through alignments\n * and positions.\n * @function\n * @private\n */\n _reposition() {\n if(this._alignmentsExhausted(this.position)) {\n this.position = nextItem(this.position, POSITIONS);\n this.alignment = ALIGNMENTS[this.position][0];\n } else {\n this._realign();\n }\n }\n\n /**\n * Adjusts the dropdown pane possible positions by iterating through alignments\n * on the current position.\n * @function\n * @private\n */\n _realign() {\n this._addTriedPosition(this.position, this.alignment)\n this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position])\n }\n\n _addTriedPosition(position, alignment) {\n this.triedPositions[position] = this.triedPositions[position] || []\n this.triedPositions[position].push(alignment);\n }\n\n _positionsExhausted() {\n var isExhausted = true;\n for(var i = 0; i < POSITIONS.length; i++) {\n isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]);\n }\n return isExhausted;\n }\n\n _alignmentsExhausted(position) {\n return this.triedPositions[position] && this.triedPositions[position].length == ALIGNMENTS[position].length;\n }\n\n\n // When we're trying to center, we don't want to apply offset that's going to\n // take us just off center, so wrap around to return 0 for the appropriate\n // offset in those alignments. TODO: Figure out if we want to make this\n // configurable behavior... it feels more intuitive, especially for tooltips, but\n // it's possible someone might actually want to start from center and then nudge\n // slightly off.\n _getVOffset() {\n return this.options.vOffset;\n }\n\n _getHOffset() {\n return this.options.hOffset;\n }\n\n\n _setPosition($anchor, $element, $parent) {\n if($anchor.attr('aria-expanded') === 'false'){ return false; }\n var $eleDims = Box.GetDimensions($element),\n $anchorDims = Box.GetDimensions($anchor);\n\n\n if (!this.options.allowOverlap) {\n // restore original position & alignment before checking overlap\n this.position = this.originalPosition;\n this.alignment = this.originalAlignment;\n }\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n\n if(!this.options.allowOverlap) {\n var overlaps = {};\n var minOverlap = 100000000;\n // default coordinates to how we start, in case we can't figure out better\n var minCoordinates = {position: this.position, alignment: this.alignment};\n while(!this._positionsExhausted()) {\n let overlap = Box.OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap);\n if(overlap === 0) {\n return;\n }\n\n if(overlap < minOverlap) {\n minOverlap = overlap;\n minCoordinates = {position: this.position, alignment: this.alignment};\n }\n\n this._reposition();\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n // If we get through the entire loop, there was no non-overlapping\n // position available. Pick the version with least overlap.\n this.position = minCoordinates.position;\n this.alignment = minCoordinates.alignment;\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n }\n\n}\n\nPositionable.defaults = {\n /**\n * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown positionable first\n * try to position as defined by data-position and data-alignment, but\n * reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Number of pixels the positionable should be separated vertically from anchor\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels the positionable should be separated horizontally from anchor\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n}\n\nexport {Positionable};\n","'use strict';\n\nimport $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Positionable } from './foundation.positionable';\n\nimport { Triggers } from './foundation.util.triggers';\n\n\n/**\n * Dropdown module.\n * @module foundation.dropdown\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.triggers\n */\nclass Dropdown extends Positionable {\n /**\n * Creates a new instance of a dropdown.\n * @class\n * @name Dropdown\n * @param {jQuery} element - jQuery object to make into a dropdown.\n * Object should be of the dropdown panel, rather than its anchor.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options);\n this.className = 'Dropdown'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Dropdown', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor.\n * @function\n * @private\n */\n _init() {\n var $id = this.$element.attr('id');\n\n this.$anchors = $(`[data-toggle=\"${$id}\"]`).length ? $(`[data-toggle=\"${$id}\"]`) : $(`[data-open=\"${$id}\"]`);\n this.$anchors.attr({\n 'aria-controls': $id,\n 'data-is-focus': false,\n 'data-yeti-box': $id,\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n\n this._setCurrentAnchor(this.$anchors.first());\n\n if(this.options.parentClass){\n this.$parent = this.$element.parents('.' + this.options.parentClass);\n }else{\n this.$parent = null;\n }\n\n // Do not change the `labelledby` if it is defined\n var labelledby = this.$element.attr('aria-labelledby')\n || this.$currentAnchor.attr('id')\n || GetYoDigits(6, 'dd-anchor');\n\n this.$element.attr({\n 'aria-hidden': 'true',\n 'data-yeti-box': $id,\n 'data-resize': $id,\n 'aria-labelledby': labelledby\n });\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var position = this.$element[0].className.match(/(top|left|right|bottom)/g);\n if(position) {\n return position[0];\n } else {\n return 'bottom'\n }\n }\n\n _getDefaultAlignment() {\n // handle legacy float approach\n var horizontalPosition = /float-(\\S+)/.exec(this.$currentAnchor.attr('class'));\n if(horizontalPosition) {\n return horizontalPosition[1];\n }\n\n return super._getDefaultAlignment();\n }\n\n\n\n /**\n * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true.\n * Recursively calls itself if a collision is detected, with a new position class.\n * @function\n * @private\n */\n _setPosition() {\n this.$element.removeClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n super._setPosition(this.$currentAnchor, this.$element, this.$parent);\n this.$element.addClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n }\n\n /**\n * Make it a current anchor.\n * Current anchor as the reference for the position of Dropdown panes.\n * @param {HTML} el - DOM element of the anchor.\n * @function\n * @private\n */\n _setCurrentAnchor(el) {\n this.$currentAnchor = $(el);\n }\n\n /**\n * Adds event listeners to the element utilizing the triggers utility library.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': this.close.bind(this),\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': this._setPosition.bind(this)\n });\n\n this.$anchors.off('click.zf.trigger')\n .on('click.zf.trigger', function() { _this._setCurrentAnchor(this); });\n\n if(this.options.hover){\n this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n _this._setCurrentAnchor(this);\n\n var bodyData = $('body').data();\n if(typeof(bodyData.whatinput) === 'undefined' || bodyData.whatinput === 'mouse') {\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.open();\n _this.$anchors.data('hover', true);\n }, _this.options.hoverDelay);\n }\n }).on('mouseleave.zf.dropdown', function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n });\n if(this.options.hoverPane){\n this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n clearTimeout(_this.timeout);\n }).on('mouseleave.zf.dropdown', function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n });\n }\n }\n this.$anchors.add(this.$element).on('keydown.zf.dropdown', function(e) {\n\n var $target = $(this),\n visibleFocusableElements = Keyboard.findFocusable(_this.$element);\n\n Keyboard.handleKey(e, 'Dropdown', {\n open: function() {\n if ($target.is(_this.$anchors) && !$target.is('input, textarea')) {\n _this.open();\n _this.$element.attr('tabindex', -1).focus();\n e.preventDefault();\n }\n },\n close: function() {\n _this.close();\n _this.$anchors.focus();\n }\n });\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n var $body = $(document.body).not(this.$element),\n _this = this;\n $body.off('click.zf.dropdown')\n .on('click.zf.dropdown', function(e){\n if(_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) {\n return;\n }\n if(_this.$element.is(e.target) || _this.$element.find(e.target).length) {\n return;\n }\n _this.close();\n $body.off('click.zf.dropdown');\n });\n }\n\n /**\n * Opens the dropdown pane, and fires a bubbling event to close other dropdowns.\n * @function\n * @fires Dropdown#closeme\n * @fires Dropdown#show\n */\n open() {\n // var _this = this;\n /**\n * Fires to close other open dropdowns, typically when dropdown is opening\n * @event Dropdown#closeme\n */\n this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id'));\n this.$anchors.addClass('hover')\n .attr({'aria-expanded': true});\n // this.$element/*.show()*/;\n\n this.$element.addClass('is-opening');\n this._setPosition();\n this.$element.removeClass('is-opening').addClass('is-open')\n .attr({'aria-hidden': false});\n\n if(this.options.autoFocus){\n var $focusable = Keyboard.findFocusable(this.$element);\n if($focusable.length){\n $focusable.eq(0).focus();\n }\n }\n\n if(this.options.closeOnClick){ this._addBodyHandler(); }\n\n if (this.options.trapFocus) {\n Keyboard.trapFocus(this.$element);\n }\n\n /**\n * Fires once the dropdown is visible.\n * @event Dropdown#show\n */\n this.$element.trigger('show.zf.dropdown', [this.$element]);\n }\n\n /**\n * Closes the open dropdown pane.\n * @function\n * @fires Dropdown#hide\n */\n close() {\n if(!this.$element.hasClass('is-open')){\n return false;\n }\n this.$element.removeClass('is-open')\n .attr({'aria-hidden': true});\n\n this.$anchors.removeClass('hover')\n .attr('aria-expanded', false);\n\n /**\n * Fires once the dropdown is no longer visible.\n * @event Dropdown#hide\n */\n this.$element.trigger('hide.zf.dropdown', [this.$element]);\n\n if (this.options.trapFocus) {\n Keyboard.releaseFocus(this.$element);\n }\n }\n\n /**\n * Toggles the dropdown pane's visibility.\n * @function\n */\n toggle() {\n if(this.$element.hasClass('is-open')){\n if(this.$anchors.data('hover')) return;\n this.close();\n }else{\n this.open();\n }\n }\n\n /**\n * Destroys the dropdown.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.trigger').hide();\n this.$anchors.off('.zf.dropdown');\n $(document.body).off('click.zf.dropdown');\n\n }\n}\n\nDropdown.defaults = {\n /**\n * Class that designates bounding container of Dropdown (default: window)\n * @option\n * @type {?string}\n * @default null\n */\n parentClass: null,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 250\n */\n hoverDelay: 250,\n /**\n * Allow submenus to open on hover events\n * @option\n * @type {boolean}\n * @default false\n */\n hover: false,\n /**\n * Don't close dropdown when hovering over dropdown pane\n * @option\n * @type {boolean}\n * @default false\n */\n hoverPane: false,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Position of dropdown. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands.\n * @option\n * @type {boolean}\n * @default false\n */\n trapFocus: false,\n /**\n * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n /**\n * Allows a click on the body to close the dropdown.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false\n};\n\nexport {Dropdown};\n","'use strict';\n\nimport $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl, onLeaveElement } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { Box } from './foundation.util.box';\n\n/**\n * DropdownMenu module.\n * @module foundation.dropdown-menu\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.nest\n */\n\nclass DropdownMenu extends Plugin {\n /**\n * Creates a new instance of DropdownMenu.\n * @class\n * @name DropdownMenu\n * @fires DropdownMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options);\n this.className = 'DropdownMenu'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('DropdownMenu', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin, and calls _prepareMenu\n * @private\n * @function\n */\n _init() {\n Nest.Feather(this.$element, 'dropdown');\n\n var subs = this.$element.find('li.is-dropdown-submenu-parent');\n this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');\n\n this.$menuItems = this.$element.find('[role=\"menuitem\"]');\n this.$tabs = this.$element.children('[role=\"menuitem\"]');\n this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);\n\n if (this.options.alignment === 'auto') {\n if (this.$element.hasClass(this.options.rightClass) || Rtl() || this.$element.parents('.top-bar-right').is('*')) {\n this.options.alignment = 'right';\n subs.addClass('opens-left');\n } else {\n this.options.alignment = 'left';\n subs.addClass('opens-right');\n }\n } else {\n if (this.options.alignment === 'right') {\n subs.addClass('opens-left');\n } else {\n subs.addClass('opens-right');\n }\n }\n this.changed = false;\n this._events();\n };\n\n _isVertical() {\n return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column';\n }\n\n _isRtl() {\n return this.$element.hasClass('align-right') || (Rtl() && !this.$element.hasClass('align-left'));\n }\n\n /**\n * Adds event listeners to elements within the menu\n * @private\n * @function\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined'),\n parClass = 'is-dropdown-submenu-parent';\n\n // used for onClick and in the keyboard handlers\n var handleClickFn = function(e) {\n var $elem = $(e.target).parentsUntil('ul', `.${parClass}`),\n hasSub = $elem.hasClass(parClass),\n hasClicked = $elem.attr('data-is-click') === 'true',\n $sub = $elem.children('.is-dropdown-submenu');\n\n if (hasSub) {\n if (hasClicked) {\n if (!_this.options.closeOnClick || (!_this.options.clickOpen && !hasTouch) || (_this.options.forceFollow && hasTouch)) { return; }\n else {\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._hide($elem);\n }\n } else {\n e.preventDefault();\n e.stopImmediatePropagation();\n _this._show($sub);\n $elem.add($elem.parentsUntil(_this.$element, `.${parClass}`)).attr('data-is-click', true);\n }\n }\n };\n\n if (this.options.clickOpen || hasTouch) {\n this.$menuItems.on('click.zf.dropdownmenu touchstart.zf.dropdownmenu', handleClickFn);\n }\n\n // Handle Leaf element Clicks\n if(_this.options.closeOnClickInside){\n this.$menuItems.on('click.zf.dropdownmenu', function(e) {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if(!hasSub){\n _this._hide();\n }\n });\n }\n\n if (!this.options.disableHover) {\n this.$menuItems.on('mouseenter.zf.dropdownmenu', function (e) {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n\n if (hasSub) {\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._show($elem.children('.is-dropdown-submenu'));\n }, _this.options.hoverDelay));\n }\n });\n\n onLeaveElement(this.$menuItems, function (e) {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if (hasSub && _this.options.autoclose) {\n if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { return false; }\n\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._hide($elem);\n }, _this.options.closingTime));\n }\n });\n }\n this.$menuItems.on('keydown.zf.dropdownmenu', function(e) {\n var $element = $(e.target).parentsUntil('ul', '[role=\"menuitem\"]'),\n isTab = _this.$tabs.index($element) > -1,\n $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(i-1);\n $nextElement = $elements.eq(i+1);\n return;\n }\n });\n\n var nextSibling = function() {\n $nextElement.children('a:first').focus();\n e.preventDefault();\n }, prevSibling = function() {\n $prevElement.children('a:first').focus();\n e.preventDefault();\n }, openSub = function() {\n var $sub = $element.children('ul.is-dropdown-submenu');\n if ($sub.length) {\n _this._show($sub);\n $element.find('li > a:first').focus();\n e.preventDefault();\n } else { return; }\n }, closeSub = function() {\n //if ($element.is(':first-child')) {\n var close = $element.parent('ul').parent('li');\n close.children('a:first').focus();\n _this._hide(close);\n e.preventDefault();\n //}\n };\n var functions = {\n open: openSub,\n close: function() {\n _this._hide(_this.$element);\n _this.$menuItems.eq(0).children('a').focus(); // focus to first element\n e.preventDefault();\n },\n handled: function() {\n e.stopImmediatePropagation();\n }\n };\n\n if (isTab) {\n if (_this._isVertical()) { // vertical menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: closeSub,\n previous: openSub\n });\n } else { // left aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: openSub,\n previous: closeSub\n });\n }\n } else { // horizontal menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: prevSibling,\n previous: nextSibling,\n down: openSub,\n up: closeSub\n });\n } else { // left aligned\n $.extend(functions, {\n next: nextSibling,\n previous: prevSibling,\n down: openSub,\n up: closeSub\n });\n }\n }\n } else { // not tabs -> one sub\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: closeSub,\n previous: openSub,\n down: nextSibling,\n up: prevSibling\n });\n } else { // left aligned\n $.extend(functions, {\n next: openSub,\n previous: closeSub,\n down: nextSibling,\n up: prevSibling\n });\n }\n }\n Keyboard.handleKey(e, 'DropdownMenu', functions);\n\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n var $body = $(document.body),\n _this = this;\n $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu')\n .on('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu', function(e) {\n var $link = _this.$element.find(e.target);\n if ($link.length) { return; }\n\n _this._hide();\n $body.off('mouseup.zf.dropdownmenu touchend.zf.dropdownmenu');\n });\n }\n\n /**\n * Opens a dropdown pane, and checks for collisions first.\n * @param {jQuery} $sub - ul element that is a submenu to show\n * @function\n * @private\n * @fires Dropdownmenu#show\n */\n _show($sub) {\n var idx = this.$tabs.index(this.$tabs.filter(function(i, el) {\n return $(el).find($sub).length > 0;\n }));\n var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');\n this._hide($sibs, idx);\n $sub.css('visibility', 'hidden').addClass('js-dropdown-active')\n .parent('li.is-dropdown-submenu-parent').addClass('is-active');\n var clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n var oldClass = this.options.alignment === 'left' ? '-right' : '-left',\n $parentLi = $sub.parent('.is-dropdown-submenu-parent');\n $parentLi.removeClass(`opens${oldClass}`).addClass(`opens-${this.options.alignment}`);\n clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n $parentLi.removeClass(`opens-${this.options.alignment}`).addClass('opens-inner');\n }\n this.changed = true;\n }\n $sub.css('visibility', '');\n if (this.options.closeOnClick) { this._addBodyHandler(); }\n /**\n * Fires when the new dropdown pane is visible.\n * @event Dropdownmenu#show\n */\n this.$element.trigger('show.zf.dropdownmenu', [$sub]);\n }\n\n /**\n * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.\n * @function\n * @param {jQuery} $elem - element with a submenu to hide\n * @param {Number} idx - index of the $tabs collection to hide\n * @private\n */\n _hide($elem, idx) {\n var $toClose;\n if ($elem && $elem.length) {\n $toClose = $elem;\n } else if (typeof idx !== 'undefined') {\n $toClose = this.$tabs.not(function(i, el) {\n return i === idx;\n });\n }\n else {\n $toClose = this.$element;\n }\n var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;\n\n if (somethingToClose) {\n $toClose.find('li.is-active').add($toClose).attr({\n 'data-is-click': false\n }).removeClass('is-active');\n\n $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');\n\n if (this.changed || $toClose.find('opens-inner').length) {\n var oldClass = this.options.alignment === 'left' ? 'right' : 'left';\n $toClose.find('li.is-dropdown-submenu-parent').add($toClose)\n .removeClass(`opens-inner opens-${this.options.alignment}`)\n .addClass(`opens-${oldClass}`);\n this.changed = false;\n }\n /**\n * Fires when the open menus are closed.\n * @event Dropdownmenu#hide\n */\n this.$element.trigger('hide.zf.dropdownmenu', [$toClose]);\n }\n }\n\n /**\n * Destroys the plugin.\n * @function\n */\n _destroy() {\n this.$menuItems.off('.zf.dropdownmenu').removeAttr('data-is-click')\n .removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');\n $(document.body).off('.zf.dropdownmenu');\n Nest.Burn(this.$element, 'dropdown');\n }\n}\n\n/**\n * Default settings for plugin\n */\nDropdownMenu.defaults = {\n /**\n * Disallows hover events from opening submenus\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Allow a submenu to automatically close on a mouseleave event, if not clicked open.\n * @option\n * @type {boolean}\n * @default true\n */\n autoclose: true,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 50\n */\n hoverDelay: 50,\n /**\n * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.\n * @option\n * @type {boolean}\n * @default false\n */\n clickOpen: false,\n /**\n * Amount of time to delay closing a submenu on a mouseleave event.\n * @option\n * @type {number}\n * @default 500\n */\n\n closingTime: 500,\n /**\n * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow clicks on the body to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allow clicks on leaf anchor links to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClickInside: true,\n /**\n * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'vertical'\n */\n verticalClass: 'vertical',\n /**\n * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'align-right'\n */\n rightClass: 'align-right',\n /**\n * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {DropdownMenu};\n","'use strict';\n\nimport $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Equalizer module.\n * @module foundation.equalizer\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.imageLoader if equalizer contains images\n */\n\nclass Equalizer extends Plugin {\n /**\n * Creates a new instance of Equalizer.\n * @class\n * @name Equalizer\n * @fires Equalizer#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options){\n this.$element = element;\n this.options = $.extend({}, Equalizer.defaults, this.$element.data(), options);\n this.className = 'Equalizer'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load.\n * @private\n */\n _init() {\n var eqId = this.$element.attr('data-equalizer') || '';\n var $watched = this.$element.find(`[data-equalizer-watch=\"${eqId}\"]`);\n\n MediaQuery._init();\n\n this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]');\n this.$element.attr('data-resize', (eqId || GetYoDigits(6, 'eq')));\n this.$element.attr('data-mutate', (eqId || GetYoDigits(6, 'eq')));\n\n this.hasNested = this.$element.find('[data-equalizer]').length > 0;\n this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0;\n this.isOn = false;\n this._bindHandler = {\n onResizeMeBound: this._onResizeMe.bind(this),\n onPostEqualizedBound: this._onPostEqualized.bind(this)\n };\n\n var imgs = this.$element.find('img');\n var tooSmall;\n if(this.options.equalizeOn){\n tooSmall = this._checkMQ();\n $(window).on('changed.zf.mediaquery', this._checkMQ.bind(this));\n }else{\n this._events();\n }\n if((typeof tooSmall !== 'undefined' && tooSmall === false) || typeof tooSmall === 'undefined'){\n if(imgs.length){\n onImagesLoaded(imgs, this._reflow.bind(this));\n }else{\n this._reflow();\n }\n }\n }\n\n /**\n * Removes event listeners if the breakpoint is too small.\n * @private\n */\n _pauseEvents() {\n this.isOn = false;\n this.$element.off({\n '.zf.equalizer': this._bindHandler.onPostEqualizedBound,\n 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound,\n\t 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound\n });\n }\n\n /**\n * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound\n * @private\n */\n _onResizeMe(e) {\n this._reflow();\n }\n\n /**\n * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound\n * @private\n */\n _onPostEqualized(e) {\n if(e.target !== this.$element[0]){ this._reflow(); }\n }\n\n /**\n * Initializes events for Equalizer.\n * @private\n */\n _events() {\n var _this = this;\n this._pauseEvents();\n if(this.hasNested){\n this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound);\n }else{\n this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound);\n\t this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound);\n }\n this.isOn = true;\n }\n\n /**\n * Checks the current breakpoint to the minimum required size.\n * @private\n */\n _checkMQ() {\n var tooSmall = !MediaQuery.is(this.options.equalizeOn);\n if(tooSmall){\n if(this.isOn){\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n }else{\n if(!this.isOn){\n this._events();\n }\n }\n return tooSmall;\n }\n\n /**\n * A noop version for the plugin\n * @private\n */\n _killswitch() {\n return;\n }\n\n /**\n * Calls necessary functions to update Equalizer upon DOM change\n * @private\n */\n _reflow() {\n if(!this.options.equalizeOnStack){\n if(this._isStacked()){\n this.$watched.css('height', 'auto');\n return false;\n }\n }\n if (this.options.equalizeByRow) {\n this.getHeightsByRow(this.applyHeightByRow.bind(this));\n }else{\n this.getHeights(this.applyHeight.bind(this));\n }\n }\n\n /**\n * Manually determines if the first 2 elements are *NOT* stacked.\n * @private\n */\n _isStacked() {\n if (!this.$watched[0] || !this.$watched[1]) {\n return true;\n }\n return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top;\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} heights - An array of heights of children within Equalizer container\n */\n getHeights(cb) {\n var heights = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n heights.push(this.$watched[i].offsetHeight);\n }\n cb(heights);\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n */\n getHeightsByRow(cb) {\n var lastElTopOffset = (this.$watched.length ? this.$watched.first().offset().top : 0),\n groups = [],\n group = 0;\n //group by Row\n groups[group] = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n //maybe could use this.$watched[i].offsetTop\n var elOffsetTop = $(this.$watched[i]).offset().top;\n if (elOffsetTop!=lastElTopOffset) {\n group++;\n groups[group] = [];\n lastElTopOffset=elOffsetTop;\n }\n groups[group].push([this.$watched[i],this.$watched[i].offsetHeight]);\n }\n\n for (var j = 0, ln = groups.length; j < ln; j++) {\n var heights = $(groups[j]).map(function(){ return this[1]; }).get();\n var max = Math.max.apply(null, heights);\n groups[j].push(max);\n }\n cb(groups);\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest\n * @param {array} heights - An array of heights of children within Equalizer container\n * @fires Equalizer#preequalized\n * @fires Equalizer#postequalized\n */\n applyHeight(heights) {\n var max = Math.max.apply(null, heights);\n /**\n * Fires before the heights are applied\n * @event Equalizer#preequalized\n */\n this.$element.trigger('preequalized.zf.equalizer');\n\n this.$watched.css('height', max);\n\n /**\n * Fires when the heights have been applied\n * @event Equalizer#postequalized\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row\n * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n * @fires Equalizer#preequalized\n * @fires Equalizer#preequalizedrow\n * @fires Equalizer#postequalizedrow\n * @fires Equalizer#postequalized\n */\n applyHeightByRow(groups) {\n /**\n * Fires before the heights are applied\n */\n this.$element.trigger('preequalized.zf.equalizer');\n for (var i = 0, len = groups.length; i < len ; i++) {\n var groupsILength = groups[i].length,\n max = groups[i][groupsILength - 1];\n if (groupsILength<=2) {\n $(groups[i][0][0]).css({'height':'auto'});\n continue;\n }\n /**\n * Fires before the heights per row are applied\n * @event Equalizer#preequalizedrow\n */\n this.$element.trigger('preequalizedrow.zf.equalizer');\n for (var j = 0, lenJ = (groupsILength-1); j < lenJ ; j++) {\n $(groups[i][j][0]).css({'height':max});\n }\n /**\n * Fires when the heights per row have been applied\n * @event Equalizer#postequalizedrow\n */\n this.$element.trigger('postequalizedrow.zf.equalizer');\n }\n /**\n * Fires when the heights have been applied\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Destroys an instance of Equalizer.\n * @function\n */\n _destroy() {\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n}\n\n/**\n * Default settings for plugin\n */\nEqualizer.defaults = {\n /**\n * Enable height equalization when stacked on smaller screens.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeOnStack: false,\n /**\n * Enable height equalization row by row.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeByRow: false,\n /**\n * String representing the minimum breakpoint size the plugin should equalize heights on.\n * @option\n * @type {string}\n * @default ''\n */\n equalizeOn: ''\n};\n\nexport {Equalizer};\n","'use strict';\n\nimport $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Plugin } from './foundation.core.plugin';\nimport { GetYoDigits } from './foundation.core.utils';\n\n\n/**\n * Interchange module.\n * @module foundation.interchange\n * @requires foundation.util.mediaQuery\n */\n\nclass Interchange extends Plugin {\n /**\n * Creates a new instance of Interchange.\n * @class\n * @name Interchange\n * @fires Interchange#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Interchange.defaults, options);\n this.rules = [];\n this.currentPath = '';\n this.className = 'Interchange'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Interchange plugin and calls functions to get interchange functioning on load.\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n var id = this.$element[0].id || GetYoDigits(6, 'interchange');\n this.$element.attr({\n 'data-resize': id,\n 'id': id\n });\n\n this._addBreakpoints();\n this._generateRules();\n this._reflow();\n }\n\n /**\n * Initializes events for Interchange.\n * @function\n * @private\n */\n _events() {\n this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', () => this._reflow());\n }\n\n /**\n * Calls necessary functions to update Interchange upon DOM change\n * @function\n * @private\n */\n _reflow() {\n var match;\n\n // Iterate through each rule, but only save the last match\n for (var i in this.rules) {\n if(this.rules.hasOwnProperty(i)) {\n var rule = this.rules[i];\n if (window.matchMedia(rule.query).matches) {\n match = rule;\n }\n }\n }\n\n if (match) {\n this.replace(match.path);\n }\n }\n\n /**\n * Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object.\n * @function\n * @private\n */\n _addBreakpoints() {\n for (var i in MediaQuery.queries) {\n if (MediaQuery.queries.hasOwnProperty(i)) {\n var query = MediaQuery.queries[i];\n Interchange.SPECIAL_QUERIES[query.name] = query.value;\n }\n }\n }\n\n /**\n * Checks the Interchange element for the provided media query + content pairings\n * @function\n * @private\n * @param {Object} element - jQuery object that is an Interchange instance\n * @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys\n */\n _generateRules(element) {\n var rulesList = [];\n var rules;\n\n if (this.options.rules) {\n rules = this.options.rules;\n }\n else {\n rules = this.$element.data('interchange');\n }\n\n rules = typeof rules === 'string' ? rules.match(/\\[.*?, .*?\\]/g) : rules;\n\n for (var i in rules) {\n if(rules.hasOwnProperty(i)) {\n var rule = rules[i].slice(1, -1).split(', ');\n var path = rule.slice(0, -1).join('');\n var query = rule[rule.length - 1];\n\n if (Interchange.SPECIAL_QUERIES[query]) {\n query = Interchange.SPECIAL_QUERIES[query];\n }\n\n rulesList.push({\n path: path,\n query: query\n });\n }\n }\n\n this.rules = rulesList;\n }\n\n /**\n * Update the `src` property of an image, or change the HTML of a container, to the specified path.\n * @function\n * @param {String} path - Path to the image or HTML partial.\n * @fires Interchange#replaced\n */\n replace(path) {\n if (this.currentPath === path) return;\n\n var _this = this,\n trigger = 'replaced.zf.interchange';\n\n // Replacing images\n if (this.$element[0].nodeName === 'IMG') {\n this.$element.attr('src', path).on('load', function() {\n _this.currentPath = path;\n })\n .trigger(trigger);\n }\n // Replacing background images\n else if (path.match(/\\.(gif|jpg|jpeg|png|svg|tiff)([?#].*)?/i)) {\n path = path.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\n this.$element.css({ 'background-image': 'url('+path+')' })\n .trigger(trigger);\n }\n // Replacing HTML\n else {\n $.get(path, function(response) {\n _this.$element.html(response)\n .trigger(trigger);\n $(response).foundation();\n _this.currentPath = path;\n });\n }\n\n /**\n * Fires when content in an Interchange element is done being loaded.\n * @event Interchange#replaced\n */\n // this.$element.trigger('replaced.zf.interchange');\n }\n\n /**\n * Destroys an instance of interchange.\n * @function\n */\n _destroy() {\n this.$element.off('resizeme.zf.trigger')\n }\n}\n\n/**\n * Default settings for plugin\n */\nInterchange.defaults = {\n /**\n * Rules to be applied to Interchange elements. Set with the `data-interchange` array notation.\n * @option\n * @type {?array}\n * @default null\n */\n rules: null\n};\n\nInterchange.SPECIAL_QUERIES = {\n 'landscape': 'screen and (orientation: landscape)',\n 'portrait': 'screen and (orientation: portrait)',\n 'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)'\n};\n\nexport {Interchange};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * SmoothScroll module.\n * @module foundation.smooth-scroll\n */\nclass SmoothScroll extends Plugin {\n /**\n * Creates a new instance of SmoothScroll.\n * @class\n * @name SmoothScroll\n * @fires SmoothScroll#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, SmoothScroll.defaults, this.$element.data(), options);\n this.className = 'SmoothScroll'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initialize the SmoothScroll plugin\n * @private\n */\n _init() {\n const id = this.$element[0].id || GetYoDigits(6, 'smooth-scroll');\n this.$element.attr({ id });\n\n this._events();\n }\n\n /**\n * Initializes events for SmoothScroll.\n * @private\n */\n _events() {\n this.$element.on('click.zf.smoothScroll', this._handleLinkClick)\n this.$element.on('click.zf.smoothScroll', 'a[href^=\"#\"]', this._handleLinkClick);\n }\n\n /**\n * Handle the given event to smoothly scroll to the anchor pointed by the event target.\n * @param {*} e - event\n * @function\n * @private\n */\n _handleLinkClick(e) {\n // Follow the link if it does not point to an anchor.\n if (!$(e.currentTarget).is('a[href^=\"#\"]')) return;\n\n const arrival = e.currentTarget.getAttribute('href');\n\n this._inTransition = true;\n\n SmoothScroll.scrollToLoc(arrival, this.options, () => {\n this._inTransition = false;\n });\n\n e.preventDefault();\n };\n\n /**\n * Function to scroll to a given location on the page.\n * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo'\n * @param {Object} options - The options to use.\n * @param {Function} callback - The callback function.\n * @static\n * @function\n */\n static scrollToLoc(loc, options = SmoothScroll.defaults, callback) {\n const $loc = $(loc);\n\n // Do nothing if target does not exist to prevent errors\n if (!$loc.length) return false;\n\n var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset);\n\n $('html, body').stop(true).animate(\n { scrollTop: scrollPos },\n options.animationDuration,\n options.animationEasing,\n () => {\n if (typeof callback === 'function'){\n callback();\n }\n }\n );\n }\n\n /**\n * Destroys the SmoothScroll instance.\n * @function\n */\n _destroy() {\n this.$element.off('click.zf.smoothScroll', this._handleLinkClick)\n this.$element.off('click.zf.smoothScroll', 'a[href^=\"#\"]', this._handleLinkClick);\n }\n}\n\n/**\n * Default settings for plugin.\n */\nSmoothScroll.defaults = {\n /**\n * Amount of time, in ms, the animated scrolling should take between locations.\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @default 'linear'\n * @see {@link https://api.jquery.com/animate|Jquery animate}\n */\n animationEasing: 'linear',\n /**\n * Number of pixels to use as a marker for location changes.\n * @option\n * @type {number}\n * @default 50\n */\n threshold: 50,\n /**\n * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n * @option\n * @type {number}\n * @default 0\n */\n offset: 0\n}\n\nexport {SmoothScroll}\n","'use strict';\n\n\nimport $ from 'jquery';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\nimport { SmoothScroll } from './foundation.smoothScroll';\n\n/**\n * Magellan module.\n * @module foundation.magellan\n * @requires foundation.smoothScroll\n */\n\nclass Magellan extends Plugin {\n /**\n * Creates a new instance of Magellan.\n * @class\n * @name Magellan\n * @fires Magellan#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Magellan.defaults, this.$element.data(), options);\n this.className = 'Magellan'; // ie9 back compat\n\n this._init();\n this.calcPoints();\n }\n\n /**\n * Initializes the Magellan plugin and calls functions to get equalizer functioning on load.\n * @private\n */\n _init() {\n var id = this.$element[0].id || GetYoDigits(6, 'magellan');\n var _this = this;\n this.$targets = $('[data-magellan-target]');\n this.$links = this.$element.find('a');\n this.$element.attr({\n 'data-resize': id,\n 'data-scroll': id,\n 'id': id\n });\n this.$active = $();\n this.scrollPos = parseInt(window.pageYOffset, 10);\n\n this._events();\n }\n\n /**\n * Calculates an array of pixel values that are the demarcation lines between locations on the page.\n * Can be invoked if new elements are added or the size of a location changes.\n * @function\n */\n calcPoints() {\n var _this = this,\n body = document.body,\n html = document.documentElement;\n\n this.points = [];\n this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight));\n this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight));\n\n this.$targets.each(function(){\n var $tar = $(this),\n pt = Math.round($tar.offset().top - _this.options.threshold);\n $tar.targetPoint = pt;\n _this.points.push(pt);\n });\n }\n\n /**\n * Initializes events for Magellan.\n * @private\n */\n _events() {\n var _this = this,\n $body = $('html, body'),\n opts = {\n duration: _this.options.animationDuration,\n easing: _this.options.animationEasing\n };\n\n $(window).one('load', function(){\n if(_this.options.deepLinking){\n if(location.hash){\n _this.scrollToLoc(location.hash);\n }\n }\n _this.calcPoints();\n _this._updateActive();\n });\n\n _this.onLoadListener = onLoad($(window), function () {\n _this.$element\n .on({\n 'resizeme.zf.trigger': _this.reflow.bind(_this),\n 'scrollme.zf.trigger': _this._updateActive.bind(_this)\n })\n .on('click.zf.magellan', 'a[href^=\"#\"]', function (e) {\n e.preventDefault();\n var arrival = this.getAttribute('href');\n _this.scrollToLoc(arrival);\n });\n });\n\n this._deepLinkScroll = function(e) {\n if(_this.options.deepLinking) {\n _this.scrollToLoc(window.location.hash);\n }\n };\n\n $(window).on('hashchange', this._deepLinkScroll);\n }\n\n /**\n * Function to scroll to a given location on the page.\n * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo'\n * @function\n */\n scrollToLoc(loc) {\n this._inTransition = true;\n var _this = this;\n\n var options = {\n animationEasing: this.options.animationEasing,\n animationDuration: this.options.animationDuration,\n threshold: this.options.threshold,\n offset: this.options.offset\n };\n\n SmoothScroll.scrollToLoc(loc, options, function() {\n _this._inTransition = false;\n })\n }\n\n /**\n * Calls necessary functions to update Magellan upon DOM change\n * @function\n */\n reflow() {\n this.calcPoints();\n this._updateActive();\n }\n\n /**\n * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled.\n * @private\n * @function\n * @fires Magellan#update\n */\n _updateActive(/*evt, elem, scrollPos*/) {\n if(this._inTransition) return;\n\n const newScrollPos = parseInt(window.pageYOffset, 10);\n const isScrollingUp = this.scrollPos > newScrollPos;\n this.scrollPos = newScrollPos;\n\n let activeIdx;\n // Before the first point: no link\n if(newScrollPos < this.points[0]){ /* do nothing */ }\n // At the bottom of the page: last link\n else if(newScrollPos + this.winHeight === this.docHeight){ activeIdx = this.points.length - 1; }\n // Otherwhise, use the last visible link\n else{\n const visibleLinks = this.points.filter((p, i) => {\n return (p - this.options.offset - (isScrollingUp ? this.options.threshold : 0)) <= newScrollPos;\n });\n activeIdx = visibleLinks.length ? visibleLinks.length - 1 : 0;\n }\n\n // Get the new active link\n const $oldActive = this.$active;\n let activeHash = '';\n if(typeof activeIdx !== 'undefined'){\n this.$active = this.$links.filter('[href=\"#' + this.$targets.eq(activeIdx).data('magellan-target') + '\"]');\n if (this.$active.length) activeHash = this.$active[0].getAttribute('href');\n }else{\n this.$active = $();\n }\n const isNewActive = !(!this.$active.length && !$oldActive.length) && !this.$active.is($oldActive);\n const isNewHash = activeHash !== window.location.hash;\n\n // Update the active link element\n if(isNewActive) {\n $oldActive.removeClass(this.options.activeClass);\n this.$active.addClass(this.options.activeClass);\n }\n\n // Update the hash (it may have changed with the same active link)\n if(this.options.deepLinking && isNewHash){\n if(window.history.pushState){\n // Set or remove the hash (see: https://stackoverflow.com/a/5298684/4317384\n const url = activeHash ? activeHash : window.location.pathname + window.location.search;\n window.history.pushState(null, null, url);\n }else{\n window.location.hash = activeHash;\n }\n }\n\n if (isNewActive) {\n /**\n * Fires when magellan is finished updating to the new active element.\n * @event Magellan#update\n */\n \tthis.$element.trigger('update.zf.magellan', [this.$active]);\n\t }\n }\n\n /**\n * Destroys an instance of Magellan and resets the url of the window.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.trigger .zf.magellan')\n .find(`.${this.options.activeClass}`).removeClass(this.options.activeClass);\n\n if(this.options.deepLinking){\n var hash = this.$active[0].getAttribute('href');\n window.location.hash.replace(hash, '');\n }\n\n $(window).off('hashchange', this._deepLinkScroll)\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n }\n}\n\n/**\n * Default settings for plugin\n */\nMagellan.defaults = {\n /**\n * Amount of time, in ms, the animated scrolling should take between locations.\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @default 'linear'\n * @see {@link https://api.jquery.com/animate|Jquery animate}\n */\n animationEasing: 'linear',\n /**\n * Number of pixels to use as a marker for location changes.\n * @option\n * @type {number}\n * @default 50\n */\n threshold: 50,\n /**\n * Class applied to the active locations link on the magellan container.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n activeClass: 'is-active',\n /**\n * Allows the script to manipulate the url of the current page, and if supported, alter the history.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinking: false,\n /**\n * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n * @option\n * @type {number}\n * @default 0\n */\n offset: 0\n}\n\nexport {Magellan};\n","'use strict';\n\nimport $ from 'jquery';\nimport { onLoad, transitionend, RegExpEscape } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Plugin } from './foundation.core.plugin';\n\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * OffCanvas module.\n * @module foundation.offcanvas\n * @requires foundation.util.keyboard\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.triggers\n */\n\nclass OffCanvas extends Plugin {\n /**\n * Creates a new instance of an off-canvas wrapper.\n * @class\n * @name OffCanvas\n * @fires OffCanvas#init\n * @param {Object} element - jQuery object to initialize.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.className = 'OffCanvas'; // ie9 back compat\n this.$element = element;\n this.options = $.extend({}, OffCanvas.defaults, this.$element.data(), options);\n this.contentClasses = { base: [], reveal: [] };\n this.$lastTrigger = $();\n this.$triggers = $();\n this.position = 'left';\n this.$content = $();\n this.nested = !!(this.options.nested);\n\n // Defines the CSS transition/position classes of the off-canvas content container.\n $(['push', 'overlap']).each((index, val) => {\n this.contentClasses.base.push('has-transition-'+val);\n });\n $(['left', 'right', 'top', 'bottom']).each((index, val) => {\n this.contentClasses.base.push('has-position-'+val);\n this.contentClasses.reveal.push('has-reveal-'+val);\n });\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n MediaQuery._init();\n\n this._init();\n this._events();\n\n Keyboard.register('OffCanvas', {\n 'ESCAPE': 'close'\n });\n\n }\n\n /**\n * Initializes the off-canvas wrapper by adding the exit overlay (if needed).\n * @function\n * @private\n */\n _init() {\n var id = this.$element.attr('id');\n\n this.$element.attr('aria-hidden', 'true');\n\n // Find off-canvas content, either by ID (if specified), by siblings or by closest selector (fallback)\n if (this.options.contentId) {\n this.$content = $('#'+this.options.contentId);\n } else if (this.$element.siblings('[data-off-canvas-content]').length) {\n this.$content = this.$element.siblings('[data-off-canvas-content]').first();\n } else {\n this.$content = this.$element.closest('[data-off-canvas-content]').first();\n }\n\n if (!this.options.contentId) {\n // Assume that the off-canvas element is nested if it isn't a sibling of the content\n this.nested = this.$element.siblings('[data-off-canvas-content]').length === 0;\n\n } else if (this.options.contentId && this.options.nested === null) {\n // Warning if using content ID without setting the nested option\n // Once the element is nested it is required to work properly in this case\n console.warn('Remember to use the nested option if using the content ID option!');\n }\n\n if (this.nested === true) {\n // Force transition overlap if nested\n this.options.transition = 'overlap';\n // Remove appropriate classes if already assigned in markup\n this.$element.removeClass('is-transition-push');\n }\n\n this.$element.addClass(`is-transition-${this.options.transition} is-closed`);\n\n // Find triggers that affect this element and add aria-expanded to them\n this.$triggers = $(document)\n .find('[data-open=\"'+id+'\"], [data-close=\"'+id+'\"], [data-toggle=\"'+id+'\"]')\n .attr('aria-expanded', 'false')\n .attr('aria-controls', id);\n\n // Get position by checking for related CSS class\n this.position = this.$element.is('.position-left, .position-top, .position-right, .position-bottom') ? this.$element.attr('class').match(/position\\-(left|top|right|bottom)/)[1] : this.position;\n\n // Add an overlay over the content if necessary\n if (this.options.contentOverlay === true) {\n var overlay = document.createElement('div');\n var overlayPosition = $(this.$element).css(\"position\") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute';\n overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition);\n this.$overlay = $(overlay);\n if(overlayPosition === 'is-overlay-fixed') {\n $(this.$overlay).insertAfter(this.$element);\n } else {\n this.$content.append(this.$overlay);\n }\n }\n\n // Get the revealOn option from the class.\n var revealOnRegExp = new RegExp(RegExpEscape(this.options.revealClass) + '([^\\\\s]+)', 'g');\n var revealOnClass = revealOnRegExp.exec(this.$element[0].className);\n if (revealOnClass) {\n this.options.isRevealed = true;\n this.options.revealOn = this.options.revealOn || revealOnClass[1];\n }\n\n // Ensure the `reveal-on-*` class is set.\n if (this.options.isRevealed === true && this.options.revealOn) {\n this.$element.first().addClass(`${this.options.revealClass}${this.options.revealOn}`);\n this._setMQChecker();\n }\n\n if (this.options.transitionTime) {\n this.$element.css('transition-duration', this.options.transitionTime);\n }\n\n // Initally remove all transition/position CSS classes from off-canvas content container.\n this._removeContentClasses();\n }\n\n /**\n * Adds event handlers to the off-canvas wrapper and the exit overlay.\n * @function\n * @private\n */\n _events() {\n this.$element.off('.zf.trigger .zf.offcanvas').on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': this.close.bind(this),\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'keydown.zf.offcanvas': this._handleKeyboard.bind(this)\n });\n\n if (this.options.closeOnClick === true) {\n var $target = this.options.contentOverlay ? this.$overlay : this.$content;\n $target.on({'click.zf.offcanvas': this.close.bind(this)});\n }\n }\n\n /**\n * Applies event listener for elements that will reveal at certain breakpoints.\n * @private\n */\n _setMQChecker() {\n var _this = this;\n\n this.onLoadListener = onLoad($(window), function () {\n if (MediaQuery.atLeast(_this.options.revealOn)) {\n _this.reveal(true);\n }\n });\n\n $(window).on('changed.zf.mediaquery', function () {\n if (MediaQuery.atLeast(_this.options.revealOn)) {\n _this.reveal(true);\n } else {\n _this.reveal(false);\n }\n });\n }\n\n /**\n * Removes the CSS transition/position classes of the off-canvas content container.\n * Removing the classes is important when another off-canvas gets opened that uses the same content container.\n * @param {Boolean} hasReveal - true if related off-canvas element is revealed.\n * @private\n */\n _removeContentClasses(hasReveal) {\n if (typeof hasReveal !== 'boolean') {\n this.$content.removeClass(this.contentClasses.base.join(' '));\n } else if (hasReveal === false) {\n this.$content.removeClass(`has-reveal-${this.position}`);\n }\n }\n\n /**\n * Adds the CSS transition/position classes of the off-canvas content container, based on the opening off-canvas element.\n * Beforehand any transition/position class gets removed.\n * @param {Boolean} hasReveal - true if related off-canvas element is revealed.\n * @private\n */\n _addContentClasses(hasReveal) {\n this._removeContentClasses(hasReveal);\n if (typeof hasReveal !== 'boolean') {\n this.$content.addClass(`has-transition-${this.options.transition} has-position-${this.position}`);\n } else if (hasReveal === true) {\n this.$content.addClass(`has-reveal-${this.position}`);\n }\n }\n\n /**\n * Handles the revealing/hiding the off-canvas at breakpoints, not the same as open.\n * @param {Boolean} isRevealed - true if element should be revealed.\n * @function\n */\n reveal(isRevealed) {\n if (isRevealed) {\n this.close();\n this.isRevealed = true;\n this.$element.attr('aria-hidden', 'false');\n this.$element.off('open.zf.trigger toggle.zf.trigger');\n this.$element.removeClass('is-closed');\n } else {\n this.isRevealed = false;\n this.$element.attr('aria-hidden', 'true');\n this.$element.off('open.zf.trigger toggle.zf.trigger').on({\n 'open.zf.trigger': this.open.bind(this),\n 'toggle.zf.trigger': this.toggle.bind(this)\n });\n this.$element.addClass('is-closed');\n }\n this._addContentClasses(isRevealed);\n }\n\n /**\n * Stops scrolling of the body when offcanvas is open on mobile Safari and other troublesome browsers.\n * @private\n */\n _stopScrolling(event) {\n return false;\n }\n\n // Taken and adapted from http://stackoverflow.com/questions/16889447/prevent-full-page-scrolling-ios\n // Only really works for y, not sure how to extend to x or if we need to.\n _recordScrollable(event) {\n let elem = this; // called from event handler context with this as elem\n\n // If the element is scrollable (content overflows), then...\n if (elem.scrollHeight !== elem.clientHeight) {\n // If we're at the top, scroll down one pixel to allow scrolling up\n if (elem.scrollTop === 0) {\n elem.scrollTop = 1;\n }\n // If we're at the bottom, scroll up one pixel to allow scrolling down\n if (elem.scrollTop === elem.scrollHeight - elem.clientHeight) {\n elem.scrollTop = elem.scrollHeight - elem.clientHeight - 1;\n }\n }\n elem.allowUp = elem.scrollTop > 0;\n elem.allowDown = elem.scrollTop < (elem.scrollHeight - elem.clientHeight);\n elem.lastY = event.originalEvent.pageY;\n }\n\n _stopScrollPropagation(event) {\n let elem = this; // called from event handler context with this as elem\n let up = event.pageY < elem.lastY;\n let down = !up;\n elem.lastY = event.pageY;\n\n if((up && elem.allowUp) || (down && elem.allowDown)) {\n event.stopPropagation();\n } else {\n event.preventDefault();\n }\n }\n\n /**\n * Opens the off-canvas menu.\n * @function\n * @param {Object} event - Event object passed from listener.\n * @param {jQuery} trigger - element that triggered the off-canvas to open.\n * @fires Offcanvas#opened\n * @todo also trigger 'open' event?\n */\n open(event, trigger) {\n if (this.$element.hasClass('is-open') || this.isRevealed) { return; }\n var _this = this;\n\n if (trigger) {\n this.$lastTrigger = trigger;\n }\n\n if (this.options.forceTo === 'top') {\n window.scrollTo(0, 0);\n } else if (this.options.forceTo === 'bottom') {\n window.scrollTo(0,document.body.scrollHeight);\n }\n\n if (this.options.transitionTime && this.options.transition !== 'overlap') {\n this.$element.siblings('[data-off-canvas-content]').css('transition-duration', this.options.transitionTime);\n } else {\n this.$element.siblings('[data-off-canvas-content]').css('transition-duration', '');\n }\n\n this.$element.addClass('is-open').removeClass('is-closed');\n\n this.$triggers.attr('aria-expanded', 'true');\n this.$element.attr('aria-hidden', 'false');\n\n this.$content.addClass('is-open-' + this.position);\n\n // If `contentScroll` is set to false, add class and disable scrolling on touch devices.\n if (this.options.contentScroll === false) {\n $('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling);\n this.$element.on('touchstart', this._recordScrollable);\n this.$element.on('touchmove', this._stopScrollPropagation);\n }\n\n if (this.options.contentOverlay === true) {\n this.$overlay.addClass('is-visible');\n }\n\n if (this.options.closeOnClick === true && this.options.contentOverlay === true) {\n this.$overlay.addClass('is-closable');\n }\n\n if (this.options.autoFocus === true) {\n this.$element.one(transitionend(this.$element), function() {\n if (!_this.$element.hasClass('is-open')) {\n return; // exit if prematurely closed\n }\n var canvasFocus = _this.$element.find('[data-autofocus]');\n if (canvasFocus.length) {\n canvasFocus.eq(0).focus();\n } else {\n _this.$element.find('a, button').eq(0).focus();\n }\n });\n }\n\n if (this.options.trapFocus === true) {\n this.$content.attr('tabindex', '-1');\n Keyboard.trapFocus(this.$element);\n }\n\n this._addContentClasses();\n\n /**\n * Fires when the off-canvas menu opens.\n * @event Offcanvas#opened\n */\n this.$element.trigger('opened.zf.offcanvas');\n }\n\n /**\n * Closes the off-canvas menu.\n * @function\n * @param {Function} cb - optional cb to fire after closure.\n * @fires Offcanvas#closed\n */\n close(cb) {\n if (!this.$element.hasClass('is-open') || this.isRevealed) { return; }\n\n var _this = this;\n\n this.$element.removeClass('is-open');\n\n this.$element.attr('aria-hidden', 'true')\n /**\n * Fires when the off-canvas menu opens.\n * @event Offcanvas#closed\n */\n .trigger('closed.zf.offcanvas');\n\n this.$content.removeClass('is-open-left is-open-top is-open-right is-open-bottom');\n\n // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices.\n if (this.options.contentScroll === false) {\n $('body').removeClass('is-off-canvas-open').off('touchmove', this._stopScrolling);\n this.$element.off('touchstart', this._recordScrollable);\n this.$element.off('touchmove', this._stopScrollPropagation);\n }\n\n if (this.options.contentOverlay === true) {\n this.$overlay.removeClass('is-visible');\n }\n\n if (this.options.closeOnClick === true && this.options.contentOverlay === true) {\n this.$overlay.removeClass('is-closable');\n }\n\n this.$triggers.attr('aria-expanded', 'false');\n\n if (this.options.trapFocus === true) {\n this.$content.removeAttr('tabindex');\n Keyboard.releaseFocus(this.$element);\n }\n\n // Listen to transitionEnd and add class when done.\n this.$element.one(transitionend(this.$element), function(e) {\n _this.$element.addClass('is-closed');\n _this._removeContentClasses();\n });\n }\n\n /**\n * Toggles the off-canvas menu open or closed.\n * @function\n * @param {Object} event - Event object passed from listener.\n * @param {jQuery} trigger - element that triggered the off-canvas to open.\n */\n toggle(event, trigger) {\n if (this.$element.hasClass('is-open')) {\n this.close(event, trigger);\n }\n else {\n this.open(event, trigger);\n }\n }\n\n /**\n * Handles keyboard input when detected. When the escape key is pressed, the off-canvas menu closes, and focus is restored to the element that opened the menu.\n * @function\n * @private\n */\n _handleKeyboard(e) {\n Keyboard.handleKey(e, 'OffCanvas', {\n close: () => {\n this.close();\n this.$lastTrigger.focus();\n return true;\n },\n handled: () => {\n e.stopPropagation();\n e.preventDefault();\n }\n });\n }\n\n /**\n * Destroys the offcanvas plugin.\n * @function\n */\n _destroy() {\n this.close();\n this.$element.off('.zf.trigger .zf.offcanvas');\n this.$overlay.off('.zf.offcanvas');\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n }\n}\n\nOffCanvas.defaults = {\n /**\n * Allow the user to click outside of the menu to close it.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n\n /**\n * Adds an overlay on top of `[data-off-canvas-content]`.\n * @option\n * @type {boolean}\n * @default true\n */\n contentOverlay: true,\n\n /**\n * Target an off-canvas content container by ID that may be placed anywhere. If null the closest content container will be taken.\n * @option\n * @type {?string}\n * @default null\n */\n contentId: null,\n\n /**\n * Define the off-canvas element is nested in an off-canvas content. This is required when using the contentId option for a nested element.\n * @option\n * @type {boolean}\n * @default null\n */\n nested: null,\n\n /**\n * Enable/disable scrolling of the main content when an off canvas panel is open.\n * @option\n * @type {boolean}\n * @default true\n */\n contentScroll: true,\n\n /**\n * Amount of time in ms the open and close transition requires. If none selected, pulls from body style.\n * @option\n * @type {number}\n * @default null\n */\n transitionTime: null,\n\n /**\n * Type of transition for the offcanvas menu. Options are 'push', 'detached' or 'slide'.\n * @option\n * @type {string}\n * @default push\n */\n transition: 'push',\n\n /**\n * Force the page to scroll to top or bottom on open.\n * @option\n * @type {?string}\n * @default null\n */\n forceTo: null,\n\n /**\n * Allow the offcanvas to remain open for certain breakpoints.\n * @option\n * @type {boolean}\n * @default false\n */\n isRevealed: false,\n\n /**\n * Breakpoint at which to reveal. JS will use a RegExp to target standard classes, if changing classnames, pass your class with the `revealClass` option.\n * @option\n * @type {?string}\n * @default null\n */\n revealOn: null,\n\n /**\n * Force focus to the offcanvas on open. If true, will focus the opening trigger on close.\n * @option\n * @type {boolean}\n * @default true\n */\n autoFocus: true,\n\n /**\n * Class used to force an offcanvas to remain open. Foundation defaults for this are `reveal-for-large` & `reveal-for-medium`.\n * @option\n * @type {string}\n * @default reveal-for-\n * @todo improve the regex testing for this.\n */\n revealClass: 'reveal-for-',\n\n /**\n * Triggers optional focus trapping when opening an offcanvas. Sets tabindex of [data-off-canvas-content] to -1 for accessibility purposes.\n * @option\n * @type {boolean}\n * @default false\n */\n trapFocus: false\n}\n\nexport {OffCanvas};\n","'use strict';\n\nimport $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Motion } from './foundation.util.motion';\nimport { Timer } from './foundation.util.timer';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\nimport { Touch } from './foundation.util.touch'\n\n\n/**\n * Orbit module.\n * @module foundation.orbit\n * @requires foundation.util.keyboard\n * @requires foundation.util.motion\n * @requires foundation.util.timer\n * @requires foundation.util.imageLoader\n * @requires foundation.util.touch\n */\n\nclass Orbit extends Plugin {\n /**\n * Creates a new instance of an orbit carousel.\n * @class\n * @name Orbit\n * @param {jQuery} element - jQuery object to make into an Orbit Carousel.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options){\n this.$element = element;\n this.options = $.extend({}, Orbit.defaults, this.$element.data(), options);\n this.className = 'Orbit'; // ie9 back compat\n\n Touch.init($); // Touch init is idempotent, we just need to make sure it's initialied.\n\n this._init();\n\n Keyboard.register('Orbit', {\n 'ltr': {\n 'ARROW_RIGHT': 'next',\n 'ARROW_LEFT': 'previous'\n },\n 'rtl': {\n 'ARROW_LEFT': 'next',\n 'ARROW_RIGHT': 'previous'\n }\n });\n }\n\n /**\n * Initializes the plugin by creating jQuery collections, setting attributes, and starting the animation.\n * @function\n * @private\n */\n _init() {\n // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide\n this._reset();\n\n this.$wrapper = this.$element.find(`.${this.options.containerClass}`);\n this.$slides = this.$element.find(`.${this.options.slideClass}`);\n\n var $images = this.$element.find('img'),\n initActive = this.$slides.filter('.is-active'),\n id = this.$element[0].id || GetYoDigits(6, 'orbit');\n\n this.$element.attr({\n 'data-resize': id,\n 'id': id\n });\n\n if (!initActive.length) {\n this.$slides.eq(0).addClass('is-active');\n }\n\n if (!this.options.useMUI) {\n this.$slides.addClass('no-motionui');\n }\n\n if ($images.length) {\n onImagesLoaded($images, this._prepareForOrbit.bind(this));\n } else {\n this._prepareForOrbit();//hehe\n }\n\n if (this.options.bullets) {\n this._loadBullets();\n }\n\n this._events();\n\n if (this.options.autoPlay && this.$slides.length > 1) {\n this.geoSync();\n }\n\n if (this.options.accessible) { // allow wrapper to be focusable to enable arrow navigation\n this.$wrapper.attr('tabindex', 0);\n }\n }\n\n /**\n * Creates a jQuery collection of bullets, if they are being used.\n * @function\n * @private\n */\n _loadBullets() {\n this.$bullets = this.$element.find(`.${this.options.boxOfBullets}`).find('button');\n }\n\n /**\n * Sets a `timer` object on the orbit, and starts the counter for the next slide.\n * @function\n */\n geoSync() {\n var _this = this;\n this.timer = new Timer(\n this.$element,\n {\n duration: this.options.timerDelay,\n infinite: false\n },\n function() {\n _this.changeSlide(true);\n });\n this.timer.start();\n }\n\n /**\n * Sets wrapper and slide heights for the orbit.\n * @function\n * @private\n */\n _prepareForOrbit() {\n var _this = this;\n this._setWrapperHeight();\n }\n\n /**\n * Calulates the height of each slide in the collection, and uses the tallest one for the wrapper height.\n * @function\n * @private\n * @param {Function} cb - a callback function to fire when complete.\n */\n _setWrapperHeight(cb) {//rewrite this to `for` loop\n var max = 0, temp, counter = 0, _this = this;\n\n this.$slides.each(function() {\n temp = this.getBoundingClientRect().height;\n $(this).attr('data-slide', counter);\n\n // hide all slides but the active one\n if (!/mui/g.test($(this)[0].className) && _this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) {\n $(this).css({'display': 'none'});\n }\n max = temp > max ? temp : max;\n counter++;\n });\n\n if (counter === this.$slides.length) {\n this.$wrapper.css({'height': max}); //only change the wrapper height property once.\n if(cb) {cb(max);} //fire callback with max height dimension.\n }\n }\n\n /**\n * Sets the max-height of each slide.\n * @function\n * @private\n */\n _setSlideHeight(height) {\n this.$slides.each(function() {\n $(this).css('max-height', height);\n });\n }\n\n /**\n * Adds event listeners to basically everything within the element.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n\n //***************************************\n //**Now using custom event - thanks to:**\n //** Yohai Ararat of Toronto **\n //***************************************\n //\n this.$element.off('.resizeme.zf.trigger').on({\n 'resizeme.zf.trigger': this._prepareForOrbit.bind(this)\n })\n if (this.$slides.length > 1) {\n\n if (this.options.swipe) {\n this.$slides.off('swipeleft.zf.orbit swiperight.zf.orbit')\n .on('swipeleft.zf.orbit', function(e){\n e.preventDefault();\n _this.changeSlide(true);\n }).on('swiperight.zf.orbit', function(e){\n e.preventDefault();\n _this.changeSlide(false);\n });\n }\n //***************************************\n\n if (this.options.autoPlay) {\n this.$slides.on('click.zf.orbit', function() {\n _this.$element.data('clickedOn', _this.$element.data('clickedOn') ? false : true);\n _this.timer[_this.$element.data('clickedOn') ? 'pause' : 'start']();\n });\n\n if (this.options.pauseOnHover) {\n this.$element.on('mouseenter.zf.orbit', function() {\n _this.timer.pause();\n }).on('mouseleave.zf.orbit', function() {\n if (!_this.$element.data('clickedOn')) {\n _this.timer.start();\n }\n });\n }\n }\n\n if (this.options.navButtons) {\n var $controls = this.$element.find(`.${this.options.nextClass}, .${this.options.prevClass}`);\n $controls.attr('tabindex', 0)\n //also need to handle enter/return and spacebar key presses\n .on('click.zf.orbit touchend.zf.orbit', function(e){\n\t e.preventDefault();\n _this.changeSlide($(this).hasClass(_this.options.nextClass));\n });\n }\n\n if (this.options.bullets) {\n this.$bullets.on('click.zf.orbit touchend.zf.orbit', function() {\n if (/is-active/g.test(this.className)) { return false; }//if this is active, kick out of function.\n var idx = $(this).data('slide'),\n ltr = idx > _this.$slides.filter('.is-active').data('slide'),\n $slide = _this.$slides.eq(idx);\n\n _this.changeSlide(ltr, $slide, idx);\n });\n }\n\n if (this.options.accessible) {\n this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function(e) {\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Orbit', {\n next: function() {\n _this.changeSlide(true);\n },\n previous: function() {\n _this.changeSlide(false);\n },\n handled: function() { // if bullet is focused, make sure focus moves\n if ($(e.target).is(_this.$bullets)) {\n _this.$bullets.filter('.is-active').focus();\n }\n }\n });\n });\n }\n }\n }\n\n /**\n * Resets Orbit so it can be reinitialized\n */\n _reset() {\n // Don't do anything if there are no slides (first run)\n if (typeof this.$slides == 'undefined') {\n return;\n }\n\n if (this.$slides.length > 1) {\n // Remove old events\n this.$element.off('.zf.orbit').find('*').off('.zf.orbit')\n\n // Restart timer if autoPlay is enabled\n if (this.options.autoPlay) {\n this.timer.restart();\n }\n\n // Reset all sliddes\n this.$slides.each(function(el) {\n $(el).removeClass('is-active is-active is-in')\n .removeAttr('aria-live')\n .hide();\n });\n\n // Show the first slide\n this.$slides.first().addClass('is-active').show();\n\n // Triggers when the slide has finished animating\n this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]);\n\n // Select first bullet if bullets are present\n if (this.options.bullets) {\n this._updateBullets(0);\n }\n }\n }\n\n /**\n * Changes the current slide to a new one.\n * @function\n * @param {Boolean} isLTR - if true the slide moves from right to left, if false the slide moves from left to right.\n * @param {jQuery} chosenSlide - the jQuery element of the slide to show next, if one is selected.\n * @param {Number} idx - the index of the new slide in its collection, if one chosen.\n * @fires Orbit#slidechange\n */\n changeSlide(isLTR, chosenSlide, idx) {\n if (!this.$slides) {return; } // Don't freak out if we're in the middle of cleanup\n var $curSlide = this.$slides.filter('.is-active').eq(0);\n\n if (/mui/g.test($curSlide[0].className)) { return false; } //if the slide is currently animating, kick out of the function\n\n var $firstSlide = this.$slides.first(),\n $lastSlide = this.$slides.last(),\n dirIn = isLTR ? 'Right' : 'Left',\n dirOut = isLTR ? 'Left' : 'Right',\n _this = this,\n $newSlide;\n\n if (!chosenSlide) { //most of the time, this will be auto played or clicked from the navButtons.\n $newSlide = isLTR ? //if wrapping enabled, check to see if there is a `next` or `prev` sibling, if not, select the first or last slide to fill in. if wrapping not enabled, attempt to select `next` or `prev`, if there's nothing there, the function will kick out on next step. CRAZY NESTED TERNARIES!!!!!\n (this.options.infiniteWrap ? $curSlide.next(`.${this.options.slideClass}`).length ? $curSlide.next(`.${this.options.slideClass}`) : $firstSlide : $curSlide.next(`.${this.options.slideClass}`))//pick next slide if moving left to right\n :\n (this.options.infiniteWrap ? $curSlide.prev(`.${this.options.slideClass}`).length ? $curSlide.prev(`.${this.options.slideClass}`) : $lastSlide : $curSlide.prev(`.${this.options.slideClass}`));//pick prev slide if moving right to left\n } else {\n $newSlide = chosenSlide;\n }\n\n if ($newSlide.length) {\n /**\n * Triggers before the next slide starts animating in and only if a next slide has been found.\n * @event Orbit#beforeslidechange\n */\n this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]);\n\n if (this.options.bullets) {\n idx = idx || this.$slides.index($newSlide); //grab index to update bullets\n this._updateBullets(idx);\n }\n\n if (this.options.useMUI && !this.$element.is(':hidden')) {\n Motion.animateIn(\n $newSlide.addClass('is-active'),\n this.options[`animInFrom${dirIn}`],\n function(){\n $newSlide.css({'display': 'block'}).attr('aria-live', 'polite');\n });\n\n Motion.animateOut(\n $curSlide.removeClass('is-active'),\n this.options[`animOutTo${dirOut}`],\n function(){\n $curSlide.removeAttr('aria-live');\n if(_this.options.autoPlay && !_this.timer.isPaused){\n _this.timer.restart();\n }\n //do stuff?\n });\n } else {\n $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide();\n $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show();\n if (this.options.autoPlay && !this.timer.isPaused) {\n this.timer.restart();\n }\n }\n /**\n * Triggers when the slide has finished animating in.\n * @event Orbit#slidechange\n */\n this.$element.trigger('slidechange.zf.orbit', [$newSlide]);\n }\n }\n\n /**\n * Updates the active state of the bullets, if displayed.\n * @function\n * @private\n * @param {Number} idx - the index of the current slide.\n */\n _updateBullets(idx) {\n var $oldBullet = this.$element.find(`.${this.options.boxOfBullets}`)\n .find('.is-active').removeClass('is-active').blur(),\n span = $oldBullet.find('span:last').detach(),\n $newBullet = this.$bullets.eq(idx).addClass('is-active').append(span);\n }\n\n /**\n * Destroys the carousel and hides the element.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.orbit').find('*').off('.zf.orbit').end().hide();\n }\n}\n\nOrbit.defaults = {\n /**\n * Tells the JS to look for and loadBullets.\n * @option\n * @type {boolean}\n * @default true\n */\n bullets: true,\n /**\n * Tells the JS to apply event listeners to nav buttons\n * @option\n * @type {boolean}\n * @default true\n */\n navButtons: true,\n /**\n * motion-ui animation class to apply\n * @option\n * @type {string}\n * @default 'slide-in-right'\n */\n animInFromRight: 'slide-in-right',\n /**\n * motion-ui animation class to apply\n * @option\n * @type {string}\n * @default 'slide-out-right'\n */\n animOutToRight: 'slide-out-right',\n /**\n * motion-ui animation class to apply\n * @option\n * @type {string}\n * @default 'slide-in-left'\n *\n */\n animInFromLeft: 'slide-in-left',\n /**\n * motion-ui animation class to apply\n * @option\n * @type {string}\n * @default 'slide-out-left'\n */\n animOutToLeft: 'slide-out-left',\n /**\n * Allows Orbit to automatically animate on page load.\n * @option\n * @type {boolean}\n * @default true\n */\n autoPlay: true,\n /**\n * Amount of time, in ms, between slide transitions\n * @option\n * @type {number}\n * @default 5000\n */\n timerDelay: 5000,\n /**\n * Allows Orbit to infinitely loop through the slides\n * @option\n * @type {boolean}\n * @default true\n */\n infiniteWrap: true,\n /**\n * Allows the Orbit slides to bind to swipe events for mobile, requires an additional util library\n * @option\n * @type {boolean}\n * @default true\n */\n swipe: true,\n /**\n * Allows the timing function to pause animation on hover.\n * @option\n * @type {boolean}\n * @default true\n */\n pauseOnHover: true,\n /**\n * Allows Orbit to bind keyboard events to the slider, to animate frames with arrow keys\n * @option\n * @type {boolean}\n * @default true\n */\n accessible: true,\n /**\n * Class applied to the container of Orbit\n * @option\n * @type {string}\n * @default 'orbit-container'\n */\n containerClass: 'orbit-container',\n /**\n * Class applied to individual slides.\n * @option\n * @type {string}\n * @default 'orbit-slide'\n */\n slideClass: 'orbit-slide',\n /**\n * Class applied to the bullet container. You're welcome.\n * @option\n * @type {string}\n * @default 'orbit-bullets'\n */\n boxOfBullets: 'orbit-bullets',\n /**\n * Class applied to the `next` navigation button.\n * @option\n * @type {string}\n * @default 'orbit-next'\n */\n nextClass: 'orbit-next',\n /**\n * Class applied to the `previous` navigation button.\n * @option\n * @type {string}\n * @default 'orbit-previous'\n */\n prevClass: 'orbit-previous',\n /**\n * Boolean to flag the js to use motion ui classes or not. Default to true for backwards compatibility.\n * @option\n * @type {boolean}\n * @default true\n */\n useMUI: true\n};\n\nexport {Orbit};\n","'use strict';\n\nimport $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\nimport { DropdownMenu } from './foundation.dropdownMenu';\nimport { Drilldown } from './foundation.drilldown';\nimport { AccordionMenu } from './foundation.accordionMenu';\n\nlet MenuPlugins = {\n dropdown: {\n cssClass: 'dropdown',\n plugin: DropdownMenu\n },\n drilldown: {\n cssClass: 'drilldown',\n plugin: Drilldown\n },\n accordion: {\n cssClass: 'accordion-menu',\n plugin: AccordionMenu\n }\n};\n\n // import \"foundation.util.triggers.js\";\n\n\n/**\n * ResponsiveMenu module.\n * @module foundation.responsiveMenu\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass ResponsiveMenu extends Plugin {\n /**\n * Creates a new instance of a responsive menu.\n * @class\n * @name ResponsiveMenu\n * @fires ResponsiveMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.rules = this.$element.data('responsive-menu');\n this.currentMq = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveMenu'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.\n * @function\n * @private\n */\n _init() {\n\n MediaQuery._init();\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n // Add data-mutate since children may need it.\n this.$element.attr('data-mutate', (this.$element.attr('data-mutate') || GetYoDigits(6, 'responsive-menu')));\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n\n $(window).on('changed.zf.mediaquery', function() {\n _this._checkMediaQueries();\n });\n // $(window).on('resize.zf.ResponsiveMenu', function() {\n // _this._checkMediaQueries();\n // });\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) this.currentPlugin.destroy();\n this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n this.currentPlugin.destroy();\n $(window).off('.zf.ResponsiveMenu');\n }\n}\n\nResponsiveMenu.defaults = {};\n\nexport {ResponsiveMenu};\n","'use strict';\n\nimport $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * ResponsiveToggle module.\n * @module foundation.responsiveToggle\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion\n */\n\nclass ResponsiveToggle extends Plugin {\n /**\n * Creates a new instance of Tab Bar.\n * @class\n * @name ResponsiveToggle\n * @fires ResponsiveToggle#init\n * @param {jQuery} element - jQuery object to attach tab bar functionality to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);\n this.className = 'ResponsiveToggle'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the tab bar by finding the target element, toggling element, and running update().\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n var targetID = this.$element.data('responsive-toggle');\n if (!targetID) {\n console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');\n }\n\n this.$targetMenu = $(`#${targetID}`);\n this.$toggler = this.$element.find('[data-toggle]').filter(function() {\n var target = $(this).data('toggle');\n return (target === targetID || target === \"\");\n });\n this.options = $.extend({}, this.options, this.$targetMenu.data());\n\n // If they were set, parse the animation classes\n if(this.options.animate) {\n let input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n }\n\n this._update();\n }\n\n /**\n * Adds necessary event handlers for the tab bar to work.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n\n this._updateMqHandler = this._update.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._updateMqHandler);\n\n this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));\n }\n\n /**\n * Checks the current media query to determine if the tab bar should be visible or hidden.\n * @function\n * @private\n */\n _update() {\n // Mobile\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n this.$element.show();\n this.$targetMenu.hide();\n }\n\n // Desktop\n else {\n this.$element.hide();\n this.$targetMenu.show();\n }\n }\n\n /**\n * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.\n * @function\n * @fires ResponsiveToggle#toggled\n */\n toggleMenu() {\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n /**\n * Fires when the element attached to the tab bar toggles.\n * @event ResponsiveToggle#toggled\n */\n if(this.options.animate) {\n if (this.$targetMenu.is(':hidden')) {\n Motion.animateIn(this.$targetMenu, this.animationIn, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n this.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$targetMenu, this.animationOut, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n });\n }\n }\n else {\n this.$targetMenu.toggle(0);\n this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');\n this.$element.trigger('toggled.zf.responsiveToggle');\n }\n }\n };\n\n _destroy() {\n this.$element.off('.zf.responsiveToggle');\n this.$toggler.off('.zf.responsiveToggle');\n\n $(window).off('changed.zf.mediaquery', this._updateMqHandler);\n }\n}\n\nResponsiveToggle.defaults = {\n /**\n * The breakpoint after which the menu is always shown, and the tab bar is hidden.\n * @option\n * @type {string}\n * @default 'medium'\n */\n hideFor: 'medium',\n\n /**\n * To decide if the toggle should be animated or not.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport { ResponsiveToggle };\n","'use strict';\n\nimport $ from 'jquery';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Reveal module.\n * @module foundation.reveal\n * @requires foundation.util.keyboard\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion if using animations\n */\n\nclass Reveal extends Plugin {\n /**\n * Creates a new instance of Reveal.\n * @class\n * @name Reveal\n * @param {jQuery} element - jQuery object to use for the modal.\n * @param {Object} options - optional parameters.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Reveal.defaults, this.$element.data(), options);\n this.className = 'Reveal'; // ie9 back compat\n this._init();\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n Keyboard.register('Reveal', {\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the modal by adding the overlay and close buttons, (if selected).\n * @private\n */\n _init() {\n MediaQuery._init();\n this.id = this.$element.attr('id');\n this.isActive = false;\n this.cached = {mq: MediaQuery.current};\n\n this.$anchor = $(`[data-open=\"${this.id}\"]`).length ? $(`[data-open=\"${this.id}\"]`) : $(`[data-toggle=\"${this.id}\"]`);\n this.$anchor.attr({\n 'aria-controls': this.id,\n 'aria-haspopup': true,\n 'tabindex': 0\n });\n\n if (this.options.fullScreen || this.$element.hasClass('full')) {\n this.options.fullScreen = true;\n this.options.overlay = false;\n }\n if (this.options.overlay && !this.$overlay) {\n this.$overlay = this._makeOverlay(this.id);\n }\n\n this.$element.attr({\n 'role': 'dialog',\n 'aria-hidden': true,\n 'data-yeti-box': this.id,\n 'data-resize': this.id\n });\n\n if(this.$overlay) {\n this.$element.detach().appendTo(this.$overlay);\n } else {\n this.$element.detach().appendTo($(this.options.appendTo));\n this.$element.addClass('without-overlay');\n }\n this._events();\n if (this.options.deepLink && window.location.hash === ( `#${this.id}`)) {\n this.onLoadListener = onLoad($(window), () => this.open());\n }\n }\n\n /**\n * Creates an overlay div to display behind the modal.\n * @private\n */\n _makeOverlay() {\n var additionalOverlayClasses = '';\n\n if (this.options.additionalOverlayClasses) {\n additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses;\n }\n\n return $('
      ')\n .addClass('reveal-overlay' + additionalOverlayClasses)\n .appendTo(this.options.appendTo);\n }\n\n /**\n * Updates position of modal\n * TODO: Figure out if we actually need to cache these values or if it doesn't matter\n * @private\n */\n _updatePosition() {\n var width = this.$element.outerWidth();\n var outerWidth = $(window).width();\n var height = this.$element.outerHeight();\n var outerHeight = $(window).height();\n var left, top = null;\n if (this.options.hOffset === 'auto') {\n left = parseInt((outerWidth - width) / 2, 10);\n } else {\n left = parseInt(this.options.hOffset, 10);\n }\n if (this.options.vOffset === 'auto') {\n if (height > outerHeight) {\n top = parseInt(Math.min(100, outerHeight / 10), 10);\n } else {\n top = parseInt((outerHeight - height) / 4, 10);\n }\n } else if (this.options.vOffset !== null) {\n top = parseInt(this.options.vOffset, 10);\n }\n\n if (top !== null) {\n this.$element.css({top: top + 'px'});\n }\n\n // only worry about left if we don't have an overlay or we have a horizontal offset,\n // otherwise we're perfectly in the middle\n if (!this.$overlay || (this.options.hOffset !== 'auto')) {\n this.$element.css({left: left + 'px'});\n this.$element.css({margin: '0px'});\n }\n\n }\n\n /**\n * Adds event handlers for the modal.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': (event, $element) => {\n if ((event.target === _this.$element[0]) ||\n ($(event.target).parents('[data-closable]')[0] === $element)) { // only close reveal when it's explicitly called\n return this.close.apply(this);\n }\n },\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': function() {\n _this._updatePosition();\n }\n });\n\n if (this.options.closeOnClick && this.options.overlay) {\n this.$overlay.off('.zf.reveal').on('click.zf.reveal', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) {\n return;\n }\n _this.close();\n });\n }\n if (this.options.deepLink) {\n $(window).on(`hashchange.zf.reveal:${this.id}`, this._handleState.bind(this));\n }\n }\n\n /**\n * Handles modal methods on back/forward button clicks or any other event that triggers hashchange.\n * @private\n */\n _handleState(e) {\n if(window.location.hash === ( '#' + this.id) && !this.isActive){ this.open(); }\n else{ this.close(); }\n }\n\n /**\n * Disables the scroll when Reveal is shown to prevent the background from shifting\n * @param {number} scrollTop - Scroll to visually apply, window current scroll by default\n */\n _disableScroll(scrollTop) {\n scrollTop = scrollTop || $(window).scrollTop();\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", -scrollTop);\n }\n }\n\n /**\n * Reenables the scroll when Reveal closes\n * @param {number} scrollTop - Scroll to restore, html \"top\" property by default (as set by `_disableScroll`)\n */\n _enableScroll(scrollTop) {\n scrollTop = scrollTop || parseInt($(\"html\").css(\"top\"));\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", \"\");\n $(window).scrollTop(-scrollTop);\n }\n }\n\n\n /**\n * Opens the modal controlled by `this.$anchor`, and closes all others by default.\n * @function\n * @fires Reveal#closeme\n * @fires Reveal#open\n */\n open() {\n // either update or replace browser history\n const hash = `#${this.id}`;\n if (this.options.deepLink && window.location.hash !== hash) {\n\n if (window.history.pushState) {\n if (this.options.updateHistory) {\n window.history.pushState({}, '', hash);\n } else {\n window.history.replaceState({}, '', hash);\n }\n } else {\n window.location.hash = hash;\n }\n }\n\n // Remember anchor that opened it to set focus back later, have general anchors as fallback\n this.$activeAnchor = $(document.activeElement).is(this.$anchor) ? $(document.activeElement) : this.$anchor;\n\n this.isActive = true;\n\n // Make elements invisible, but remove display: none so we can get size and positioning\n this.$element\n .css({ 'visibility': 'hidden' })\n .show()\n .scrollTop(0);\n if (this.options.overlay) {\n this.$overlay.css({'visibility': 'hidden'}).show();\n }\n\n this._updatePosition();\n\n this.$element\n .hide()\n .css({ 'visibility': '' });\n\n if(this.$overlay) {\n this.$overlay.css({'visibility': ''}).hide();\n if(this.$element.hasClass('fast')) {\n this.$overlay.addClass('fast');\n } else if (this.$element.hasClass('slow')) {\n this.$overlay.addClass('slow');\n }\n }\n\n\n if (!this.options.multipleOpened) {\n /**\n * Fires immediately before the modal opens.\n * Closes any other modals that are currently open\n * @event Reveal#closeme\n */\n this.$element.trigger('closeme.zf.reveal', this.id);\n }\n\n this._disableScroll();\n\n var _this = this;\n\n // Motion UI method of reveal\n if (this.options.animationIn) {\n function afterAnimation(){\n _this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n _this._addGlobalClasses();\n Keyboard.trapFocus(_this.$element);\n }\n if (this.options.overlay) {\n Motion.animateIn(this.$overlay, 'fade-in');\n }\n Motion.animateIn(this.$element, this.options.animationIn, () => {\n if(this.$element) { // protect against object having been removed\n this.focusableElements = Keyboard.findFocusable(this.$element);\n afterAnimation();\n }\n });\n }\n // jQuery method of reveal\n else {\n if (this.options.overlay) {\n this.$overlay.show(0);\n }\n this.$element.show(this.options.showDelay);\n }\n\n // handle accessibility\n this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n Keyboard.trapFocus(this.$element);\n\n this._addGlobalClasses();\n\n this._addGlobalListeners();\n\n /**\n * Fires when the modal has successfully opened.\n * @event Reveal#open\n */\n this.$element.trigger('open.zf.reveal');\n }\n\n /**\n * Adds classes and listeners on document required by open modals.\n *\n * The following classes are added and updated:\n * - `.is-reveal-open` - Prevents the scroll on document\n * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the\n * scroll was not disabled. This prevent a \"shift\" of the page content due\n * the scrollbar disappearing when the modal opens.\n *\n * @private\n */\n _addGlobalClasses() {\n const updateScrollbarClass = () => {\n $('html').toggleClass('zf-has-scroll', !!($(document).height() > $(window).height()));\n };\n\n this.$element.on('resizeme.zf.trigger.revealScrollbarListener', () => updateScrollbarClass());\n updateScrollbarClass();\n $('html').addClass('is-reveal-open');\n }\n\n /**\n * Removes classes and listeners on document that were required by open modals.\n * @private\n */\n _removeGlobalClasses() {\n this.$element.off('resizeme.zf.trigger.revealScrollbarListener');\n $('html').removeClass('is-reveal-open');\n $('html').removeClass('zf-has-scroll');\n }\n\n /**\n * Adds extra event handlers for the body and window if necessary.\n * @private\n */\n _addGlobalListeners() {\n var _this = this;\n if(!this.$element) { return; } // If we're in the middle of cleanup, don't freak out\n this.focusableElements = Keyboard.findFocusable(this.$element);\n\n if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {\n $('body').on('click.zf.reveal', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) { return; }\n _this.close();\n });\n }\n\n if (this.options.closeOnEsc) {\n $(window).on('keydown.zf.reveal', function(e) {\n Keyboard.handleKey(e, 'Reveal', {\n close: function() {\n if (_this.options.closeOnEsc) {\n _this.close();\n }\n }\n });\n });\n }\n }\n\n /**\n * Closes the modal.\n * @function\n * @fires Reveal#closed\n */\n close() {\n if (!this.isActive || !this.$element.is(':visible')) {\n return false;\n }\n var _this = this;\n\n // Motion UI method of hiding\n if (this.options.animationOut) {\n if (this.options.overlay) {\n Motion.animateOut(this.$overlay, 'fade-out');\n }\n\n Motion.animateOut(this.$element, this.options.animationOut, finishUp);\n }\n // jQuery method of hiding\n else {\n this.$element.hide(this.options.hideDelay);\n\n if (this.options.overlay) {\n this.$overlay.hide(0, finishUp);\n }\n else {\n finishUp();\n }\n }\n\n // Conditionals to remove extra event listeners added on open\n if (this.options.closeOnEsc) {\n $(window).off('keydown.zf.reveal');\n }\n\n if (!this.options.overlay && this.options.closeOnClick) {\n $('body').off('click.zf.reveal');\n }\n\n this.$element.off('keydown.zf.reveal');\n\n function finishUp() {\n\n // Get the current top before the modal is closed and restore the scroll after.\n // TODO: use component properties instead of HTML properties\n // See https://github.com/zurb/foundation-sites/pull/10786\n var scrollTop = parseInt($(\"html\").css(\"top\"));\n\n if ($('.reveal:visible').length === 0) {\n _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n\n Keyboard.releaseFocus(_this.$element);\n\n _this.$element.attr('aria-hidden', true);\n\n _this._enableScroll(scrollTop);\n\n /**\n * Fires when the modal is done closing.\n * @event Reveal#closed\n */\n _this.$element.trigger('closed.zf.reveal');\n }\n\n /**\n * Resets the modal content\n * This prevents a running video to keep going in the background\n */\n if (this.options.resetOnClose) {\n this.$element.html(this.$element.html());\n }\n\n this.isActive = false;\n // If deepLink and we did not switched to an other modal...\n if (_this.options.deepLink && window.location.hash === `#${this.id}`) {\n // Remove the history hash\n if (window.history.replaceState) {\n const urlWithoutHash = window.location.pathname + window.location.search;\n if (this.options.updateHistory) {\n window.history.pushState({}, '', urlWithoutHash); // remove the hash\n } else {\n window.history.replaceState('', document.title, urlWithoutHash);\n }\n } else {\n window.location.hash = '';\n }\n }\n\n this.$activeAnchor.focus();\n }\n\n /**\n * Toggles the open/closed state of a modal.\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.close();\n } else {\n this.open();\n }\n };\n\n /**\n * Destroys an instance of a modal.\n * @function\n */\n _destroy() {\n if (this.options.overlay) {\n this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()\n this.$overlay.hide().off().remove();\n }\n this.$element.hide().off();\n this.$anchor.off('.zf');\n $(window).off(`.zf.reveal:${this.id}`)\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n\n if ($('.reveal:visible').length === 0) {\n this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n };\n}\n\nReveal.defaults = {\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationIn: '',\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationOut: '',\n /**\n * Time, in ms, to delay the opening of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n showDelay: 0,\n /**\n * Time, in ms, to delay the closing of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n hideDelay: 0,\n /**\n * Allows a click on the body/overlay to close the modal.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allows the modal to close if the user presses the `ESCAPE` key.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnEsc: true,\n /**\n * If true, allows multiple modals to be displayed at once.\n * @option\n * @type {boolean}\n * @default false\n */\n multipleOpened: false,\n /**\n * Distance, in pixels, the modal should push down from the top of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n vOffset: 'auto',\n /**\n * Distance, in pixels, the modal should push in from the side of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n hOffset: 'auto',\n /**\n * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.\n * @option\n * @type {boolean}\n * @default false\n */\n fullScreen: false,\n /**\n * Allows the modal to generate an overlay div, which will cover the view when modal opens.\n * @option\n * @type {boolean}\n * @default true\n */\n overlay: true,\n /**\n * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.\n * @option\n * @type {boolean}\n * @default false\n */\n resetOnClose: false,\n /**\n * Link the location hash to the modal.\n * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, update the browser history with the open modal\n * @option\n * @default false\n */\n updateHistory: false,\n /**\n * Allows the modal to append to custom div.\n * @option\n * @type {string}\n * @default \"body\"\n */\n appendTo: \"body\",\n /**\n * Allows adding additional class names to the reveal overlay.\n * @option\n * @type {string}\n * @default ''\n */\n additionalOverlayClasses: ''\n};\n\nexport {Reveal};\n","'use strict';\n\nimport $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Move } from './foundation.util.motion';\nimport { GetYoDigits, rtl as Rtl } from './foundation.core.utils';\n\nimport { Plugin } from './foundation.core.plugin';\n\nimport { Touch } from './foundation.util.touch';\n\nimport { Triggers } from './foundation.util.triggers';\n/**\n * Slider module.\n * @module foundation.slider\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n */\n\nclass Slider extends Plugin {\n /**\n * Creates a new instance of a slider control.\n * @class\n * @name Slider\n * @param {jQuery} element - jQuery object to make into a slider control.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Slider.defaults, this.$element.data(), options);\n this.className = 'Slider'; // ie9 back compat\n\n // Touch and Triggers inits are idempotent, we just need to make sure it's initialied.\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Slider', {\n 'ltr': {\n 'ARROW_RIGHT': 'increase',\n 'ARROW_UP': 'increase',\n 'ARROW_DOWN': 'decrease',\n 'ARROW_LEFT': 'decrease',\n 'SHIFT_ARROW_RIGHT': 'increase_fast',\n 'SHIFT_ARROW_UP': 'increase_fast',\n 'SHIFT_ARROW_DOWN': 'decrease_fast',\n 'SHIFT_ARROW_LEFT': 'decrease_fast',\n 'HOME': 'min',\n 'END': 'max'\n },\n 'rtl': {\n 'ARROW_LEFT': 'increase',\n 'ARROW_RIGHT': 'decrease',\n 'SHIFT_ARROW_LEFT': 'increase_fast',\n 'SHIFT_ARROW_RIGHT': 'decrease_fast'\n }\n });\n }\n\n /**\n * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).\n * @function\n * @private\n */\n _init() {\n this.inputs = this.$element.find('input');\n this.handles = this.$element.find('[data-slider-handle]');\n\n this.$handle = this.handles.eq(0);\n this.$input = this.inputs.length ? this.inputs.eq(0) : $(`#${this.$handle.attr('aria-controls')}`);\n this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);\n\n var isDbl = false,\n _this = this;\n if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) {\n this.options.disabled = true;\n this.$element.addClass(this.options.disabledClass);\n }\n if (!this.inputs.length) {\n this.inputs = $().add(this.$input);\n this.options.binding = true;\n }\n\n this._setInitAttr(0);\n\n if (this.handles[1]) {\n this.options.doubleSided = true;\n this.$handle2 = this.handles.eq(1);\n this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $(`#${this.$handle2.attr('aria-controls')}`);\n\n if (!this.inputs[1]) {\n this.inputs = this.inputs.add(this.$input2);\n }\n isDbl = true;\n\n // this.$handle.triggerHandler('click.zf.slider');\n this._setInitAttr(1);\n }\n\n // Set handle positions\n this.setHandles();\n\n this._events();\n }\n\n setHandles() {\n if(this.handles[1]) {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true, () => {\n this._setHandlePos(this.$handle2, this.inputs.eq(1).val(), true);\n });\n } else {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val(), true);\n }\n }\n\n _reflow() {\n this.setHandles();\n }\n /**\n * @function\n * @private\n * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value)\n */\n _pctOfBar(value) {\n var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start)\n\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n }\n\n return pctOfBar.toFixed(2)\n }\n\n /**\n * @function\n * @private\n * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value\n */\n _value(pctOfBar) {\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n }\n var value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start);\n\n return value\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function\n */\n _logTransform(value) {\n return baseLog(this.options.nonLinearBase, ((value*(this.options.nonLinearBase-1))+1))\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function\n */\n _powTransform(value) {\n return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1)\n }\n\n /**\n * Sets the position of the selected handle and fill bar.\n * @function\n * @private\n * @param {jQuery} $hndl - the selected handle to move.\n * @param {Number} location - floating point between the start and end values of the slider bar.\n * @param {Function} cb - callback function to fire on completion.\n * @fires Slider#moved\n * @fires Slider#changed\n */\n _setHandlePos($hndl, location, noInvert, cb) {\n // don't move if the slider has been disabled since its initialization\n if (this.$element.hasClass(this.options.disabledClass)) {\n return;\n }\n //might need to alter that slightly for bars that will have odd number selections.\n location = parseFloat(location);//on input change events, convert string to number...grumble.\n\n // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max\n if (location < this.options.start) { location = this.options.start; }\n else if (location > this.options.end) { location = this.options.end; }\n\n var isDbl = this.options.doubleSided;\n\n //this is for single-handled vertical sliders, it adjusts the value to account for the slider being \"upside-down\"\n //for click and drag events, it's weird due to the scale(-1, 1) css property\n if (this.options.vertical && !noInvert) {\n location = this.options.end - location;\n }\n\n if (isDbl) { //this block is to prevent 2 handles from crossing eachother. Could/should be improved.\n if (this.handles.index($hndl) === 0) {\n var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));\n location = location >= h2Val ? h2Val - this.options.step : location;\n } else {\n var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));\n location = location <= h1Val ? h1Val + this.options.step : location;\n }\n }\n\n var _this = this,\n vert = this.options.vertical,\n hOrW = vert ? 'height' : 'width',\n lOrT = vert ? 'top' : 'left',\n handleDim = $hndl[0].getBoundingClientRect()[hOrW],\n elemDim = this.$element[0].getBoundingClientRect()[hOrW],\n //percentage of bar min/max value based on click or drag point\n pctOfBar = this._pctOfBar(location),\n //number of actual pixels to shift the handle, based on the percentage obtained above\n pxToMove = (elemDim - handleDim) * pctOfBar,\n //percentage of bar to shift the handle\n movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal);\n //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value\n location = parseFloat(location.toFixed(this.options.decimal));\n // declare empty object for css adjustments, only used with 2 handled-sliders\n var css = {};\n\n this._setValues($hndl, location);\n\n // TODO update to calculate based on values set to respective inputs??\n if (isDbl) {\n var isLeftHndl = this.handles.index($hndl) === 0,\n //empty variable, will be used for min-height/width for fill bar\n dim,\n //percentage w/h of the handle compared to the slider bar\n handlePct = ~~(percent(handleDim, elemDim) * 100);\n //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar\n if (isLeftHndl) {\n //left or top percentage value to apply to the fill bar.\n css[lOrT] = `${movement}%`;\n //calculate the new min-height/width for the fill bar.\n dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct;\n //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider\n //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future.\n if (cb && typeof cb === 'function') { cb(); }//this is only needed for the initialization of 2 handled sliders\n } else {\n //just caching the value of the left/bottom handle's left/top property\n var handlePos = parseFloat(this.$handle[0].style[lOrT]);\n //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0\n //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself\n dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start)/((this.options.end-this.options.start)/100) : handlePos) + handlePct;\n }\n // assign the min-height/width to our css object\n css[`min-${hOrW}`] = `${dim}%`;\n }\n\n this.$element.one('finished.zf.animate', function() {\n /**\n * Fires when the handle is done moving.\n * @event Slider#moved\n */\n _this.$element.trigger('moved.zf.slider', [$hndl]);\n });\n\n //because we don't know exactly how the handle will be moved, check the amount of time it should take to move.\n var moveTime = this.$element.data('dragging') ? 1000/60 : this.options.moveTime;\n\n Move(moveTime, $hndl, function() {\n // adjusting the left/top property of the handle, based on the percentage calculated above\n // if movement isNaN, that is because the slider is hidden and we cannot determine handle width,\n // fall back to next best guess.\n if (isNaN(movement)) {\n $hndl.css(lOrT, `${pctOfBar * 100}%`);\n }\n else {\n $hndl.css(lOrT, `${movement}%`);\n }\n\n if (!_this.options.doubleSided) {\n //if single-handled, a simple method to expand the fill bar\n _this.$fill.css(hOrW, `${pctOfBar * 100}%`);\n } else {\n //otherwise, use the css object we created above\n _this.$fill.css(css);\n }\n });\n\n\n /**\n * Fires when the value has not been change for a given time.\n * @event Slider#changed\n */\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.$element.trigger('changed.zf.slider', [$hndl]);\n }, _this.options.changedDelay);\n }\n\n /**\n * Sets the initial attribute for the slider element.\n * @function\n * @private\n * @param {Number} idx - index of the current handle/input to use.\n */\n _setInitAttr(idx) {\n var initVal = (idx === 0 ? this.options.initialStart : this.options.initialEnd)\n var id = this.inputs.eq(idx).attr('id') || GetYoDigits(6, 'slider');\n this.inputs.eq(idx).attr({\n 'id': id,\n 'max': this.options.end,\n 'min': this.options.start,\n 'step': this.options.step\n });\n this.inputs.eq(idx).val(initVal);\n this.handles.eq(idx).attr({\n 'role': 'slider',\n 'aria-controls': id,\n 'aria-valuemax': this.options.end,\n 'aria-valuemin': this.options.start,\n 'aria-valuenow': initVal,\n 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',\n 'tabindex': 0\n });\n }\n\n /**\n * Sets the input and `aria-valuenow` values for the slider element.\n * @function\n * @private\n * @param {jQuery} $handle - the currently selected handle.\n * @param {Number} val - floating point of the new value.\n */\n _setValues($handle, val) {\n var idx = this.options.doubleSided ? this.handles.index($handle) : 0;\n this.inputs.eq(idx).val(val);\n $handle.attr('aria-valuenow', val);\n }\n\n /**\n * Handles events on the slider element.\n * Calculates the new location of the current handle.\n * If there are two handles and the bar was clicked, it determines which handle to move.\n * @function\n * @private\n * @param {Object} e - the `event` object passed from the listener.\n * @param {jQuery} $handle - the current handle to calculate for, if selected.\n * @param {Number} val - floating point number for the new value of the slider.\n * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn.\n */\n _handleEvent(e, $handle, val) {\n var value, hasVal;\n if (!val) {//click or drag events\n e.preventDefault();\n var _this = this,\n vertical = this.options.vertical,\n param = vertical ? 'height' : 'width',\n direction = vertical ? 'top' : 'left',\n eventOffset = vertical ? e.pageY : e.pageX,\n halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2,\n barDim = this.$element[0].getBoundingClientRect()[param],\n windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft();\n\n\n var elemOffset = this.$element.offset()[direction];\n\n // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates...\n // best way to guess this is simulated is if clientY == pageY\n if (e.clientY === e.pageY) { eventOffset = eventOffset + windowScroll; }\n var eventFromBar = eventOffset - elemOffset;\n var barXY;\n if (eventFromBar < 0) {\n barXY = 0;\n } else if (eventFromBar > barDim) {\n barXY = barDim;\n } else {\n barXY = eventFromBar;\n }\n var offsetPct = percent(barXY, barDim);\n\n value = this._value(offsetPct);\n\n // turn everything around for RTL, yay math!\n if (Rtl() && !this.options.vertical) {value = this.options.end - value;}\n\n value = _this._adjustValue(null, value);\n //boolean flag for the setHandlePos fn, specifically for vertical sliders\n hasVal = false;\n\n if (!$handle) {//figure out which handle it is, pass it to the next function.\n var firstHndlPos = absPosition(this.$handle, direction, barXY, param),\n secndHndlPos = absPosition(this.$handle2, direction, barXY, param);\n $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;\n }\n\n } else {//change event on input\n value = this._adjustValue(null, val);\n hasVal = true;\n }\n\n this._setHandlePos($handle, value, hasVal);\n }\n\n /**\n * Adjustes value for handle in regard to step value. returns adjusted value\n * @function\n * @private\n * @param {jQuery} $handle - the selected handle.\n * @param {Number} value - value to adjust. used if $handle is falsy\n */\n _adjustValue($handle, value) {\n var val,\n step = this.options.step,\n div = parseFloat(step/2),\n left, prev_val, next_val;\n if (!!$handle) {\n val = parseFloat($handle.attr('aria-valuenow'));\n }\n else {\n val = value;\n }\n if (val >= 0) {\n left = val % step;\n } else {\n left = step + (val % step);\n }\n prev_val = val - left;\n next_val = prev_val + step;\n if (left === 0) {\n return val;\n }\n val = val >= prev_val + div ? next_val : prev_val;\n return val;\n }\n\n /**\n * Adds event listeners to the slider elements.\n * @function\n * @private\n */\n _events() {\n this._eventsForHandle(this.$handle);\n if(this.handles[1]) {\n this._eventsForHandle(this.$handle2);\n }\n }\n\n\n /**\n * Adds event listeners a particular handle\n * @function\n * @private\n * @param {jQuery} $handle - the current handle to apply listeners to.\n */\n _eventsForHandle($handle) {\n var _this = this,\n curHandle,\n timer;\n\n const handleChangeEvent = function(e) {\n const idx = _this.inputs.index($(this));\n _this._handleEvent(e, _this.handles.eq(idx), $(this).val());\n };\n\n // IE only triggers the change event when the input loses focus which strictly follows the HTML specification\n // listen for the enter key and trigger a change\n // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events\n this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) {\n if(e.keyCode == 13) handleChangeEvent.call(this, e);\n });\n\n this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent);\n\n if (this.options.clickSelect) {\n this.$element.off('click.zf.slider').on('click.zf.slider', function(e) {\n if (_this.$element.data('dragging')) { return false; }\n\n if (!$(e.target).is('[data-slider-handle]')) {\n if (_this.options.doubleSided) {\n _this._handleEvent(e);\n } else {\n _this._handleEvent(e, _this.$handle);\n }\n }\n });\n }\n\n if (this.options.draggable) {\n this.handles.addTouch();\n\n var $body = $('body');\n $handle\n .off('mousedown.zf.slider')\n .on('mousedown.zf.slider', function(e) {\n $handle.addClass('is-dragging');\n _this.$fill.addClass('is-dragging');//\n _this.$element.data('dragging', true);\n\n curHandle = $(e.currentTarget);\n\n $body.on('mousemove.zf.slider', function(e) {\n e.preventDefault();\n _this._handleEvent(e, curHandle);\n\n }).on('mouseup.zf.slider', function(e) {\n _this._handleEvent(e, curHandle);\n\n $handle.removeClass('is-dragging');\n _this.$fill.removeClass('is-dragging');\n _this.$element.data('dragging', false);\n\n $body.off('mousemove.zf.slider mouseup.zf.slider');\n });\n })\n // prevent events triggered by touch\n .on('selectstart.zf.slider touchmove.zf.slider', function(e) {\n e.preventDefault();\n });\n }\n\n $handle.off('keydown.zf.slider').on('keydown.zf.slider', function(e) {\n var _$handle = $(this),\n idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0,\n oldValue = parseFloat(_this.inputs.eq(idx).val()),\n newValue;\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Slider', {\n decrease: function() {\n newValue = oldValue - _this.options.step;\n },\n increase: function() {\n newValue = oldValue + _this.options.step;\n },\n decrease_fast: function() {\n newValue = oldValue - _this.options.step * 10;\n },\n increase_fast: function() {\n newValue = oldValue + _this.options.step * 10;\n },\n min: function() {\n newValue = _this.options.start;\n },\n max: function() {\n newValue = _this.options.end;\n },\n handled: function() { // only set handle pos when event was handled specially\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue, true);\n }\n });\n /*if (newValue) { // if pressed key has special function, update value\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }*/\n });\n }\n\n /**\n * Destroys the slider plugin.\n */\n _destroy() {\n this.handles.off('.zf.slider');\n this.inputs.off('.zf.slider');\n this.$element.off('.zf.slider');\n\n clearTimeout(this.timeout);\n }\n}\n\nSlider.defaults = {\n /**\n * Minimum value for the slider scale.\n * @option\n * @type {number}\n * @default 0\n */\n start: 0,\n /**\n * Maximum value for the slider scale.\n * @option\n * @type {number}\n * @default 100\n */\n end: 100,\n /**\n * Minimum value change per change event.\n * @option\n * @type {number}\n * @default 1\n */\n step: 1,\n /**\n * Value at which the handle/input *(left handle/first input)* should be set to on initialization.\n * @option\n * @type {number}\n * @default 0\n */\n initialStart: 0,\n /**\n * Value at which the right handle/second input should be set to on initialization.\n * @option\n * @type {number}\n * @default 100\n */\n initialEnd: 100,\n /**\n * Allows the input to be located outside the container and visible. Set to by the JS\n * @option\n * @type {boolean}\n * @default false\n */\n binding: false,\n /**\n * Allows the user to click/tap on the slider bar to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n clickSelect: true,\n /**\n * Set to true and use the `vertical` class to change alignment to vertical.\n * @option\n * @type {boolean}\n * @default false\n */\n vertical: false,\n /**\n * Allows the user to drag the slider handle(s) to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n draggable: true,\n /**\n * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.\n * @option\n * @type {boolean}\n * @default false\n */\n disabled: false,\n /**\n * Allows the use of two handles. Double checked by the JS. Changes some logic handling.\n * @option\n * @type {boolean}\n * @default false\n */\n doubleSided: false,\n /**\n * Potential future feature.\n */\n // steps: 100,\n /**\n * Number of decimal places the plugin should go to for floating point precision.\n * @option\n * @type {number}\n * @default 2\n */\n decimal: 2,\n /**\n * Time delay for dragged elements.\n */\n // dragDelay: 0,\n /**\n * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.\n * @option\n * @type {number}\n * @default 200\n */\n moveTime: 200,//update this if changing the transition time in the sass\n /**\n * Class applied to disabled sliders.\n * @option\n * @type {string}\n * @default 'disabled'\n */\n disabledClass: 'disabled',\n /**\n * Will invert the default layout for a vertical slider.\n * @option\n * @type {boolean}\n * @default false\n */\n invertVertical: false,\n /**\n * Milliseconds before the `changed.zf-slider` event is triggered after value change.\n * @option\n * @type {number}\n * @default 500\n */\n changedDelay: 500,\n /**\n * Basevalue for non-linear sliders\n * @option\n * @type {number}\n * @default 5\n */\n nonLinearBase: 5,\n /**\n * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting.\n * @option\n * @type {string}\n * @default 'linear'\n */\n positionValueFunction: 'linear',\n};\n\nfunction percent(frac, num) {\n return (frac / num);\n}\nfunction absPosition($handle, dir, clickPos, param) {\n return Math.abs(($handle.position()[dir] + ($handle[param]() / 2)) - clickPos);\n}\nfunction baseLog(base, value) {\n return Math.log(value)/Math.log(base)\n}\n\nexport {Slider};\n","'use strict';\n\nimport $ from 'jquery';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Plugin } from './foundation.core.plugin';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Sticky module.\n * @module foundation.sticky\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass Sticky extends Plugin {\n /**\n * Creates a new instance of a sticky thing.\n * @class\n * @name Sticky\n * @param {jQuery} element - jQuery object to make sticky.\n * @param {Object} options - options object passed when creating the element programmatically.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Sticky.defaults, this.$element.data(), options);\n this.className = 'Sticky'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n var $parent = this.$element.parent('[data-sticky-container]'),\n id = this.$element[0].id || GetYoDigits(6, 'sticky'),\n _this = this;\n\n if($parent.length){\n this.$container = $parent;\n } else {\n this.wasWrapped = true;\n this.$element.wrap(this.options.container);\n this.$container = this.$element.parent();\n }\n this.$container.addClass(this.options.containerClass);\n\n this.$element.addClass(this.options.stickyClass).attr({ 'data-resize': id, 'data-mutate': id });\n if (this.options.anchor !== '') {\n $('#' + _this.options.anchor).attr({ 'data-mutate': id });\n }\n\n this.scrollCount = this.options.checkEvery;\n this.isStuck = false;\n this.onLoadListener = onLoad($(window), function () {\n //We calculate the container height to have correct values for anchor points offset calculation.\n _this.containerHeight = _this.$element.css(\"display\") == \"none\" ? 0 : _this.$element[0].getBoundingClientRect().height;\n _this.$container.css('height', _this.containerHeight);\n _this.elemHeight = _this.containerHeight;\n if (_this.options.anchor !== '') {\n _this.$anchor = $('#' + _this.options.anchor);\n } else {\n _this._parsePoints();\n }\n\n _this._setSizes(function () {\n var scroll = window.pageYOffset;\n _this._calc(false, scroll);\n //Unstick the element will ensure that proper classes are set.\n if (!_this.isStuck) {\n _this._removeSticky((scroll >= _this.topPoint) ? false : true);\n }\n });\n _this._events(id.split('-').reverse().join('-'));\n });\n }\n\n /**\n * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on.\n * @function\n * @private\n */\n _parsePoints() {\n var top = this.options.topAnchor == \"\" ? 1 : this.options.topAnchor,\n btm = this.options.btmAnchor== \"\" ? document.documentElement.scrollHeight : this.options.btmAnchor,\n pts = [top, btm],\n breaks = {};\n for (var i = 0, len = pts.length; i < len && pts[i]; i++) {\n var pt;\n if (typeof pts[i] === 'number') {\n pt = pts[i];\n } else {\n var place = pts[i].split(':'),\n anchor = $(`#${place[0]}`);\n\n pt = anchor.offset().top;\n if (place[1] && place[1].toLowerCase() === 'bottom') {\n pt += anchor[0].getBoundingClientRect().height;\n }\n }\n breaks[i] = pt;\n }\n\n\n this.points = breaks;\n return;\n }\n\n /**\n * Adds event handlers for the scrolling element.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _events(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n if (this.isOn) { return; }\n if (this.canStick) {\n this.isOn = true;\n $(window).off(scrollListener)\n .on(scrollListener, function(e) {\n if (_this.scrollCount === 0) {\n _this.scrollCount = _this.options.checkEvery;\n _this._setSizes(function() {\n _this._calc(false, window.pageYOffset);\n });\n } else {\n _this.scrollCount--;\n _this._calc(false, window.pageYOffset);\n }\n });\n }\n\n this.$element.off('resizeme.zf.trigger')\n .on('resizeme.zf.trigger', function(e, el) {\n _this._eventsHandler(id);\n });\n\n this.$element.on('mutateme.zf.trigger', function (e, el) {\n _this._eventsHandler(id);\n });\n\n if(this.$anchor) {\n this.$anchor.on('mutateme.zf.trigger', function (e, el) {\n _this._eventsHandler(id);\n });\n }\n }\n\n /**\n * Handler for events.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _eventsHandler(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n\n _this._setSizes(function() {\n _this._calc(false);\n if (_this.canStick) {\n if (!_this.isOn) {\n _this._events(id);\n }\n } else if (_this.isOn) {\n _this._pauseListeners(scrollListener);\n }\n });\n }\n\n /**\n * Removes event handlers for scroll and change events on anchor.\n * @fires Sticky#pause\n * @param {String} scrollListener - unique, namespaced scroll listener attached to `window`\n */\n _pauseListeners(scrollListener) {\n this.isOn = false;\n $(window).off(scrollListener);\n\n /**\n * Fires when the plugin is paused due to resize event shrinking the view.\n * @event Sticky#pause\n * @private\n */\n this.$element.trigger('pause.zf.sticky');\n }\n\n /**\n * Called on every `scroll` event and on `_init`\n * fires functions based on booleans and cached values\n * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints.\n * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`.\n */\n _calc(checkSizes, scroll) {\n if (checkSizes) { this._setSizes(); }\n\n if (!this.canStick) {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n return false;\n }\n\n if (!scroll) { scroll = window.pageYOffset; }\n\n if (scroll >= this.topPoint) {\n if (scroll <= this.bottomPoint) {\n if (!this.isStuck) {\n this._setSticky();\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(false);\n }\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n }\n }\n\n /**\n * Causes the $element to become stuck.\n * Adds `position: fixed;`, and helper classes.\n * @fires Sticky#stuckto\n * @function\n * @private\n */\n _setSticky() {\n var _this = this,\n stickTo = this.options.stickTo,\n mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom',\n notStuckTo = stickTo === 'top' ? 'bottom' : 'top',\n css = {};\n\n css[mrgn] = `${this.options[mrgn]}em`;\n css[stickTo] = 0;\n css[notStuckTo] = 'auto';\n this.isStuck = true;\n this.$element.removeClass(`is-anchored is-at-${notStuckTo}`)\n .addClass(`is-stuck is-at-${stickTo}`)\n .css(css)\n /**\n * Fires when the $element has become `position: fixed;`\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top`\n * @event Sticky#stuckto\n */\n .trigger(`sticky.zf.stuckto:${stickTo}`);\n this.$element.on(\"transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd\", function() {\n _this._setSizes();\n });\n }\n\n /**\n * Causes the $element to become unstuck.\n * Removes `position: fixed;`, and helper classes.\n * Adds other helper classes.\n * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element.\n * @fires Sticky#unstuckfrom\n * @private\n */\n _removeSticky(isTop) {\n var stickTo = this.options.stickTo,\n stickToTop = stickTo === 'top',\n css = {},\n anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight,\n mrgn = stickToTop ? 'marginTop' : 'marginBottom',\n notStuckTo = stickToTop ? 'bottom' : 'top',\n topOrBottom = isTop ? 'top' : 'bottom';\n\n css[mrgn] = 0;\n\n css['bottom'] = 'auto';\n if(isTop) {\n css['top'] = 0;\n } else {\n css['top'] = anchorPt;\n }\n\n this.isStuck = false;\n this.$element.removeClass(`is-stuck is-at-${stickTo}`)\n .addClass(`is-anchored is-at-${topOrBottom}`)\n .css(css)\n /**\n * Fires when the $element has become anchored.\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom`\n * @event Sticky#unstuckfrom\n */\n .trigger(`sticky.zf.unstuckfrom:${topOrBottom}`);\n }\n\n /**\n * Sets the $element and $container sizes for plugin.\n * Calls `_setBreakPoints`.\n * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`.\n * @private\n */\n _setSizes(cb) {\n this.canStick = MediaQuery.is(this.options.stickyOn);\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n }\n var _this = this,\n newElemWidth = this.$container[0].getBoundingClientRect().width,\n comp = window.getComputedStyle(this.$container[0]),\n pdngl = parseInt(comp['padding-left'], 10),\n pdngr = parseInt(comp['padding-right'], 10);\n\n if (this.$anchor && this.$anchor.length) {\n this.anchorHeight = this.$anchor[0].getBoundingClientRect().height;\n } else {\n this._parsePoints();\n }\n\n this.$element.css({\n 'max-width': `${newElemWidth - pdngl - pdngr}px`\n });\n\n var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight;\n if (this.$element.css(\"display\") == \"none\") {\n newContainerHeight = 0;\n }\n this.containerHeight = newContainerHeight;\n this.$container.css({\n height: newContainerHeight\n });\n this.elemHeight = newContainerHeight;\n\n if (!this.isStuck) {\n if (this.$element.hasClass('is-at-bottom')) {\n var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;\n this.$element.css('top', anchorPt);\n }\n }\n\n this._setBreakPoints(newContainerHeight, function() {\n if (cb && typeof cb === 'function') { cb(); }\n });\n }\n\n /**\n * Sets the upper and lower breakpoints for the element to become sticky/unsticky.\n * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`.\n * @param {Function} cb - optional callback function to be called on completion.\n * @private\n */\n _setBreakPoints(elemHeight, cb) {\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n else { return false; }\n }\n var mTop = emCalc(this.options.marginTop),\n mBtm = emCalc(this.options.marginBottom),\n topPoint = this.points ? this.points[0] : this.$anchor.offset().top,\n bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight,\n // topPoint = this.$anchor.offset().top || this.points[0],\n // bottomPoint = topPoint + this.anchorHeight || this.points[1],\n winHeight = window.innerHeight;\n\n if (this.options.stickTo === 'top') {\n topPoint -= mTop;\n bottomPoint -= (elemHeight + mTop);\n } else if (this.options.stickTo === 'bottom') {\n topPoint -= (winHeight - (elemHeight + mBtm));\n bottomPoint -= (winHeight - mBtm);\n } else {\n //this would be the stickTo: both option... tricky\n }\n\n this.topPoint = topPoint;\n this.bottomPoint = bottomPoint;\n\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n /**\n * Destroys the current sticky element.\n * Resets the element to the top position first.\n * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container.\n * @function\n */\n _destroy() {\n this._removeSticky(true);\n\n this.$element.removeClass(`${this.options.stickyClass} is-anchored is-at-top`)\n .css({\n height: '',\n top: '',\n bottom: '',\n 'max-width': ''\n })\n .off('resizeme.zf.trigger')\n .off('mutateme.zf.trigger');\n if (this.$anchor && this.$anchor.length) {\n this.$anchor.off('change.zf.sticky');\n }\n if (this.scrollListener) $(window).off(this.scrollListener)\n if (this.onLoadListener) $(window).off(this.onLoadListener)\n\n if (this.wasWrapped) {\n this.$element.unwrap();\n } else {\n this.$container.removeClass(this.options.containerClass)\n .css({\n height: ''\n });\n }\n }\n}\n\nSticky.defaults = {\n /**\n * Customizable container template. Add your own classes for styling and sizing.\n * @option\n * @type {string}\n * @default '<div data-sticky-container></div>'\n */\n container: '
      ',\n /**\n * Location in the view the element sticks to. Can be `'top'` or `'bottom'`.\n * @option\n * @type {string}\n * @default 'top'\n */\n stickTo: 'top',\n /**\n * If anchored to a single element, the id of that element.\n * @option\n * @type {string}\n * @default ''\n */\n anchor: '',\n /**\n * If using more than one element as anchor points, the id of the top anchor.\n * @option\n * @type {string}\n * @default ''\n */\n topAnchor: '',\n /**\n * If using more than one element as anchor points, the id of the bottom anchor.\n * @option\n * @type {string}\n * @default ''\n */\n btmAnchor: '',\n /**\n * Margin, in `em`'s to apply to the top of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginTop: 1,\n /**\n * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginBottom: 1,\n /**\n * Breakpoint string that is the minimum screen size an element should become sticky.\n * @option\n * @type {string}\n * @default 'medium'\n */\n stickyOn: 'medium',\n /**\n * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`.\n * @option\n * @type {string}\n * @default 'sticky'\n */\n stickyClass: 'sticky',\n /**\n * Class applied to sticky container. Foundation defaults to `sticky-container`.\n * @option\n * @type {string}\n * @default 'sticky-container'\n */\n containerClass: 'sticky-container',\n /**\n * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll.\n * @option\n * @type {number}\n * @default -1\n */\n checkEvery: -1\n};\n\n/**\n * Helper function to calculate em values\n * @param Number {em} - number of em's to calculate into pixels\n */\nfunction emCalc(em) {\n return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em;\n}\n\nexport {Sticky};\n","'use strict';\n\nimport $ from 'jquery';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\nimport { Plugin } from './foundation.core.plugin';\n/**\n * Tabs module.\n * @module foundation.tabs\n * @requires foundation.util.keyboard\n * @requires foundation.util.imageLoader if tabs contain images\n */\n\nclass Tabs extends Plugin {\n /**\n * Creates a new instance of tabs.\n * @class\n * @name Tabs\n * @fires Tabs#init\n * @param {jQuery} element - jQuery object to make into tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tabs.defaults, this.$element.data(), options);\n this.className = 'Tabs'; // ie9 back compat\n\n this._init();\n Keyboard.register('Tabs', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'previous',\n 'ARROW_DOWN': 'next',\n 'ARROW_LEFT': 'previous'\n // 'TAB': 'next',\n // 'SHIFT_TAB': 'previous'\n });\n }\n\n /**\n * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.\n * @private\n */\n _init() {\n var _this = this;\n this._isInitializing = true;\n\n this.$element.attr({'role': 'tablist'});\n this.$tabTitles = this.$element.find(`.${this.options.linkClass}`);\n this.$tabContent = $(`[data-tabs-content=\"${this.$element[0].id}\"]`);\n\n this.$tabTitles.each(function(){\n var $elem = $(this),\n $link = $elem.find('a'),\n isActive = $elem.hasClass(`${_this.options.linkActiveClass}`),\n hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1),\n linkId = $link[0].id ? $link[0].id : `${hash}-label`,\n $tabContent = $(`#${hash}`);\n\n $elem.attr({'role': 'presentation'});\n\n $link.attr({\n 'role': 'tab',\n 'aria-controls': hash,\n 'aria-selected': isActive,\n 'id': linkId,\n 'tabindex': isActive ? '0' : '-1'\n });\n\n $tabContent.attr({\n 'role': 'tabpanel',\n 'aria-labelledby': linkId\n });\n\n // Save up the initial hash to return to it later when going back in history\n if (isActive) {\n _this._initialAnchor = `#${hash}`;\n }\n\n if(!isActive) {\n $tabContent.attr('aria-hidden', 'true');\n }\n\n if(isActive && _this.options.autoFocus){\n _this.onLoadListener = onLoad($(window), function() {\n $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, () => {\n $link.focus();\n });\n });\n }\n });\n\n if(this.options.matchHeight) {\n var $images = this.$tabContent.find('img');\n\n if ($images.length) {\n onImagesLoaded($images, this._setHeight.bind(this));\n } else {\n this._setHeight();\n }\n }\n\n // Current context-bound function to open tabs on page load or history hashchange\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var $anchor = anchor && $(anchor);\n var $link = anchor && this.$element.find('[href$=\"'+anchor+'\"]');\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n // If there is an anchor for the hash, select it\n if ($anchor && $anchor.length && $link && $link.length) {\n this.selectTab($anchor, true);\n }\n // Otherwise, collapse everything\n else {\n this._collapse();\n }\n\n if (isOwnAnchor) {\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top }, this.options.deepLinkSmudgeDelay);\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Tabs#deeplink\n */\n this.$element.trigger('deeplink.zf.tabs', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the tabs.\n * @private\n */\n _events() {\n this._addKeyHandler();\n this._addClickHandler();\n this._setHeightMqHandler = null;\n\n if (this.options.matchHeight) {\n this._setHeightMqHandler = this._setHeight.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n\n if(this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Adds click handlers for items within the tabs.\n * @private\n */\n _addClickHandler() {\n var _this = this;\n\n this.$element\n .off('click.zf.tabs')\n .on('click.zf.tabs', `.${this.options.linkClass}`, function(e){\n e.preventDefault();\n e.stopPropagation();\n _this._handleTabChange($(this));\n });\n }\n\n /**\n * Adds keyboard event handlers for items within the tabs.\n * @private\n */\n _addKeyHandler() {\n var _this = this;\n\n this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function(e){\n if (e.which === 9) return;\n\n\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n if (_this.options.wrapOnKeys) {\n $prevElement = i === 0 ? $elements.last() : $elements.eq(i-1);\n $nextElement = i === $elements.length -1 ? $elements.first() : $elements.eq(i+1);\n } else {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n }\n return;\n }\n });\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Tabs', {\n open: function() {\n $element.find('[role=\"tab\"]').focus();\n _this._handleTabChange($element);\n },\n previous: function() {\n $prevElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($prevElement);\n },\n next: function() {\n $nextElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($nextElement);\n },\n handled: function() {\n e.stopPropagation();\n e.preventDefault();\n }\n });\n });\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.\n * @param {jQuery} $target - Tab to open.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @fires Tabs#change\n * @function\n */\n _handleTabChange($target, historyHandled) {\n\n // With `activeCollapse`, if the target is the active Tab, collapse it.\n if ($target.hasClass(`${this.options.linkActiveClass}`)) {\n if(this.options.activeCollapse) {\n this._collapse();\n }\n return;\n }\n\n var $oldTab = this.$element.\n find(`.${this.options.linkClass}.${this.options.linkActiveClass}`),\n $tabLink = $target.find('[role=\"tab\"]'),\n target = $tabLink.attr('data-tabs-target'),\n anchor = target && target.length ? `#${target}` : $tabLink[0].hash,\n $targetContent = this.$tabContent.find(anchor);\n\n //close old tab\n this._collapseTab($oldTab);\n\n //open new tab\n this._openTab($target);\n\n //either replace or update browser history\n if (this.options.deepLink && !historyHandled) {\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n\n /**\n * Fires when the plugin has successfully changed tabs.\n * @event Tabs#change\n */\n this.$element.trigger('change.zf.tabs', [$target, $targetContent]);\n\n //fire to children a mutation event\n $targetContent.find(\"[data-mutate]\").trigger(\"mutateme.zf.trigger\");\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to open.\n * @function\n */\n _openTab($target) {\n var $tabLink = $target.find('[role=\"tab\"]'),\n hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1),\n $targetContent = this.$tabContent.find(`#${hash}`);\n\n $target.addClass(`${this.options.linkActiveClass}`);\n\n $tabLink.attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n });\n\n $targetContent\n .addClass(`${this.options.panelActiveClass}`).removeAttr('aria-hidden');\n }\n\n /**\n * Collapses `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to collapse.\n * @function\n */\n _collapseTab($target) {\n var $target_anchor = $target\n .removeClass(`${this.options.linkActiveClass}`)\n .find('[role=\"tab\"]')\n .attr({\n 'aria-selected': 'false',\n 'tabindex': -1\n });\n\n $(`#${$target_anchor.attr('aria-controls')}`)\n .removeClass(`${this.options.panelActiveClass}`)\n .attr({ 'aria-hidden': 'true' })\n }\n\n /**\n * Collapses the active Tab.\n * @fires Tabs#collapse\n * @function\n */\n _collapse() {\n var $activeTab = this.$element.find(`.${this.options.linkClass}.${this.options.linkActiveClass}`);\n\n if ($activeTab.length) {\n this._collapseTab($activeTab);\n\n /**\n * Fires when the plugin has successfully collapsed tabs.\n * @event Tabs#collapse\n */\n this.$element.trigger('collapse.zf.tabs', [$activeTab]);\n }\n }\n\n /**\n * Public method for selecting a content pane to display.\n * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @function\n */\n selectTab(elem, historyHandled) {\n var idStr;\n\n if (typeof elem === 'object') {\n idStr = elem[0].id;\n } else {\n idStr = elem;\n }\n\n if (idStr.indexOf('#') < 0) {\n idStr = `#${idStr}`;\n }\n\n var $target = this.$tabTitles.has(`[href$=\"${idStr}\"]`);\n\n this._handleTabChange($target, historyHandled);\n };\n\n /**\n * Sets the height of each panel to the height of the tallest panel.\n * If enabled in options, gets called on media query change.\n * If loading content via external source, can be called directly or with _reflow.\n * If enabled with `data-match-height=\"true\"`, tabs sets to equal height\n * @function\n * @private\n */\n _setHeight() {\n var max = 0,\n _this = this; // Lock down the `this` value for the root tabs object\n\n this.$tabContent\n .find(`.${this.options.panelClass}`)\n .css('height', '')\n .each(function() {\n\n var panel = $(this),\n isActive = panel.hasClass(`${_this.options.panelActiveClass}`); // get the options from the parent instead of trying to get them from the child\n\n if (!isActive) {\n panel.css({'visibility': 'hidden', 'display': 'block'});\n }\n\n var temp = this.getBoundingClientRect().height;\n\n if (!isActive) {\n panel.css({\n 'visibility': '',\n 'display': ''\n });\n }\n\n max = temp > max ? temp : max;\n })\n .css('height', `${max}px`);\n }\n\n /**\n * Destroys an instance of tabs.\n * @fires Tabs#destroyed\n */\n _destroy() {\n this.$element\n .find(`.${this.options.linkClass}`)\n .off('.zf.tabs').hide().end()\n .find(`.${this.options.panelClass}`)\n .hide();\n\n if (this.options.matchHeight) {\n if (this._setHeightMqHandler != null) {\n $(window).off('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n }\n\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n if (this.onLoadListener) {\n $(window).off(this.onLoadListener);\n }\n }\n}\n\nTabs.defaults = {\n /**\n * Link the location hash to the active pane.\n * Set the location hash when the active pane changes, and open the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n\n /**\n * If `deepLink` is enabled, update the browser history with the open tab\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false,\n\n /**\n * Allows the window to scroll to content of active pane on load.\n * Not recommended if more than one tab panel per page.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n\n /**\n * Allows keyboard input to 'wrap' around the tab links.\n * @option\n * @type {boolean}\n * @default true\n */\n wrapOnKeys: true,\n\n /**\n * Allows the tab content panes to match heights if set to true.\n * @option\n * @type {boolean}\n * @default false\n */\n matchHeight: false,\n\n /**\n * Allows active tabs to collapse when clicked.\n * @option\n * @type {boolean}\n * @default false\n */\n activeCollapse: false,\n\n /**\n * Class applied to `li`'s in tab link list.\n * @option\n * @type {string}\n * @default 'tabs-title'\n */\n linkClass: 'tabs-title',\n\n /**\n * Class applied to the active `li` in tab link list.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n linkActiveClass: 'is-active',\n\n /**\n * Class applied to the content containers.\n * @option\n * @type {string}\n * @default 'tabs-panel'\n */\n panelClass: 'tabs-panel',\n\n /**\n * Class applied to the active content container.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n panelActiveClass: 'is-active'\n};\n\nexport {Tabs};\n","'use strict';\n\nimport $ from 'jquery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\nimport { RegExpEscape } from './foundation.core.utils';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Toggler module.\n * @module foundation.toggler\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n */\n\nclass Toggler extends Plugin {\n /**\n * Creates a new instance of Toggler.\n * @class\n * @name Toggler\n * @fires Toggler#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Toggler.defaults, element.data(), options);\n this.className = '';\n this.className = 'Toggler'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate.\n * @function\n * @private\n */\n _init() {\n var input;\n // Parse animation classes if they were set\n if (this.options.animate) {\n input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n }\n // Otherwise, parse toggle class\n else {\n input = this.$element.data('toggler');\n // Allow for a . at the beginning of the string\n this.className = input[0] === '.' ? input.slice(1) : input;\n }\n\n // Add ARIA attributes to triggers:\n var id = this.$element[0].id,\n $triggers = $(`[data-open~=\"${id}\"], [data-close~=\"${id}\"], [data-toggle~=\"${id}\"]`);\n\n // - aria-expanded: according to the element visibility.\n $triggers.attr('aria-expanded', !this.$element.is(':hidden'));\n // - aria-controls: adding the element id to it if not already in it.\n $triggers.each((index, trigger) => {\n const $trigger = $(trigger);\n const controls = $trigger.attr('aria-controls') || '';\n\n const containsId = new RegExp(`\\\\b${RegExpEscape(id)}\\\\b`).test(controls);\n if (!containsId) $trigger.attr('aria-controls', controls ? `${controls} ${id}` : id);\n });\n }\n\n /**\n * Initializes events for the toggle trigger.\n * @function\n * @private\n */\n _events() {\n this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this));\n }\n\n /**\n * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was \"on\" or \"off\".\n * @function\n * @fires Toggler#on\n * @fires Toggler#off\n */\n toggle() {\n this[ this.options.animate ? '_toggleAnimate' : '_toggleClass']();\n }\n\n _toggleClass() {\n this.$element.toggleClass(this.className);\n\n var isOn = this.$element.hasClass(this.className);\n if (isOn) {\n /**\n * Fires if the target element has the class after a toggle.\n * @event Toggler#on\n */\n this.$element.trigger('on.zf.toggler');\n }\n else {\n /**\n * Fires if the target element does not have the class after a toggle.\n * @event Toggler#off\n */\n this.$element.trigger('off.zf.toggler');\n }\n\n this._updateARIA(isOn);\n this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger');\n }\n\n _toggleAnimate() {\n var _this = this;\n\n if (this.$element.is(':hidden')) {\n Motion.animateIn(this.$element, this.animationIn, function() {\n _this._updateARIA(true);\n this.trigger('on.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$element, this.animationOut, function() {\n _this._updateARIA(false);\n this.trigger('off.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n }\n\n _updateARIA(isOn) {\n var id = this.$element[0].id;\n $(`[data-open=\"${id}\"], [data-close=\"${id}\"], [data-toggle=\"${id}\"]`)\n .attr({\n 'aria-expanded': isOn ? true : false\n });\n }\n\n /**\n * Destroys the instance of Toggler on the element.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.toggler');\n }\n}\n\nToggler.defaults = {\n /**\n * Tells the plugin if the element should animated when toggled.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport {Toggler};\n","'use strict';\n\nimport $ from 'jquery';\n\nimport { GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\nimport { Positionable } from './foundation.positionable';\n\n/**\n * Tooltip module.\n * @module foundation.tooltip\n * @requires foundation.util.box\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.triggers\n */\n\nclass Tooltip extends Positionable {\n /**\n * Creates a new instance of a Tooltip.\n * @class\n * @name Tooltip\n * @fires Tooltip#init\n * @param {jQuery} element - jQuery object to attach a tooltip to.\n * @param {Object} options - object to extend the default configuration.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options);\n this.className = 'Tooltip'; // ie9 back compat\n\n this.isActive = false;\n this.isClick = false;\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor.\n * @private\n */\n _init() {\n MediaQuery._init();\n var elemId = this.$element.attr('aria-describedby') || GetYoDigits(6, 'tooltip');\n\n this.options.tipText = this.options.tipText || this.$element.attr('title');\n this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId);\n\n if (this.options.allowHtml) {\n this.template.appendTo(document.body)\n .html(this.options.tipText)\n .hide();\n } else {\n this.template.appendTo(document.body)\n .text(this.options.tipText)\n .hide();\n }\n\n this.$element.attr({\n 'title': '',\n 'aria-describedby': elemId,\n 'data-yeti-box': elemId,\n 'data-toggle': elemId,\n 'data-resize': elemId\n }).addClass(this.options.triggerClass);\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var position = this.$element[0].className.match(/\\b(top|left|right|bottom)\\b/g);\n return position ? position[0] : 'top';\n }\n\n _getDefaultAlignment() {\n return 'center';\n }\n\n _getHOffset() {\n if(this.position === 'left' || this.position === 'right') {\n return this.options.hOffset + this.options.tooltipWidth;\n } else {\n return this.options.hOffset\n }\n }\n\n _getVOffset() {\n if(this.position === 'top' || this.position === 'bottom') {\n return this.options.vOffset + this.options.tooltipHeight;\n } else {\n return this.options.vOffset\n }\n }\n\n /**\n * builds the tooltip element, adds attributes, and returns the template.\n * @private\n */\n _buildTemplate(id) {\n var templateClasses = (`${this.options.tooltipClass} ${this.options.templateClasses}`).trim();\n var $template = $('
      ').addClass(templateClasses).attr({\n 'role': 'tooltip',\n 'aria-hidden': true,\n 'data-is-active': false,\n 'data-is-focus': false,\n 'id': id\n });\n return $template;\n }\n\n /**\n * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding.\n * if the tooltip is larger than the screen width, default to full width - any user selected margin\n * @private\n */\n _setPosition() {\n super._setPosition(this.$element, this.template);\n }\n\n /**\n * reveals the tooltip, and fires an event to close any other open tooltips on the page\n * @fires Tooltip#closeme\n * @fires Tooltip#show\n * @function\n */\n show() {\n if (this.options.showOn !== 'all' && !MediaQuery.is(this.options.showOn)) {\n // console.error('The screen is too small to display this tooltip');\n return false;\n }\n\n var _this = this;\n this.template.css('visibility', 'hidden').show();\n this._setPosition();\n this.template.removeClass('top bottom left right').addClass(this.position)\n this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment);\n\n /**\n * Fires to close all other open tooltips on the page\n * @event Closeme#tooltip\n */\n this.$element.trigger('closeme.zf.tooltip', this.template.attr('id'));\n\n\n this.template.attr({\n 'data-is-active': true,\n 'aria-hidden': false\n });\n _this.isActive = true;\n // console.log(this.template);\n this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function() {\n //maybe do stuff?\n });\n /**\n * Fires when the tooltip is shown\n * @event Tooltip#show\n */\n this.$element.trigger('show.zf.tooltip');\n }\n\n /**\n * Hides the current tooltip, and resets the positioning class if it was changed due to collision\n * @fires Tooltip#hide\n * @function\n */\n hide() {\n // console.log('hiding', this.$element.data('yeti-box'));\n var _this = this;\n this.template.stop().attr({\n 'aria-hidden': true,\n 'data-is-active': false\n }).fadeOut(this.options.fadeOutDuration, function() {\n _this.isActive = false;\n _this.isClick = false;\n });\n /**\n * fires when the tooltip is hidden\n * @event Tooltip#hide\n */\n this.$element.trigger('hide.zf.tooltip');\n }\n\n /**\n * adds event listeners for the tooltip and its anchor\n * TODO combine some of the listeners like focus and mouseenter, etc.\n * @private\n */\n _events() {\n var _this = this;\n var $template = this.template;\n var isFocus = false;\n\n if (!this.options.disableHover) {\n\n this.$element\n .on('mouseenter.zf.tooltip', function(e) {\n if (!_this.isActive) {\n _this.timeout = setTimeout(function() {\n _this.show();\n }, _this.options.hoverDelay);\n }\n })\n .on('mouseleave.zf.tooltip', function(e) {\n clearTimeout(_this.timeout);\n if (!isFocus || (_this.isClick && !_this.options.clickOpen)) {\n _this.hide();\n }\n });\n }\n\n if (this.options.clickOpen) {\n this.$element.on('mousedown.zf.tooltip', function(e) {\n e.stopImmediatePropagation();\n if (_this.isClick) {\n //_this.hide();\n // _this.isClick = false;\n } else {\n _this.isClick = true;\n if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) {\n _this.show();\n }\n }\n });\n } else {\n this.$element.on('mousedown.zf.tooltip', function(e) {\n e.stopImmediatePropagation();\n _this.isClick = true;\n });\n }\n\n if (!this.options.disableForTouch) {\n this.$element\n .on('tap.zf.tooltip touchend.zf.tooltip', function(e) {\n _this.isActive ? _this.hide() : _this.show();\n });\n }\n\n this.$element.on({\n // 'toggle.zf.trigger': this.toggle.bind(this),\n // 'close.zf.trigger': this.hide.bind(this)\n 'close.zf.trigger': this.hide.bind(this)\n });\n\n this.$element\n .on('focus.zf.tooltip', function(e) {\n isFocus = true;\n if (_this.isClick) {\n // If we're not showing open on clicks, we need to pretend a click-launched focus isn't\n // a real focus, otherwise on hover and come back we get bad behavior\n if(!_this.options.clickOpen) { isFocus = false; }\n return false;\n } else {\n _this.show();\n }\n })\n\n .on('focusout.zf.tooltip', function(e) {\n isFocus = false;\n _this.isClick = false;\n _this.hide();\n })\n\n .on('resizeme.zf.trigger', function() {\n if (_this.isActive) {\n _this._setPosition();\n }\n });\n }\n\n /**\n * adds a toggle method, in addition to the static show() & hide() functions\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Destroys an instance of tooltip, removes template element from the view.\n * @function\n */\n _destroy() {\n this.$element.attr('title', this.template.text())\n .off('.zf.trigger .zf.tooltip')\n .removeClass(this.options.triggerClass)\n .removeClass('top right left bottom')\n .removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box');\n\n this.template.remove();\n }\n}\n\nTooltip.defaults = {\n disableForTouch: false,\n /**\n * Time, in ms, before a tooltip should open on hover.\n * @option\n * @type {number}\n * @default 200\n */\n hoverDelay: 200,\n /**\n * Time, in ms, a tooltip should take to fade into view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeInDuration: 150,\n /**\n * Time, in ms, a tooltip should take to fade out of view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeOutDuration: 150,\n /**\n * Disables hover events from opening the tooltip if set to true\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Optional addtional classes to apply to the tooltip template on init.\n * @option\n * @type {string}\n * @default ''\n */\n templateClasses: '',\n /**\n * Non-optional class added to tooltip templates. Foundation default is 'tooltip'.\n * @option\n * @type {string}\n * @default 'tooltip'\n */\n tooltipClass: 'tooltip',\n /**\n * Class applied to the tooltip anchor element.\n * @option\n * @type {string}\n * @default 'has-tip'\n */\n triggerClass: 'has-tip',\n /**\n * Minimum breakpoint size at which to open the tooltip.\n * @option\n * @type {string}\n * @default 'small'\n */\n showOn: 'small',\n /**\n * Custom template to be used to generate markup for tooltip.\n * @option\n * @type {string}\n * @default ''\n */\n template: '',\n /**\n * Text displayed in the tooltip template on open.\n * @option\n * @type {string}\n * @default ''\n */\n tipText: '',\n touchCloseText: 'Tap to close.',\n /**\n * Allows the tooltip to remain open if triggered with a click or touch event.\n * @option\n * @type {boolean}\n * @default true\n */\n clickOpen: true,\n /**\n * Position of tooltip. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, tooltip will first try to\n * position as defined by data-position and data-alignment, but reposition if\n * it would cause an overflow. @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * Less common for tooltips.\n * @option\n * @type {boolean}\n * @default false\n */\n allowBottomOverlap: false,\n /**\n * Distance, in pixels, the template should push away from the anchor on the Y axis.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Distance, in pixels, the template should push away from the anchor on the X axis\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip\n * @option\n * @type {number}\n * @default 14\n */\n tooltipHeight: 14,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip\n * @option\n * @type {number}\n * @default 12\n */\n tooltipWidth: 12,\n /**\n * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips,\n * allowing HTML may open yourself up to XSS attacks.\n * @option\n * @type {boolean}\n * @default false\n */\n allowHtml: false\n};\n\n/**\n * TODO utilize resize event trigger\n */\n\nexport {Tooltip};\n","'use strict';\n\nimport $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin }from './foundation.core.plugin';\n\nimport { Accordion } from './foundation.accordion';\nimport { Tabs } from './foundation.tabs';\n\n// The plugin matches the plugin classes with these plugin instances.\nvar MenuPlugins = {\n tabs: {\n cssClass: 'tabs',\n plugin: Tabs\n },\n accordion: {\n cssClass: 'accordion',\n plugin: Accordion\n }\n};\n\n\n/**\n * ResponsiveAccordionTabs module.\n * @module foundation.responsiveAccordionTabs\n * @requires foundation.util.motion\n * @requires foundation.accordion\n * @requires foundation.tabs\n */\n\nclass ResponsiveAccordionTabs extends Plugin{\n /**\n * Creates a new instance of a responsive accordion tabs.\n * @class\n * @name ResponsiveAccordionTabs\n * @fires ResponsiveAccordionTabs#init\n * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.options = $.extend({}, this.$element.data(), options);\n this.rules = this.$element.data('responsive-accordion-tabs');\n this.currentMq = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveAccordionTabs'; // ie9 back compat\n if (!this.$element.attr('id')) {\n this.$element.attr('id',GetYoDigits(6, 'responsiveaccordiontabs'));\n };\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element.\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n this._getAllOptions();\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n }\n\n _getAllOptions() {\n //get all defaults and options\n var _this = this;\n _this.allOptions = {};\n for (var key in MenuPlugins) {\n if (MenuPlugins.hasOwnProperty(key)) {\n var obj = MenuPlugins[key];\n try {\n var dummyPlugin = $('
        ');\n var tmpPlugin = new obj.plugin(dummyPlugin,_this.options);\n for (var keyKey in tmpPlugin.options) {\n if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') {\n var objObj = tmpPlugin.options[keyKey];\n _this.allOptions[keyKey] = objObj;\n }\n }\n tmpPlugin.destroy();\n }\n catch(e) {\n }\n }\n }\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this);\n $(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) {\n //don't know why but on nested elements data zfPlugin get's lost\n if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin',this.storezfData);\n this.currentPlugin.destroy();\n }\n this._handleMarkup(this.rules[matchedMq].cssClass);\n this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n this.storezfData = this.currentPlugin.$element.data('zfPlugin');\n\n }\n\n _handleMarkup(toSet){\n var _this = this, fromString = 'accordion';\n var $panels = $('[data-tabs-content='+this.$element.attr('id')+']');\n if ($panels.length) fromString = 'tabs';\n if (fromString === toSet) {\n return;\n };\n\n var tabsTitle = _this.allOptions.linkClass?_this.allOptions.linkClass:'tabs-title';\n var tabsPanel = _this.allOptions.panelClass?_this.allOptions.panelClass:'tabs-panel';\n\n this.$element.removeAttr('role');\n var $liHeads = this.$element.children('.'+tabsTitle+',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item');\n var $liHeadsA = $liHeads.children('a').removeClass('accordion-title');\n\n if (fromString === 'tabs') {\n $panels = $panels.children('.'+tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby');\n $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected');\n }else{\n $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content');\n };\n\n $panels.css({display:'',visibility:''});\n $liHeads.css({display:'',visibility:''});\n if (toSet === 'accordion') {\n $panels.each(function(key,value){\n $(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content','').removeClass('is-active').css({height:''});\n $('[data-tabs-content='+_this.$element.attr('id')+']').after('
        ').detach();\n $liHeads.addClass('accordion-item').attr('data-accordion-item','');\n $liHeadsA.addClass('accordion-title');\n });\n }else if (toSet === 'tabs'){\n var $tabsContent = $('[data-tabs-content='+_this.$element.attr('id')+']');\n var $placeholder = $('#tabs-placeholder-'+_this.$element.attr('id'));\n if ($placeholder.length) {\n $tabsContent = $('
        ').insertAfter($placeholder).attr('data-tabs-content',_this.$element.attr('id'));\n $placeholder.remove();\n }else{\n $tabsContent = $('
        ').insertAfter(_this.$element).attr('data-tabs-content',_this.$element.attr('id'));\n };\n $panels.each(function(key,value){\n var tempValue = $(value).appendTo($tabsContent).addClass(tabsPanel);\n var hash = $liHeadsA.get(key).hash.slice(1);\n var id = $(value).attr('id') || GetYoDigits(6, 'accordion');\n if (hash !== id) {\n if (hash !== '') {\n $(value).attr('id',hash);\n }else{\n hash = id;\n $(value).attr('id',hash);\n $($liHeadsA.get(key)).attr('href',$($liHeadsA.get(key)).attr('href').replace('#','')+'#'+hash);\n };\n };\n var isActive = $($liHeads.get(key)).hasClass('is-active');\n if (isActive) {\n tempValue.addClass('is-active');\n };\n });\n $liHeads.addClass(tabsTitle);\n };\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n if (this.currentPlugin) this.currentPlugin.destroy();\n $(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n}\n\nResponsiveAccordionTabs.defaults = {};\n\nexport {ResponsiveAccordionTabs};\n","import $ from 'jquery';\n\nimport { Foundation } from '../foundation.core';\nimport * as CoreUtils from '../foundation.core.utils';\nimport { Box } from '../foundation.util.box'\nimport { onImagesLoaded } from '../foundation.util.imageLoader';\nimport { Keyboard } from '../foundation.util.keyboard';\nimport { MediaQuery } from '../foundation.util.mediaQuery';\nimport { Motion, Move } from '../foundation.util.motion';\nimport { Nest } from '../foundation.util.nest';\nimport { Timer } from '../foundation.util.timer';\nimport { Touch } from '../foundation.util.touch';\nimport { Triggers } from '../foundation.util.triggers';\nimport { Abide } from '../foundation.abide';\nimport { Accordion } from '../foundation.accordion';\nimport { AccordionMenu } from '../foundation.accordionMenu';\nimport { Drilldown } from '../foundation.drilldown';\nimport { Dropdown } from '../foundation.dropdown';\nimport { DropdownMenu } from '../foundation.dropdownMenu';\nimport { Equalizer } from '../foundation.equalizer';\nimport { Interchange } from '../foundation.interchange';\nimport { Magellan } from '../foundation.magellan';\nimport { OffCanvas } from '../foundation.offcanvas';\nimport { Orbit } from '../foundation.orbit';\nimport { ResponsiveMenu } from '../foundation.responsiveMenu';\nimport { ResponsiveToggle } from '../foundation.responsiveToggle';\nimport { Reveal } from '../foundation.reveal';\nimport { Slider } from '../foundation.slider';\nimport { SmoothScroll } from '../foundation.smoothScroll';\nimport { Sticky } from '../foundation.sticky';\nimport { Tabs } from '../foundation.tabs';\nimport { Toggler } from '../foundation.toggler';\nimport { Tooltip } from '../foundation.tooltip';\nimport { ResponsiveAccordionTabs } from '../foundation.responsiveAccordionTabs';\n\nFoundation.addToJquery($);\n\n// Add Foundation Utils to Foundation global namespace for backwards\n// compatibility.\nFoundation.rtl = CoreUtils.rtl;\nFoundation.GetYoDigits = CoreUtils.GetYoDigits;\nFoundation.transitionend = CoreUtils.transitionend;\nFoundation.RegExpEscape = CoreUtils.RegExpEscape;\nFoundation.onLoad = CoreUtils.onLoad;\n\nFoundation.Box = Box;\nFoundation.onImagesLoaded = onImagesLoaded;\nFoundation.Keyboard = Keyboard;\nFoundation.MediaQuery = MediaQuery;\nFoundation.Motion = Motion;\nFoundation.Move = Move;\nFoundation.Nest = Nest;\nFoundation.Timer = Timer;\n\n// Touch and Triggers previously were almost purely sede effect driven,\n// so no need to add it to Foundation, just init them.\nTouch.init($);\nTriggers.init($, Foundation);\nMediaQuery._init();\n\nFoundation.plugin(Abide, 'Abide');\nFoundation.plugin(Accordion, 'Accordion');\nFoundation.plugin(AccordionMenu, 'AccordionMenu');\nFoundation.plugin(Drilldown, 'Drilldown');\nFoundation.plugin(Dropdown, 'Dropdown');\nFoundation.plugin(DropdownMenu, 'DropdownMenu');\nFoundation.plugin(Equalizer, 'Equalizer');\nFoundation.plugin(Interchange, 'Interchange');\nFoundation.plugin(Magellan, 'Magellan');\nFoundation.plugin(OffCanvas, 'OffCanvas');\nFoundation.plugin(Orbit, 'Orbit');\nFoundation.plugin(ResponsiveMenu, 'ResponsiveMenu');\nFoundation.plugin(ResponsiveToggle, 'ResponsiveToggle');\nFoundation.plugin(Reveal, 'Reveal');\nFoundation.plugin(Slider, 'Slider');\nFoundation.plugin(SmoothScroll, 'SmoothScroll');\nFoundation.plugin(Sticky, 'Sticky');\nFoundation.plugin(Tabs, 'Tabs');\nFoundation.plugin(Toggler, 'Toggler');\nFoundation.plugin(Tooltip, 'Tooltip');\nFoundation.plugin(ResponsiveAccordionTabs, 'ResponsiveAccordionTabs');\n\nexport {\n Foundation,\n CoreUtils,\n Box,\n onImagesLoaded,\n Keyboard,\n MediaQuery,\n Motion,\n Nest,\n Timer,\n Touch,\n Triggers,\n Abide,\n Accordion,\n AccordionMenu,\n Drilldown,\n Dropdown,\n DropdownMenu,\n Equalizer,\n Interchange,\n Magellan,\n OffCanvas,\n Orbit,\n ResponsiveMenu,\n ResponsiveToggle,\n Reveal,\n Slider,\n SmoothScroll,\n Sticky,\n Tabs,\n Toggler,\n Tooltip,\n ResponsiveAccordionTabs\n}\n\nexport default Foundation;\n\n"],"names":["rtl","$","attr","GetYoDigits","length","namespace","Math","round","pow","random","toString","slice","RegExpEscape","str","replace","transitionend","$elem","transitions","elem","document","createElement","end","t","style","setTimeout","triggerHandler","onLoad","handler","didLoad","readyState","eventType","cb","one","window","onLeaveElement","leaveWindow","on","leaveHandler","e","rest","_this","leaveEventDebouncer","relatedTarget","hasFocus","reenterHandler","reeenterE","has","target","call","matchMedia","styleMedia","media","script","getElementsByTagName","info","type","id","head","appendChild","parentNode","insertBefore","getComputedStyle","currentStyle","matchMedium","text","styleSheet","cssText","textContent","width","matches","MediaQuery","queries","current","_init","self","$meta","appendTo","extractedStyles","css","namedQueries","parseStyleToObject","key","hasOwnProperty","push","name","value","_getCurrentSize","_watcher","atLeast","size","query","get","is","trim","split","i","matched","off","newSize","currentSize","trigger","styleObject","reduce","ret","param","parts","val","decodeURIComponent","Array","isArray","FOUNDATION_VERSION","Foundation","version","_plugins","_uuids","plugin","className","functionName","attrName","hyphenate","registerPlugin","pluginName","constructor","toLowerCase","uuid","$element","data","unregisterPlugin","splice","indexOf","removeAttr","removeData","prop","reInit","plugins","isJQ","each","fns","plgs","forEach","p","foundation","Object","keys","err","console","error","reflow","find","addBack","$el","opts","warn","thing","opt","map","el","parseValue","er","getFnName","addToJquery","method","$noJS","removeClass","args","prototype","arguments","plugClass","apply","ReferenceError","TypeError","fn","util","throttle","func","delay","timer","context","Date","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","test","navigator","userAgent","lastTime","callback","nextTime","max","clearTimeout","performance","start","Function","bind","oThis","aArgs","fToBind","fNOP","fBound","concat","funcNameRegex","results","exec","isNaN","parseFloat","Box","ImNotTouchingYou","OverlapArea","GetDimensions","GetOffsets","GetExplicitOffsets","element","parent","lrOnly","tbOnly","ignoreBottom","eleDims","topOver","bottomOver","leftOver","rightOver","parDims","height","offset","top","left","windowDims","min","sqrt","Error","rect","getBoundingClientRect","parRect","winRect","body","winY","pageYOffset","winX","pageXOffset","parentDims","anchor","position","vOffset","hOffset","isOverflow","log","Rtl","$eleDims","$anchorDims","alignment","topVal","leftVal","onImagesLoaded","images","unloaded","complete","naturalWidth","singleImageLoaded","image","Image","events","me","event","src","keyCodes","commands","findFocusable","filter","parseKey","which","keyCode","String","fromCharCode","toUpperCase","shiftKey","ctrlKey","altKey","Keyboard","getKeyCodes","handleKey","component","functions","commandList","cmds","command","ltr","extend","returnValue","handled","unhandled","register","componentName","trapFocus","$focusable","$firstFocusable","eq","$lastFocusable","preventDefault","focus","releaseFocus","kcs","k","kc","initClasses","activeClasses","Motion","animateIn","animation","animate","animateOut","Move","duration","anim","prog","move","ts","isIn","initClass","activeClass","reset","addClass","show","offsetWidth","finish","hide","transitionDuration","Nest","Feather","menu","items","subMenuClass","subItemClass","hasSubClass","applyAria","$item","$sub","children","Burn","Timer","options","nameSpace","remain","isPaused","restart","infinite","pause","Touch","startPosX","startPosY","startTime","elapsedTime","startEvent","isMoving","didMoved","onTouchEnd","removeEventListener","onTouchMove","tapEvent","Event","spotSwipe","x","touches","pageX","y","pageY","dx","dir","abs","moveThreshold","timeThreshold","onTouchStart","addEventListener","init","SpotSwipe","enabled","documentElement","special","swipe","setup","tap","noop","setupSpotSwipe","setupTouchHandler","addTouch","handleTouch","changedTouches","first","eventTypes","touchstart","touchmove","touchend","simulatedEvent","MouseEvent","screenX","screenY","clientX","clientY","createEvent","initMouseEvent","dispatchEvent","MutationObserver","prefixes","triggers","Triggers","Listeners","Basic","Global","Initializers","openListener","closeListener","toggleListener","closeableListener","stopPropagation","fadeOut","toggleFocusListener","addOpenListener","addCloseListener","addToggleListener","addCloseableListener","addToggleFocusListener","resizeListener","$nodes","scrollListener","closeMeListener","pluginId","not","addClosemeListener","yetiBoxes","plugNames","listeners","join","debounceGlobalListener","debounce","listener","addResizeListener","addScrollListener","addMutationEventsListener","listeningElementsMutation","mutationRecordsList","$target","attributeName","closest","elementObserver","observe","attributes","childList","characterData","subtree","attributeFilter","addSimpleListeners","$document","addGlobalListeners","triggersInitialized","IHearYou","Plugin","_setup","getPluginName","_destroy","obj","Abide","defaults","$inputs","merge","$globalErrors","a11yAttributes","input","addA11yAttributes","addGlobalErrorA11yAttributes","_events","resetForm","validateForm","validateOn","validateInput","liveValidate","validateOnBlur","isGood","checked","$error","siblings","formErrorSelector","add","$label","$els","labels","findLabel","$formError","findFormError","labelErrorClass","formErrorClass","inputErrorClass","$errors","$labels","errorId","elemId","label","a11yErrorLevel","groupName","findRadioLabels","$formErrors","removeRadioErrorClasses","clearRequire","requiredCheck","validated","customValidator","validator","equalTo","validateRadio","validateText","matchValidation","validators","goodToGo","message","dependentElements","acc","noError","pattern","inputText","valid","patterns","RegExp","$group","required","clear","v","$form","removeErrorClasses","alpha","alpha_numeric","integer","number","card","cvv","email","url","domain","datetime","date","time","dateISO","month_day_year","day_month_year","color","website","Accordion","_isInitializing","$tabs","idx","$content","linkId","$initActive","_initialAnchor","prev","_openSingleTab","_checkDeepLink","location","hash","$anchor","$link","isOwnAnchor","hasClass","_closeAllTabs","deepLinkSmudge","scrollTop","deepLinkSmudgeDelay","deepLink","$tabContent","toggle","next","$a","multiExpand","previous","up","down","updateHistory","history","pushState","replaceState","_openTab","$targetItem","$othersItems","allowAllClosed","_closeTab","$activeContents","targetContentId","slideDown","slideSpeed","slideUp","$activeTabs","stop","AccordionMenu","multiOpen","$menuLinks","subId","isActive","parentLink","clone","prependTo","wrap","submenuToggle","after","submenuToggleText","initPanes","$submenu","$elements","$prevElement","$nextElement","parents","open","close","closeAll","hideAll","stopImmediatePropagation","parentsUntil","$menus","detach","remove","Drilldown","autoApplyClass","$submenuAnchors","$submenus","$menuItems","$currentMenu","_prepareMenu","_registerEvents","_keyboardEvents","$menu","$back","backButtonPosition","append","backButton","prepend","_back","autoHeight","$wrapper","wrapper","animateHeight","_getMaxDims","_show","closeOnClick","$body","contains","_hideAll","_bindHandler","_scrollTop","_resize","$scrollTopElement","scrollTopElement","scrollPos","parseInt","scrollTopOffset","animationDuration","animationEasing","_hide","parentSubMenu","autoFocus","$expandedSubmenus","index","_setHideSubMenuClasses","isLastChild","_setShowSubMenuClasses","blur","maxHeight","result","numOfElems","unwrap","POSITIONS","VERTICAL_ALIGNMENTS","HORIZONTAL_ALIGNMENTS","ALIGNMENTS","nextItem","item","array","currentIdx","Positionable","triedPositions","_getDefaultPosition","_getDefaultAlignment","originalPosition","originalAlignment","_alignmentsExhausted","_realign","_addTriedPosition","isExhausted","$parent","allowOverlap","_getVOffset","_getHOffset","minOverlap","minCoordinates","_positionsExhausted","overlap","allowBottomOverlap","_reposition","Dropdown","$id","$anchors","_setCurrentAnchor","parentClass","labelledby","$currentAnchor","match","horizontalPosition","_setPosition","hover","bodyData","whatinput","timeout","hoverDelay","hoverPane","visibleFocusableElements","_addBodyHandler","DropdownMenu","subs","verticalClass","rightClass","changed","hasTouch","ontouchstart","parClass","handleClickFn","hasSub","hasClicked","clickOpen","forceFollow","closeOnClickInside","disableHover","autoclose","closingTime","isTab","nextSibling","prevSibling","openSub","closeSub","_isVertical","_isRtl","$sibs","oldClass","$parentLi","$toClose","somethingToClose","Equalizer","eqId","$watched","hasNested","isNested","isOn","onResizeMeBound","_onResizeMe","onPostEqualizedBound","_onPostEqualized","imgs","tooSmall","equalizeOn","_checkMQ","_reflow","_pauseEvents","equalizeOnStack","_isStacked","equalizeByRow","getHeightsByRow","applyHeightByRow","getHeights","applyHeight","heights","len","offsetHeight","lastElTopOffset","groups","group","elOffsetTop","j","ln","groupsILength","lenJ","Interchange","rules","currentPath","_addBreakpoints","_generateRules","rule","path","SPECIAL_QUERIES","rulesList","nodeName","response","html","SmoothScroll","_handleLinkClick","currentTarget","arrival","getAttribute","_inTransition","scrollToLoc","loc","$loc","threshold","Magellan","calcPoints","$targets","$links","$active","points","winHeight","innerHeight","clientHeight","docHeight","scrollHeight","$tar","pt","targetPoint","easing","deepLinking","_updateActive","onLoadListener","_deepLinkScroll","newScrollPos","isScrollingUp","activeIdx","visibleLinks","$oldActive","activeHash","isNewActive","isNewHash","pathname","search","OffCanvas","contentClasses","base","reveal","$lastTrigger","$triggers","nested","contentId","transition","contentOverlay","overlay","overlayPosition","setAttribute","$overlay","insertAfter","revealOnRegExp","revealClass","revealOnClass","isRevealed","revealOn","_setMQChecker","transitionTime","_removeContentClasses","_handleKeyboard","hasReveal","_addContentClasses","allowUp","allowDown","lastY","originalEvent","forceTo","scrollTo","contentScroll","_stopScrolling","_recordScrollable","_stopScrollPropagation","canvasFocus","Orbit","_reset","containerClass","$slides","slideClass","$images","initActive","useMUI","_prepareForOrbit","bullets","_loadBullets","autoPlay","geoSync","accessible","$bullets","boxOfBullets","timerDelay","changeSlide","_setWrapperHeight","temp","counter","pauseOnHover","navButtons","$controls","nextClass","prevClass","$slide","_updateBullets","isLTR","chosenSlide","$curSlide","$firstSlide","$lastSlide","last","dirIn","dirOut","$newSlide","infiniteWrap","$oldBullet","span","$newBullet","animInFromRight","animOutToRight","animInFromLeft","animOutToLeft","MenuPlugins","dropdown","cssClass","drilldown","accordion","ResponsiveMenu","currentMq","currentPlugin","rulesTree","ruleSize","rulePlugin","isEmptyObject","_checkMediaQueries","matchedMq","destroy","ResponsiveToggle","targetID","$targetMenu","$toggler","animationIn","animationOut","_update","_updateMqHandler","toggleMenu","hideFor","Reveal","cached","mq","fullScreen","_makeOverlay","additionalOverlayClasses","outerWidth","outerHeight","margin","_updatePosition","_handleState","$activeAnchor","activeElement","multipleOpened","_disableScroll","afterAnimation","_addGlobalClasses","focusableElements","showDelay","_addGlobalListeners","updateScrollbarClass","toggleClass","closeOnEsc","finishUp","hideDelay","_removeGlobalClasses","_enableScroll","resetOnClose","urlWithoutHash","title","Slider","inputs","handles","$handle","$input","$fill","vertical","disabled","disabledClass","binding","_setInitAttr","doubleSided","$handle2","$input2","setHandles","_setHandlePos","pctOfBar","percent","positionValueFunction","_logTransform","_powTransform","toFixed","baseLog","nonLinearBase","$hndl","noInvert","isDbl","h2Val","step","h1Val","vert","hOrW","lOrT","handleDim","elemDim","_pctOfBar","pxToMove","movement","decimal","_setValues","isLeftHndl","dim","handlePct","handlePos","initialStart","moveTime","changedDelay","initVal","initialEnd","hasVal","direction","eventOffset","halfOfHandle","barDim","windowScroll","scrollLeft","elemOffset","eventFromBar","barXY","offsetPct","_value","_adjustValue","firstHndlPos","absPosition","secndHndlPos","div","prev_val","next_val","_eventsForHandle","curHandle","handleChangeEvent","_handleEvent","clickSelect","draggable","_$handle","oldValue","newValue","decrease","increase","decrease_fast","increase_fast","invertVertical","frac","num","clickPos","Sticky","$container","wasWrapped","container","stickyClass","scrollCount","checkEvery","isStuck","containerHeight","elemHeight","_parsePoints","_setSizes","scroll","_calc","_removeSticky","topPoint","reverse","topAnchor","btm","btmAnchor","pts","breaks","place","canStick","_eventsHandler","_pauseListeners","checkSizes","bottomPoint","_setSticky","stickTo","mrgn","notStuckTo","isTop","stickToTop","anchorPt","anchorHeight","topOrBottom","stickyOn","newElemWidth","comp","pdngl","pdngr","newContainerHeight","_setBreakPoints","mTop","emCalc","marginTop","mBtm","marginBottom","bottom","em","fontSize","Tabs","$tabTitles","linkClass","linkActiveClass","matchHeight","_setHeight","selectTab","_collapse","_addKeyHandler","_addClickHandler","_setHeightMqHandler","_handleTabChange","wrapOnKeys","historyHandled","activeCollapse","$oldTab","$tabLink","$targetContent","_collapseTab","panelActiveClass","$target_anchor","$activeTab","idStr","panelClass","panel","Toggler","$trigger","controls","containsId","_updateARIA","Tooltip","isClick","tipText","template","_buildTemplate","allowHtml","triggerClass","tooltipWidth","tooltipHeight","templateClasses","tooltipClass","$template","showOn","fadeIn","fadeInDuration","fadeOutDuration","isFocus","disableForTouch","touchCloseText","tabs","ResponsiveAccordionTabs","_getAllOptions","allOptions","dummyPlugin","tmpPlugin","keyKey","objObj","_changedZfMediaQueryHandler","storezfData","_handleMarkup","toSet","fromString","$panels","tabsTitle","tabsPanel","$liHeads","$liHeadsA","display","visibility","$tabsContent","$placeholder","tempValue","CoreUtils"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/foundation.es6.js b/dist/js/foundation.es6.js new file mode 100644 index 000000000..26a50df75 --- /dev/null +++ b/dist/js/foundation.es6.js @@ -0,0 +1,10332 @@ +import $ from 'jquery'; + +// Core Foundation Utilities, utilized in a number of places. + + /** + * Returns a boolean for RTL support + */ +function rtl() { + return $('html').attr('dir') === 'rtl'; +} + +/** + * returns a random base-36 uid with namespacing + * @function + * @param {Number} length - number of random base-36 digits desired. Increase for more random strings. + * @param {String} namespace - name of plugin to be incorporated in uid, optional. + * @default {String} '' - if no plugin name is provided, nothing is appended to the uid. + * @returns {String} - unique id + */ +function GetYoDigits(length, namespace){ + length = length || 6; + return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1) + (namespace ? `-${namespace}` : ''); +} + +/** + * Escape a string so it can be used as a regexp pattern + * @function + * @see https://stackoverflow.com/a/9310752/4317384 + * + * @param {String} str - string to escape. + * @returns {String} - escaped string + */ +function RegExpEscape(str){ + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} + +function transitionend($elem){ + var transitions = { + 'transition': 'transitionend', + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'transitionend', + 'OTransition': 'otransitionend' + }; + var elem = document.createElement('div'), + end; + + for (var t in transitions){ + if (typeof elem.style[t] !== 'undefined'){ + end = transitions[t]; + } + } + if(end){ + return end; + }else{ + end = setTimeout(function(){ + $elem.triggerHandler('transitionend', [$elem]); + }, 1); + return 'transitionend'; + } +} + +/** + * Return an event type to listen for window load. + * + * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered. + * If `handler` is passed, attach it to the event on `$elem`. + * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself. + * @function + * + * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed. + * @param {Function} [] handler - function to attach to the event. + * @returns {String} - event type that should or will be triggered. + */ +function onLoad($elem, handler) { + const didLoad = document.readyState === 'complete'; + const eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad'; + const cb = () => $elem.triggerHandler(eventType); + + if ($elem) { + if (handler) $elem.one(eventType, handler); + + if (didLoad) + setTimeout(cb); + else + $(window).one('load', cb); + } + + return eventType; +} + +function onLeaveElement($elem, handler, { leaveWindow = true } = {}) { + const eventType = 'mouseleave.zf.util.onLeaveElement'; + + if ($elem && handler) { + + $elem.on(eventType, function leaveHandler(e, ...rest) { + const _this = this; + setTimeout(function leaveEventDebouncer() { + + if (e.relatedTarget === null && leaveWindow && document.hasFocus && document.hasFocus()) { + + $(document).one('mouseenter', function reenterHandler(reeenterE) { + if ($elem.has(reeenterE.target).length) { return false } e.relatedTarget = reeenterE.target; + handler.call(_this, e, ...rest); + }); + + return false; + } + + handler.call(_this, e, ...rest); + }); + }); + } + + return eventType; +} + +var foundation_core_utils = /*#__PURE__*/Object.freeze({ + rtl: rtl, + GetYoDigits: GetYoDigits, + RegExpEscape: RegExpEscape, + transitionend: transitionend, + onLoad: onLoad, + onLeaveElement: onLeaveElement +}); + +// matchMedia() polyfill - Test a CSS media type/query in JS. +// Authors & copyright(c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license +/* eslint-disable */ +window.matchMedia || (window.matchMedia = (function () { + + // For browsers that support matchMedium api such as IE 9 and webkit + var styleMedia = (window.styleMedia || window.media); + + // For those that don't support matchMedium + if (!styleMedia) { + var style = document.createElement('style'), + script = document.getElementsByTagName('script')[0], + info = null; + + style.type = 'text/css'; + style.id = 'matchmediajs-test'; + + if (!script) { + document.head.appendChild(style); + } else { + script.parentNode.insertBefore(style, script); + } + + // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers + info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle; + + styleMedia = { + matchMedium: function (media) { + var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }'; + + // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers + if (style.styleSheet) { + style.styleSheet.cssText = text; + } else { + style.textContent = text; + } + + // Test if media query is true or false + return info.width === '1px'; + } + }; + } + + return function(media) { + return { + matches: styleMedia.matchMedium(media || 'all'), + media: media || 'all' + }; + }; +})()); +/* eslint-enable */ + +var MediaQuery = { + queries: [], + + current: '', + + /** + * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher. + * @function + * @private + */ + _init() { + var self = this; + var $meta = $('meta.foundation-mq'); + if(!$meta.length){ + $('').appendTo(document.head); + } + + var extractedStyles = $('.foundation-mq').css('font-family'); + var namedQueries; + + namedQueries = parseStyleToObject(extractedStyles); + + for (var key in namedQueries) { + if(namedQueries.hasOwnProperty(key)) { + self.queries.push({ + name: key, + value: `only screen and (min-width: ${namedQueries[key]})` + }); + } + } + + this.current = this._getCurrentSize(); + + this._watcher(); + }, + + /** + * Checks if the screen is at least as wide as a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to check. + * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller. + */ + atLeast(size) { + var query = this.get(size); + + if (query) { + return window.matchMedia(query).matches; + } + + return false; + }, + + /** + * Checks if the screen matches to a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method. + * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not. + */ + is(size) { + size = size.trim().split(' '); + if(size.length > 1 && size[1] === 'only') { + if(size[0] === this._getCurrentSize()) return true; + } else { + return this.atLeast(size[0]); + } + return false; + }, + + /** + * Gets the media query of a breakpoint. + * @function + * @param {String} size - Name of the breakpoint to get. + * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist. + */ + get(size) { + for (var i in this.queries) { + if(this.queries.hasOwnProperty(i)) { + var query = this.queries[i]; + if (size === query.name) return query.value; + } + } + + return null; + }, + + /** + * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one). + * @function + * @private + * @returns {String} Name of the current breakpoint. + */ + _getCurrentSize() { + var matched; + + for (var i = 0; i < this.queries.length; i++) { + var query = this.queries[i]; + + if (window.matchMedia(query.value).matches) { + matched = query; + } + } + + if (typeof matched === 'object') { + return matched.name; + } else { + return matched; + } + }, + + /** + * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes. + * @function + * @private + */ + _watcher() { + $(window).off('resize.zf.mediaquery').on('resize.zf.mediaquery', () => { + var newSize = this._getCurrentSize(), currentSize = this.current; + + if (newSize !== currentSize) { + // Change the current media query + this.current = newSize; + + // Broadcast the media query change on the window + $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]); + } + }); + } +}; + + + +// Thank you: https://github.com/sindresorhus/query-string +function parseStyleToObject(str) { + var styleObject = {}; + + if (typeof str !== 'string') { + return styleObject; + } + + str = str.trim().slice(1, -1); // browsers re-quote string style values + + if (!str) { + return styleObject; + } + + styleObject = str.split('&').reduce(function(ret, param) { + var parts = param.replace(/\+/g, ' ').split('='); + var key = parts[0]; + var val = parts[1]; + key = decodeURIComponent(key); + + // missing `=` should be `null`: + // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters + val = typeof val === 'undefined' ? null : decodeURIComponent(val); + + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + return ret; + }, {}); + + return styleObject; +} + +var FOUNDATION_VERSION = '6.5.0-rc.4'; + +// Global Foundation object +// This is attached to the window, or used as a module for AMD/Browserify +var Foundation = { + version: FOUNDATION_VERSION, + + /** + * Stores initialized plugins. + */ + _plugins: {}, + + /** + * Stores generated unique ids for plugin instances + */ + _uuids: [], + + /** + * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing. + * @param {Object} plugin - The constructor of the plugin. + */ + plugin: function(plugin, name) { + // Object key to use when adding to global Foundation object + // Examples: Foundation.Reveal, Foundation.OffCanvas + var className = (name || functionName(plugin)); + // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin + // Examples: data-reveal, data-off-canvas + var attrName = hyphenate(className); + + // Add to the Foundation object and the plugins list (for reflowing) + this._plugins[attrName] = this[className] = plugin; + }, + /** + * @function + * Populates the _uuids array with pointers to each individual plugin instance. + * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls. + * Also fires the initialization event for each plugin, consolidating repetitive code. + * @param {Object} plugin - an instance of a plugin, usually `this` in context. + * @param {String} name - the name of the plugin, passed as a camelCased string. + * @fires Plugin#init + */ + registerPlugin: function(plugin, name){ + var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase(); + plugin.uuid = GetYoDigits(6, pluginName); + + if(!plugin.$element.attr(`data-${pluginName}`)){ plugin.$element.attr(`data-${pluginName}`, plugin.uuid); } + if(!plugin.$element.data('zfPlugin')){ plugin.$element.data('zfPlugin', plugin); } + /** + * Fires when the plugin has initialized. + * @event Plugin#init + */ + plugin.$element.trigger(`init.zf.${pluginName}`); + + this._uuids.push(plugin.uuid); + + return; + }, + /** + * @function + * Removes the plugins uuid from the _uuids array. + * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute. + * Also fires the destroyed event for the plugin, consolidating repetitive code. + * @param {Object} plugin - an instance of a plugin, usually `this` in context. + * @fires Plugin#destroyed + */ + unregisterPlugin: function(plugin){ + var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor)); + + this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1); + plugin.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin') + /** + * Fires when the plugin has been destroyed. + * @event Plugin#destroyed + */ + .trigger(`destroyed.zf.${pluginName}`); + for(var prop in plugin){ + plugin[prop] = null;//clean up script to prep for garbage collection. + } + return; + }, + + /** + * @function + * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc. + * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'` + * @default If no argument is passed, reflow all currently active plugins. + */ + reInit: function(plugins){ + var isJQ = plugins instanceof $; + try{ + if(isJQ){ + plugins.each(function(){ + $(this).data('zfPlugin')._init(); + }); + }else{ + var type = typeof plugins, + _this = this, + fns = { + 'object': function(plgs){ + plgs.forEach(function(p){ + p = hyphenate(p); + $('[data-'+ p +']').foundation('_init'); + }); + }, + 'string': function(){ + plugins = hyphenate(plugins); + $('[data-'+ plugins +']').foundation('_init'); + }, + 'undefined': function(){ + this['object'](Object.keys(_this._plugins)); + } + }; + fns[type](plugins); + } + }catch(err){ + console.error(err); + }finally{ + return plugins; + } + }, + + /** + * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized. + * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object. + * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything. + */ + reflow: function(elem, plugins) { + + // If plugins is undefined, just grab everything + if (typeof plugins === 'undefined') { + plugins = Object.keys(this._plugins); + } + // If plugins is a string, convert it to an array with one item + else if (typeof plugins === 'string') { + plugins = [plugins]; + } + + var _this = this; + + // Iterate through each plugin + $.each(plugins, function(i, name) { + // Get the current plugin + var plugin = _this._plugins[name]; + + // Localize the search to all elements inside elem, as well as elem itself, unless elem === document + var $elem = $(elem).find('[data-'+name+']').addBack('[data-'+name+']'); + + // For each plugin found, initialize it + $elem.each(function() { + var $el = $(this), + opts = {}; + // Don't double-dip on plugins + if ($el.data('zfPlugin')) { + console.warn("Tried to initialize "+name+" on an element that already has a Foundation plugin."); + return; + } + + if($el.attr('data-options')){ + var thing = $el.attr('data-options').split(';').forEach(function(e, i){ + var opt = e.split(':').map(function(el){ return el.trim(); }); + if(opt[0]) opts[opt[0]] = parseValue(opt[1]); + }); + } + try{ + $el.data('zfPlugin', new plugin($(this), opts)); + }catch(er){ + console.error(er); + }finally{ + return; + } + }); + }); + }, + getFnName: functionName, + + addToJquery: function($$$1) { + // TODO: consider not making this a jQuery function + // TODO: need way to reflow vs. re-initialize + /** + * The Foundation jQuery method. + * @param {String|Array} method - An action to perform on the current jQuery object. + */ + var foundation = function(method) { + var type = typeof method, + $noJS = $$$1('.no-js'); + + if($noJS.length){ + $noJS.removeClass('no-js'); + } + + if(type === 'undefined'){//needs to initialize the Foundation object, or an individual plugin. + MediaQuery._init(); + Foundation.reflow(this); + }else if(type === 'string'){//an individual method to invoke on a plugin or group of plugins + var args = Array.prototype.slice.call(arguments, 1);//collect all the arguments, if necessary + var plugClass = this.data('zfPlugin');//determine the class of plugin + + if(typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined'){//make sure both the class and method exist + if(this.length === 1){//if there's only one, call it directly. + plugClass[method].apply(plugClass, args); + }else{ + this.each(function(i, el){//otherwise loop through the jQuery collection and invoke the method on each + plugClass[method].apply($$$1(el).data('zfPlugin'), args); + }); + } + }else{//error for no class or no method + throw new ReferenceError("We're sorry, '" + method + "' is not an available method for " + (plugClass ? functionName(plugClass) : 'this element') + '.'); + } + }else{//error for invalid argument type + throw new TypeError(`We're sorry, ${type} is not a valid parameter. You must use a string representing the method you wish to invoke.`); + } + return this; + }; + $$$1.fn.foundation = foundation; + return $$$1; + } +}; + +Foundation.util = { + /** + * Function for applying a debounce effect to a function call. + * @function + * @param {Function} func - Function to be called at end of timeout. + * @param {Number} delay - Time in ms to delay the call of `func`. + * @returns function + */ + throttle: function (func, delay) { + var timer = null; + + return function () { + var context = this, args = arguments; + + if (timer === null) { + timer = setTimeout(function () { + func.apply(context, args); + timer = null; + }, delay); + } + }; + } +}; + +window.Foundation = Foundation; + +// Polyfill for requestAnimationFrame +(function() { + if (!Date.now || !window.Date.now) + window.Date.now = Date.now = function() { return new Date().getTime(); }; + + var vendors = ['webkit', 'moz']; + for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { + var vp = vendors[i]; + window.requestAnimationFrame = window[vp+'RequestAnimationFrame']; + window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame'] + || window[vp+'CancelRequestAnimationFrame']); + } + if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) + || !window.requestAnimationFrame || !window.cancelAnimationFrame) { + var lastTime = 0; + window.requestAnimationFrame = function(callback) { + var now = Date.now(); + var nextTime = Math.max(lastTime + 16, now); + return setTimeout(function() { callback(lastTime = nextTime); }, + nextTime - now); + }; + window.cancelAnimationFrame = clearTimeout; + } + /** + * Polyfill for performance.now, required by rAF + */ + if(!window.performance || !window.performance.now){ + window.performance = { + start: Date.now(), + now: function(){ return Date.now() - this.start; } + }; + } +})(); +if (!Function.prototype.bind) { + Function.prototype.bind = function(oThis) { + if (typeof this !== 'function') { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function() {}, + fBound = function() { + return fToBind.apply(this instanceof fNOP + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + if (this.prototype) { + // native functions don't have a prototype + fNOP.prototype = this.prototype; + } + fBound.prototype = new fNOP(); + + return fBound; + }; +} +// Polyfill to get the name of a function in IE9 +function functionName(fn) { + if (typeof Function.prototype.name === 'undefined') { + var funcNameRegex = /function\s([^(]{1,})\(/; + var results = (funcNameRegex).exec((fn).toString()); + return (results && results.length > 1) ? results[1].trim() : ""; + } + else if (typeof fn.prototype === 'undefined') { + return fn.constructor.name; + } + else { + return fn.prototype.constructor.name; + } +} +function parseValue(str){ + if ('true' === str) return true; + else if ('false' === str) return false; + else if (!isNaN(str * 1)) return parseFloat(str); + return str; +} +// Convert PascalCase to kebab-case +// Thank you: http://stackoverflow.com/a/8955580 +function hyphenate(str) { + return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); +} + +var Box = { + ImNotTouchingYou: ImNotTouchingYou, + OverlapArea: OverlapArea, + GetDimensions: GetDimensions, + GetOffsets: GetOffsets, + GetExplicitOffsets: GetExplicitOffsets +}; + +/** + * Compares the dimensions of an element to a container and determines collision events with container. + * @function + * @param {jQuery} element - jQuery object to test for collisions. + * @param {jQuery} parent - jQuery object to use as bounding container. + * @param {Boolean} lrOnly - set to true to check left and right values only. + * @param {Boolean} tbOnly - set to true to check top and bottom values only. + * @default if no parent object passed, detects collisions with `window`. + * @returns {Boolean} - true if collision free, false if a collision in any direction. + */ +function ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) { + return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0; +} +function OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) { + var eleDims = GetDimensions(element), + topOver, bottomOver, leftOver, rightOver; + if (parent) { + var parDims = GetDimensions(parent); + + bottomOver = (parDims.height + parDims.offset.top) - (eleDims.offset.top + eleDims.height); + topOver = eleDims.offset.top - parDims.offset.top; + leftOver = eleDims.offset.left - parDims.offset.left; + rightOver = (parDims.width + parDims.offset.left) - (eleDims.offset.left + eleDims.width); + } + else { + bottomOver = (eleDims.windowDims.height + eleDims.windowDims.offset.top) - (eleDims.offset.top + eleDims.height); + topOver = eleDims.offset.top - eleDims.windowDims.offset.top; + leftOver = eleDims.offset.left - eleDims.windowDims.offset.left; + rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width); + } + + bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0); + topOver = Math.min(topOver, 0); + leftOver = Math.min(leftOver, 0); + rightOver = Math.min(rightOver, 0); + + if (lrOnly) { + return leftOver + rightOver; + } + if (tbOnly) { + return topOver + bottomOver; + } + + // use sum of squares b/c we care about overlap area. + return Math.sqrt((topOver * topOver) + (bottomOver * bottomOver) + (leftOver * leftOver) + (rightOver * rightOver)); +} + +/** + * Uses native methods to return an object of dimension values. + * @function + * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window. + * @returns {Object} - nested object of integer pixel values + * TODO - if element is window, return only those values. + */ +function GetDimensions(elem){ + elem = elem.length ? elem[0] : elem; + + if (elem === window || elem === document) { + throw new Error("I'm sorry, Dave. I'm afraid I can't do that."); + } + + var rect = elem.getBoundingClientRect(), + parRect = elem.parentNode.getBoundingClientRect(), + winRect = document.body.getBoundingClientRect(), + winY = window.pageYOffset, + winX = window.pageXOffset; + + return { + width: rect.width, + height: rect.height, + offset: { + top: rect.top + winY, + left: rect.left + winX + }, + parentDims: { + width: parRect.width, + height: parRect.height, + offset: { + top: parRect.top + winY, + left: parRect.left + winX + } + }, + windowDims: { + width: winRect.width, + height: winRect.height, + offset: { + top: winY, + left: winX + } + } + } +} + +/** + * Returns an object of top and left integer pixel values for dynamically rendered elements, + * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where + * you don't know alignment, but generally from + * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment. + * @function + * @param {jQuery} element - jQuery object for the element being positioned. + * @param {jQuery} anchor - jQuery object for the element's anchor point. + * @param {String} position - a string relating to the desired position of the element, relative to it's anchor + * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element. + * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element. + * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset. + * TODO alter/rewrite to work with `em` values as well/instead of pixels + */ +function GetOffsets(element, anchor, position, vOffset, hOffset, isOverflow) { + console.log("NOTE: GetOffsets is deprecated in favor of GetExplicitOffsets and will be removed in 6.5"); + switch (position) { + case 'top': + return rtl() ? + GetExplicitOffsets(element, anchor, 'top', 'left', vOffset, hOffset, isOverflow) : + GetExplicitOffsets(element, anchor, 'top', 'right', vOffset, hOffset, isOverflow); + case 'bottom': + return rtl() ? + GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow) : + GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow); + case 'center top': + return GetExplicitOffsets(element, anchor, 'top', 'center', vOffset, hOffset, isOverflow); + case 'center bottom': + return GetExplicitOffsets(element, anchor, 'bottom', 'center', vOffset, hOffset, isOverflow); + case 'center left': + return GetExplicitOffsets(element, anchor, 'left', 'center', vOffset, hOffset, isOverflow); + case 'center right': + return GetExplicitOffsets(element, anchor, 'right', 'center', vOffset, hOffset, isOverflow); + case 'left bottom': + return GetExplicitOffsets(element, anchor, 'bottom', 'left', vOffset, hOffset, isOverflow); + case 'right bottom': + return GetExplicitOffsets(element, anchor, 'bottom', 'right', vOffset, hOffset, isOverflow); + // Backwards compatibility... this along with the reveal and reveal full + // classes are the only ones that didn't reference anchor + case 'center': + return { + left: ($eleDims.windowDims.offset.left + ($eleDims.windowDims.width / 2)) - ($eleDims.width / 2) + hOffset, + top: ($eleDims.windowDims.offset.top + ($eleDims.windowDims.height / 2)) - ($eleDims.height / 2 + vOffset) + } + case 'reveal': + return { + left: ($eleDims.windowDims.width - $eleDims.width) / 2 + hOffset, + top: $eleDims.windowDims.offset.top + vOffset + } + case 'reveal full': + return { + left: $eleDims.windowDims.offset.left, + top: $eleDims.windowDims.offset.top + } + break; + default: + return { + left: (rtl() ? $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset: $anchorDims.offset.left + hOffset), + top: $anchorDims.offset.top + $anchorDims.height + vOffset + } + + } + +} + +function GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) { + var $eleDims = GetDimensions(element), + $anchorDims = anchor ? GetDimensions(anchor) : null; + + var topVal, leftVal; + + // set position related attribute + + switch (position) { + case 'top': + topVal = $anchorDims.offset.top - ($eleDims.height + vOffset); + break; + case 'bottom': + topVal = $anchorDims.offset.top + $anchorDims.height + vOffset; + break; + case 'left': + leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset); + break; + case 'right': + leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset; + break; + } + + + // set alignment related attribute + switch (position) { + case 'top': + case 'bottom': + switch (alignment) { + case 'left': + leftVal = $anchorDims.offset.left + hOffset; + break; + case 'right': + leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset; + break; + case 'center': + leftVal = isOverflow ? hOffset : (($anchorDims.offset.left + ($anchorDims.width / 2)) - ($eleDims.width / 2)) + hOffset; + break; + } + break; + case 'right': + case 'left': + switch (alignment) { + case 'bottom': + topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height; + break; + case 'top': + topVal = $anchorDims.offset.top + vOffset; + break; + case 'center': + topVal = ($anchorDims.offset.top + vOffset + ($anchorDims.height / 2)) - ($eleDims.height / 2); + break; + } + break; + } + return {top: topVal, left: leftVal}; +} + +/** + * Runs a callback function when images are fully loaded. + * @param {Object} images - Image(s) to check if loaded. + * @param {Func} callback - Function to execute when image is fully loaded. + */ +function onImagesLoaded(images, callback){ + var unloaded = images.length; + + if (unloaded === 0) { + callback(); + } + + images.each(function(){ + // Check if image is loaded + if (this.complete && typeof this.naturalWidth !== 'undefined') { + singleImageLoaded(); + } + else { + // If the above check failed, simulate loading on detached element. + var image = new Image(); + // Still count image as loaded if it finalizes with an error. + var events = "load.zf.images error.zf.images"; + $(image).one(events, function me(event){ + // Unbind the event listeners. We're using 'one' but only one of the two events will have fired. + $(this).off(events, me); + singleImageLoaded(); + }); + image.src = $(this).attr('src'); + } + }); + + function singleImageLoaded() { + unloaded--; + if (unloaded === 0) { + callback(); + } + } +} + +/******************************************* + * * + * This util was created by Marius Olbertz * + * Please thank Marius on GitHub /owlbertz * + * or the web http://www.mariusolbertz.de/ * + * * + ******************************************/ + +const keyCodes = { + 9: 'TAB', + 13: 'ENTER', + 27: 'ESCAPE', + 32: 'SPACE', + 35: 'END', + 36: 'HOME', + 37: 'ARROW_LEFT', + 38: 'ARROW_UP', + 39: 'ARROW_RIGHT', + 40: 'ARROW_DOWN' +}; + +var commands = {}; + +// Functions pulled out to be referenceable from internals +function findFocusable($element) { + if(!$element) {return false; } + return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function() { + if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; } //only have visible elements and those that have a tabindex greater or equal 0 + return true; + }); +} + +function parseKey(event) { + var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase(); + + // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events + key = key.replace(/\W+/, ''); + + if (event.shiftKey) key = `SHIFT_${key}`; + if (event.ctrlKey) key = `CTRL_${key}`; + if (event.altKey) key = `ALT_${key}`; + + // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`) + key = key.replace(/_$/, ''); + + return key; +} + +var Keyboard = { + keys: getKeyCodes(keyCodes), + + /** + * Parses the (keyboard) event and returns a String that represents its key + * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE + * @param {Event} event - the event generated by the event handler + * @return String key - String that represents the key pressed + */ + parseKey: parseKey, + + /** + * Handles the given (keyboard) event + * @param {Event} event - the event generated by the event handler + * @param {String} component - Foundation component's name, e.g. Slider or Reveal + * @param {Objects} functions - collection of functions that are to be executed + */ + handleKey(event, component, functions) { + var commandList = commands[component], + keyCode = this.parseKey(event), + cmds, + command, + fn; + + if (!commandList) return console.warn('Component not defined!'); + + if (typeof commandList.ltr === 'undefined') { // this component does not differentiate between ltr and rtl + cmds = commandList; // use plain list + } else { // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa + if (rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl); + + else cmds = $.extend({}, commandList.rtl, commandList.ltr); + } + command = cmds[keyCode]; + + fn = functions[command]; + if (fn && typeof fn === 'function') { // execute function if exists + var returnValue = fn.apply(); + if (functions.handled || typeof functions.handled === 'function') { // execute function when event was handled + functions.handled(returnValue); + } + } else { + if (functions.unhandled || typeof functions.unhandled === 'function') { // execute function when event was not handled + functions.unhandled(); + } + } + }, + + /** + * Finds all focusable elements within the given `$element` + * @param {jQuery} $element - jQuery object to search within + * @return {jQuery} $focusable - all focusable elements within `$element` + */ + + findFocusable: findFocusable, + + /** + * Returns the component name name + * @param {Object} component - Foundation component, e.g. Slider or Reveal + * @return String componentName + */ + + register(componentName, cmds) { + commands[componentName] = cmds; + }, + + + // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context? + // + /** + * Traps the focus in the given element. + * @param {jQuery} $element jQuery object to trap the foucs into. + */ + trapFocus($element) { + var $focusable = findFocusable($element), + $firstFocusable = $focusable.eq(0), + $lastFocusable = $focusable.eq(-1); + + $element.on('keydown.zf.trapfocus', function(event) { + if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') { + event.preventDefault(); + $firstFocusable.focus(); + } + else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') { + event.preventDefault(); + $lastFocusable.focus(); + } + }); + }, + /** + * Releases the trapped focus from the given element. + * @param {jQuery} $element jQuery object to release the focus for. + */ + releaseFocus($element) { + $element.off('keydown.zf.trapfocus'); + } +}; + +/* + * Constants for easier comparing. + * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE + */ +function getKeyCodes(kcs) { + var k = {}; + for (var kc in kcs) k[kcs[kc]] = kcs[kc]; + return k; +} + +/** + * Motion module. + * @module foundation.motion + */ + +const initClasses = ['mui-enter', 'mui-leave']; +const activeClasses = ['mui-enter-active', 'mui-leave-active']; + +const Motion = { + animateIn: function(element, animation, cb) { + animate(true, element, animation, cb); + }, + + animateOut: function(element, animation, cb) { + animate(false, element, animation, cb); + } +}; + +function Move(duration, elem, fn){ + var anim, prog, start = null; + // console.log('called'); + + if (duration === 0) { + fn.apply(elem); + elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); + return; + } + + function move(ts){ + if(!start) start = ts; + // console.log(start, ts); + prog = ts - start; + fn.apply(elem); + + if(prog < duration){ anim = window.requestAnimationFrame(move, elem); } + else{ + window.cancelAnimationFrame(anim); + elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); + } + } + anim = window.requestAnimationFrame(move); +} + +/** + * Animates an element in or out using a CSS transition class. + * @function + * @private + * @param {Boolean} isIn - Defines if the animation is in or out. + * @param {Object} element - jQuery or HTML object to animate. + * @param {String} animation - CSS class to use. + * @param {Function} cb - Callback to run when animation is finished. + */ +function animate(isIn, element, animation, cb) { + element = $(element).eq(0); + + if (!element.length) return; + + var initClass = isIn ? initClasses[0] : initClasses[1]; + var activeClass = isIn ? activeClasses[0] : activeClasses[1]; + + // Set up the animation + reset(); + + element + .addClass(animation) + .css('transition', 'none'); + + requestAnimationFrame(() => { + element.addClass(initClass); + if (isIn) element.show(); + }); + + // Start the animation + requestAnimationFrame(() => { + element[0].offsetWidth; + element + .css('transition', '') + .addClass(activeClass); + }); + + // Clean up the animation when it finishes + element.one(transitionend(element), finish); + + // Hides the element (for out animations), resets the element, and runs a callback + function finish() { + if (!isIn) element.hide(); + reset(); + if (cb) cb.apply(element); + } + + // Resets transitions and removes motion-specific classes + function reset() { + element[0].style.transitionDuration = 0; + element.removeClass(`${initClass} ${activeClass} ${animation}`); + } +} + +const Nest = { + Feather(menu, type = 'zf') { + menu.attr('role', 'menubar'); + + var items = menu.find('li').attr({'role': 'menuitem'}), + subMenuClass = `is-${type}-submenu`, + subItemClass = `${subMenuClass}-item`, + hasSubClass = `is-${type}-submenu-parent`, + applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes. + + items.each(function() { + var $item = $(this), + $sub = $item.children('ul'); + + if ($sub.length) { + $item.addClass(hasSubClass); + $sub.addClass(`submenu ${subMenuClass}`).attr({'data-submenu': ''}); + if(applyAria) { + $item.attr({ + 'aria-haspopup': true, + 'aria-label': $item.children('a:first').text() + }); + // Note: Drilldowns behave differently in how they hide, and so need + // additional attributes. We should look if this possibly over-generalized + // utility (Nest) is appropriate when we rework menus in 6.4 + if(type === 'drilldown') { + $item.attr({'aria-expanded': false}); + } + } + $sub + .addClass(`submenu ${subMenuClass}`) + .attr({ + 'data-submenu': '', + 'role': 'menubar' + }); + if(type === 'drilldown') { + $sub.attr({'aria-hidden': true}); + } + } + + if ($item.parent('[data-submenu]').length) { + $item.addClass(`is-submenu-item ${subItemClass}`); + } + }); + + return; + }, + + Burn(menu, type) { + var //items = menu.find('li'), + subMenuClass = `is-${type}-submenu`, + subItemClass = `${subMenuClass}-item`, + hasSubClass = `is-${type}-submenu-parent`; + + menu + .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li') + .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`) + .removeAttr('data-submenu').css('display', ''); + + } +}; + +function Timer(elem, options, cb) { + var _this = this, + duration = options.duration,//options is an object for easily adding features later. + nameSpace = Object.keys(elem.data())[0] || 'timer', + remain = -1, + start, + timer; + + this.isPaused = false; + + this.restart = function() { + remain = -1; + clearTimeout(timer); + this.start(); + }; + + this.start = function() { + this.isPaused = false; + // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. + clearTimeout(timer); + remain = remain <= 0 ? duration : remain; + elem.data('paused', false); + start = Date.now(); + timer = setTimeout(function(){ + if(options.infinite){ + _this.restart();//rerun the timer. + } + if (cb && typeof cb === 'function') { cb(); } + }, remain); + elem.trigger(`timerstart.zf.${nameSpace}`); + }; + + this.pause = function() { + this.isPaused = true; + //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. + clearTimeout(timer); + elem.data('paused', true); + var end = Date.now(); + remain = remain - (end - start); + elem.trigger(`timerpaused.zf.${nameSpace}`); + }; +} + +//************************************************** + +var Touch = {}; + +var startPosX, + startPosY, + startTime, + elapsedTime, + startEvent, + isMoving = false, + didMoved = false; + +function onTouchEnd(e) { + this.removeEventListener('touchmove', onTouchMove); + this.removeEventListener('touchend', onTouchEnd); + + // If the touch did not move, consider it as a "tap" + if (!didMoved) { + var tapEvent = $.Event('tap', startEvent || e); + $(this).trigger(tapEvent); + } + + startEvent = null; + isMoving = false; + didMoved = false; +} + +function onTouchMove(e) { + if ($.spotSwipe.preventDefault) { e.preventDefault(); } + + if(isMoving) { + var x = e.touches[0].pageX; + var y = e.touches[0].pageY; + var dx = startPosX - x; + var dir; + didMoved = true; + elapsedTime = new Date().getTime() - startTime; + if(Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) { + dir = dx > 0 ? 'left' : 'right'; + } + // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) { + // dir = dy > 0 ? 'down' : 'up'; + // } + if(dir) { + e.preventDefault(); + onTouchEnd.apply(this, arguments); + $(this) + .trigger($.Event('swipe', e), dir) + .trigger($.Event(`swipe${dir}`, e)); + } + } + +} + +function onTouchStart(e) { + + if (e.touches.length == 1) { + startPosX = e.touches[0].pageX; + startPosY = e.touches[0].pageY; + startEvent = e; + isMoving = true; + didMoved = false; + startTime = new Date().getTime(); + this.addEventListener('touchmove', onTouchMove, false); + this.addEventListener('touchend', onTouchEnd, false); + } +} + +function init() { + this.addEventListener && this.addEventListener('touchstart', onTouchStart, false); +} + +class SpotSwipe { + constructor($$$1) { + this.version = '1.0.0'; + this.enabled = 'ontouchstart' in document.documentElement; + this.preventDefault = false; + this.moveThreshold = 75; + this.timeThreshold = 200; + this.$ = $$$1; + this._init(); + } + + _init() { + var $$$1 = this.$; + $$$1.event.special.swipe = { setup: init }; + $$$1.event.special.tap = { setup: init }; + + $$$1.each(['left', 'up', 'down', 'right'], function () { + $$$1.event.special[`swipe${this}`] = { setup: function(){ + $$$1(this).on('swipe', $$$1.noop); + } }; + }); + } +} + +/**************************************************** + * As far as I can tell, both setupSpotSwipe and * + * setupTouchHandler should be idempotent, * + * because they directly replace functions & * + * values, and do not add event handlers directly. * + ****************************************************/ + +Touch.setupSpotSwipe = function($$$1) { + $$$1.spotSwipe = new SpotSwipe($$$1); +}; + +/**************************************************** + * Method for adding pseudo drag events to elements * + ***************************************************/ +Touch.setupTouchHandler = function($$$1) { + $$$1.fn.addTouch = function(){ + this.each(function(i,el){ + $$$1(el).bind('touchstart touchmove touchend touchcancel', function(event) { + //we pass the original event object because the jQuery event + //object is normalized to w3c specs and does not provide the TouchList + handleTouch(event); + }); + }); + + var handleTouch = function(event){ + var touches = event.changedTouches, + first = touches[0], + eventTypes = { + touchstart: 'mousedown', + touchmove: 'mousemove', + touchend: 'mouseup' + }, + type = eventTypes[event.type], + simulatedEvent + ; + + if('MouseEvent' in window && typeof window.MouseEvent === 'function') { + simulatedEvent = new window.MouseEvent(type, { + 'bubbles': true, + 'cancelable': true, + 'screenX': first.screenX, + 'screenY': first.screenY, + 'clientX': first.clientX, + 'clientY': first.clientY + }); + } else { + simulatedEvent = document.createEvent('MouseEvent'); + simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null); + } + first.target.dispatchEvent(simulatedEvent); + }; + }; +}; + +Touch.init = function ($$$1) { + + if(typeof($$$1.spotSwipe) === 'undefined') { + Touch.setupSpotSwipe($$$1); + Touch.setupTouchHandler($$$1); + } +}; + +const MutationObserver = (function () { + var prefixes = ['WebKit', 'Moz', 'O', 'Ms', '']; + for (var i=0; i < prefixes.length; i++) { + if (`${prefixes[i]}MutationObserver` in window) { + return window[`${prefixes[i]}MutationObserver`]; + } + } + return false; +}()); + +const triggers = (el, type) => { + el.data(type).split(' ').forEach(id => { + $(`#${id}`)[ type === 'close' ? 'trigger' : 'triggerHandler'](`${type}.zf.trigger`, [el]); + }); +}; + +var Triggers = { + Listeners: { + Basic: {}, + Global: {} + }, + Initializers: {} +}; + +Triggers.Listeners.Basic = { + openListener: function() { + triggers($(this), 'open'); + }, + closeListener: function() { + let id = $(this).data('close'); + if (id) { + triggers($(this), 'close'); + } + else { + $(this).trigger('close.zf.trigger'); + } + }, + toggleListener: function() { + let id = $(this).data('toggle'); + if (id) { + triggers($(this), 'toggle'); + } else { + $(this).trigger('toggle.zf.trigger'); + } + }, + closeableListener: function(e) { + e.stopPropagation(); + let animation = $(this).data('closable'); + + if(animation !== ''){ + Motion.animateOut($(this), animation, function() { + $(this).trigger('closed.zf'); + }); + }else{ + $(this).fadeOut().trigger('closed.zf'); + } + }, + toggleFocusListener: function() { + let id = $(this).data('toggle-focus'); + $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]); + } +}; + +// Elements with [data-open] will reveal a plugin that supports it when clicked. +Triggers.Initializers.addOpenListener = ($elem) => { + $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener); + $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener); +}; + +// Elements with [data-close] will close a plugin that supports it when clicked. +// If used without a value on [data-close], the event will bubble, allowing it to close a parent component. +Triggers.Initializers.addCloseListener = ($elem) => { + $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener); + $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener); +}; + +// Elements with [data-toggle] will toggle a plugin that supports it when clicked. +Triggers.Initializers.addToggleListener = ($elem) => { + $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener); + $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener); +}; + +// Elements with [data-closable] will respond to close.zf.trigger events. +Triggers.Initializers.addCloseableListener = ($elem) => { + $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener); + $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener); +}; + +// Elements with [data-toggle-focus] will respond to coming in and out of focus +Triggers.Initializers.addToggleFocusListener = ($elem) => { + $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener); + $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener); +}; + + + +// More Global/complex listeners and triggers +Triggers.Listeners.Global = { + resizeListener: function($nodes) { + if(!MutationObserver){//fallback for IE 9 + $nodes.each(function(){ + $(this).triggerHandler('resizeme.zf.trigger'); + }); + } + //trigger all listening elements and signal a resize event + $nodes.attr('data-events', "resize"); + }, + scrollListener: function($nodes) { + if(!MutationObserver){//fallback for IE 9 + $nodes.each(function(){ + $(this).triggerHandler('scrollme.zf.trigger'); + }); + } + //trigger all listening elements and signal a scroll event + $nodes.attr('data-events', "scroll"); + }, + closeMeListener: function(e, pluginId){ + let plugin = e.namespace.split('.')[0]; + let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box="${pluginId}"]`); + + plugins.each(function(){ + let _this = $(this); + _this.triggerHandler('close.zf.trigger', [_this]); + }); + } +}; + +// Global, parses whole document. +Triggers.Initializers.addClosemeListener = function(pluginName) { + var yetiBoxes = $('[data-yeti-box]'), + plugNames = ['dropdown', 'tooltip', 'reveal']; + + if(pluginName){ + if(typeof pluginName === 'string'){ + plugNames.push(pluginName); + }else if(typeof pluginName === 'object' && typeof pluginName[0] === 'string');else{ + console.error('Plugin names must be strings'); + } + } + if(yetiBoxes.length){ + let listeners = plugNames.map((name) => { + return `closeme.zf.${name}`; + }).join(' '); + + $(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener); + } +}; + +function debounceGlobalListener(debounce, trigger, listener) { + let timer, args = Array.prototype.slice.call(arguments, 3); + $(window).off(trigger).on(trigger, function(e) { + if (timer) { clearTimeout(timer); } + timer = setTimeout(function(){ + listener.apply(null, args); + }, debounce || 10);//default time to emit scroll event + }); +} + +Triggers.Initializers.addResizeListener = function(debounce){ + let $nodes = $('[data-resize]'); + if($nodes.length){ + debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes); + } +}; + +Triggers.Initializers.addScrollListener = function(debounce){ + let $nodes = $('[data-scroll]'); + if($nodes.length){ + debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes); + } +}; + +Triggers.Initializers.addMutationEventsListener = function($elem) { + if(!MutationObserver){ return false; } + let $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]'); + + //element callback + var listeningElementsMutation = function (mutationRecordsList) { + var $target = $(mutationRecordsList[0].target); + + //trigger the event handler for the element depending on type + switch (mutationRecordsList[0].type) { + case "attributes": + if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") { + $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]); + } + if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") { + $target.triggerHandler('resizeme.zf.trigger', [$target]); + } + if (mutationRecordsList[0].attributeName === "style") { + $target.closest("[data-mutate]").attr("data-events","mutate"); + $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); + } + break; + + case "childList": + $target.closest("[data-mutate]").attr("data-events","mutate"); + $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); + break; + + default: + return false; + //nothing + } + }; + + if ($nodes.length) { + //for each element that needs to listen for resizing, scrolling, or mutation add a single observer + for (var i = 0; i <= $nodes.length - 1; i++) { + var elementObserver = new MutationObserver(listeningElementsMutation); + elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: ["data-events", "style"] }); + } + } +}; + +Triggers.Initializers.addSimpleListeners = function() { + let $document = $(document); + + Triggers.Initializers.addOpenListener($document); + Triggers.Initializers.addCloseListener($document); + Triggers.Initializers.addToggleListener($document); + Triggers.Initializers.addCloseableListener($document); + Triggers.Initializers.addToggleFocusListener($document); + +}; + +Triggers.Initializers.addGlobalListeners = function() { + let $document = $(document); + Triggers.Initializers.addMutationEventsListener($document); + Triggers.Initializers.addResizeListener(); + Triggers.Initializers.addScrollListener(); + Triggers.Initializers.addClosemeListener(); +}; + + +Triggers.init = function ($$$1, Foundation) { + onLoad($$$1(window), function () { + if ($$$1.triggersInitialized !== true) { + Triggers.Initializers.addSimpleListeners(); + Triggers.Initializers.addGlobalListeners(); + $$$1.triggersInitialized = true; + } + }); + + if(Foundation) { + Foundation.Triggers = Triggers; + // Legacy included to be backwards compatible for now. + Foundation.IHearYou = Triggers.Initializers.addGlobalListeners; + } +}; + +// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST +// {function} _setup (replaces previous constructor), +// {function} _destroy (replaces previous destroy) +class Plugin { + + constructor(element, options) { + this._setup(element, options); + var pluginName = getPluginName(this); + this.uuid = GetYoDigits(6, pluginName); + + if(!this.$element.attr(`data-${pluginName}`)){ this.$element.attr(`data-${pluginName}`, this.uuid); } + if(!this.$element.data('zfPlugin')){ this.$element.data('zfPlugin', this); } + /** + * Fires when the plugin has initialized. + * @event Plugin#init + */ + this.$element.trigger(`init.zf.${pluginName}`); + } + + destroy() { + this._destroy(); + var pluginName = getPluginName(this); + this.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin') + /** + * Fires when the plugin has been destroyed. + * @event Plugin#destroyed + */ + .trigger(`destroyed.zf.${pluginName}`); + for(var prop in this){ + this[prop] = null;//clean up script to prep for garbage collection. + } + } +} + +// Convert PascalCase to kebab-case +// Thank you: http://stackoverflow.com/a/8955580 +function hyphenate$1(str) { + return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); +} + +function getPluginName(obj) { + if(typeof(obj.constructor.name) !== 'undefined') { + return hyphenate$1(obj.constructor.name); + } else { + return hyphenate$1(obj.className); + } +} + +/** + * Abide module. + * @module foundation.abide + */ + +class Abide extends Plugin { + /** + * Creates a new instance of Abide. + * @class + * @name Abide + * @fires Abide#init + * @param {Object} element - jQuery object to add the trigger to. + * @param {Object} options - Overrides to the default plugin settings. + */ + _setup(element, options = {}) { + this.$element = element; + this.options = $.extend(true, {}, Abide.defaults, this.$element.data(), options); + + this.className = 'Abide'; // ie9 back compat + this._init(); + } + + /** + * Initializes the Abide plugin and calls functions to get Abide functioning on load. + * @private + */ + _init() { + this.$inputs = $.merge( // Consider as input to validate: + this.$element.find('input').not('[type=submit]'), // * all input fields expect submit + this.$element.find('textarea, select') // * all textareas and select fields + ); + const $globalErrors = this.$element.find('[data-abide-error]'); + + // Add a11y attributes to all fields + if (this.options.a11yAttributes) { + this.$inputs.each((i, input) => this.addA11yAttributes($(input))); + $globalErrors.each((i, error) => this.addGlobalErrorA11yAttributes($(error))); + } + + this._events(); + } + + /** + * Initializes events for Abide. + * @private + */ + _events() { + this.$element.off('.abide') + .on('reset.zf.abide', () => { + this.resetForm(); + }) + .on('submit.zf.abide', () => { + return this.validateForm(); + }); + + if (this.options.validateOn === 'fieldChange') { + this.$inputs + .off('change.zf.abide') + .on('change.zf.abide', (e) => { + this.validateInput($(e.target)); + }); + } + + if (this.options.liveValidate) { + this.$inputs + .off('input.zf.abide') + .on('input.zf.abide', (e) => { + this.validateInput($(e.target)); + }); + } + + if (this.options.validateOnBlur) { + this.$inputs + .off('blur.zf.abide') + .on('blur.zf.abide', (e) => { + this.validateInput($(e.target)); + }); + } + } + + /** + * Calls necessary functions to update Abide upon DOM change + * @private + */ + _reflow() { + this._init(); + } + + /** + * Checks whether or not a form element has the required attribute and if it's checked or not + * @param {Object} element - jQuery object to check for required attribute + * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty + */ + requiredCheck($el) { + if (!$el.attr('required')) return true; + + var isGood = true; + + switch ($el[0].type) { + case 'checkbox': + isGood = $el[0].checked; + break; + + case 'select': + case 'select-one': + case 'select-multiple': + var opt = $el.find('option:selected'); + if (!opt.length || !opt.val()) isGood = false; + break; + + default: + if(!$el.val() || !$el.val().length) isGood = false; + } + + return isGood; + } + + /** + * Get: + * - Based on $el, the first element(s) corresponding to `formErrorSelector` in this order: + * 1. The element's direct sibling('s). + * 2. The element's parent's children. + * - Element(s) with the attribute `[data-form-error-for]` set with the element's id. + * + * This allows for multiple form errors per input, though if none are found, no form errors will be shown. + * + * @param {Object} $el - jQuery object to use as reference to find the form error selector. + * @returns {Object} jQuery object with the selector. + */ + findFormError($el) { + var id = $el[0].id; + var $error = $el.siblings(this.options.formErrorSelector); + + if (!$error.length) { + $error = $el.parent().find(this.options.formErrorSelector); + } + + if (id) { + $error = $error.add(this.$element.find(`[data-form-error-for="${id}"]`)); + } + + return $error; + } + + /** + * Get the first element in this order: + * 2. The
      • Back