{"version":3,"file":"js/7758.chunk.js?v=1742528680091","mappings":"mKAIMA,EAAgB,SAAAC,GAClB,IAAMC,EAAU,CACZC,aAAc,gBACdC,iBAAkB,kBAClBH,QAASA,GAAUI,IAAE,aAAaC,eAAiB,IAInDD,IAAE,cAAcE,OAAS,GACzBC,IAAU,aAAcN,EAEhC,EAEMO,EAAW,SAACC,EAAKC,EAAaC,EAAKC,GACrC,KAAIR,IAAEO,GAAKL,QAAU,GAArB,CAIA,IAAMO,EAAUJ,EAAIK,QAAQJ,GAAaL,cAErCO,GAEAb,EAAcc,GAGlBT,IAAE,cAAcW,QACZ,CAAEC,UAAWZ,IAAEO,GAAKX,SAASiB,IAAMJ,GACnC,KACA,WAGQA,EAAUJ,EAAIK,QAAQJ,GAAaL,gBAC9BO,GAEDJ,EAASC,EAAKC,EAAaC,GAAK,GAG5C,GArBJ,CAuBJ,EAwGAP,KAAE,WAtGoB,IACZc,EACAC,EADAD,EAAgBd,IAAE,kBAClBe,EAAQf,IAAE,mBAEZc,EAAcZ,QAAU,IAI5Ba,EAAMC,OAAM,SAASC,GACjB,IAAMZ,EAAML,IAAEkB,MACRX,EAAMF,EAAIc,KAAK,QAEI,MAArBZ,EAAIa,OAAO,EAAG,KACdH,EAAEI,iBACFC,OAAOC,QAAQC,aAAa,CAAEC,KAAMlB,GAAO,GAAIA,GAE3CF,EAAIK,QAAQ,0BAA0BR,OAAS,GAE/CE,EAASC,EAAK,YAAaE,GAC3BQ,EAAMW,YAAY,UAClBrB,EAAIsB,SAAS,WAGbvB,EAASC,EAAK,iBAAkBE,GAG5C,IAGAP,IAAE,mBAAmB4B,QAAO,WACxB,IAAMC,EAAO7B,IAAEkB,MACfW,EAAKnB,QAAQ,kBACRoB,KAAK,yBAADC,OAA0BF,EAAKG,MAAK,OACxChB,OACT,IAGAM,OAAOW,SAAW,WAIdjC,IAAE,2CAA2CkC,MAAK,WAC9C,IAAMC,EAAOnC,IAAEkB,MACTkB,EAAYD,EAAKvC,SAASiB,IAC5Bb,IAAEsB,QAAQV,YAAcwB,GACxBD,EAAKR,SAAS,UAEd3B,IAAE,aAAaqC,YAEfF,EAAKT,YAAY,UAEjB1B,IAAE,aAAasC,SAEvB,GACJ,EAEAhB,OAAOiB,SAAW,WACVvC,IAAEsB,QAAQkB,QAAU,OAIxB7C,IAEAmB,EAAcoB,MAAK,WACf,IAAMC,EAAOnC,IAAEkB,MACTuB,EAAQN,EAAKL,KAAK,SAClBY,EAASD,EAAMX,KAAK,iBACtBa,GAAc,EAElBR,EAAKT,YAAY,UACjBgB,EAAOR,MAAK,WACRS,GAAc3C,IAAEkB,MAAM0B,YAAW,EACrC,IAGIH,EAAMG,aAAeD,GACrBR,EAAKR,SAAS,SAEtB,IACJ,EACA3B,IAAEsB,QAAQuB,UAIM,WAChB,IAAQC,EAASxB,OAAOyB,SAAhBD,KAKR,IAAK,OAAQE,KAAKF,GAAlB,CAIA,IAAMG,EAAUjD,IAAE8C,GAEdA,GAAQG,EAAQ/C,OAAS,GACzBF,IAAE,gDAAD+B,OAAiDe,EAAI,OAAM9B,OALhE,CAOJ,CAKIkC,GACAvD,GACJ,G,iBCrJAwD,EAAOC,QAAU,SAACC,GAAqB,IAAjBxD,EAAOyD,UAAApD,OAAA,QAAAqD,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAGvBE,EAAW,IAAIC,EADCC,EAAQ,MAAtBD,WACuBJ,EAAIxD,GAOnC,OALAyB,OAAOqC,OAASH,EAASI,WACzBtC,OAAOuC,iBAAiB,UAAU,WAC9B,OAAOL,EAASI,UACpB,IAEOJ,CACX,C,45CCXO,IAAMC,EAAS,WAwBjB,O,EAvBD,SAAAA,EAAYK,GAAoB,IAAdjE,EAAOyD,UAAApD,OAAA,QAAAqD,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EACzB,G,4FAD0BS,CAAA,KAAAN,IACrBK,EACD,MAAM,IAAIE,MACN,wDAIR,GAAuB,WAAnBC,EAAOpE,GACP,MAAM,IAAImE,MAAM,+CAWpB9C,KAAKgD,SACDJ,aAAgBK,YAAcL,EAAOM,SAASC,cAAcP,GAChE5C,KAAKrB,QAAOyE,EAAAA,EAAA,GAVW,CACnBxE,aAAc,aACdC,iBAAkB,SAClBH,OAAQ,EACR2E,cAAe,OACfC,YAAa,WAKsB3E,GACvCqB,KAAKuD,SAAWL,SAASM,iBAAiBxD,KAAKrB,QAAQC,aAC3D,G,EAAC,EAAA6E,IAAA,WAAAC,MAED,WACI,IAAMC,EAAU3D,KAAK4D,mBACfC,EAAW7D,KAAK8D,qBAAqBH,GAEvCE,IACA7D,KAAK+D,oBAAoB,CAAEC,OAAQH,IACnC7D,KAAKiE,UAAUJ,GAEvB,GAAC,CAAAJ,IAAA,uBAAAC,MAED,SAAqBC,GACjB,GAAKA,EAAL,CAGA,IAAMO,EAAYP,EAAQQ,aAAa,MAEvC,OAAOnE,KAAKgD,SAASG,cAAc,IAADtC,OAC1Bb,KAAKrB,QAAQ0E,cAAa,OAAAxC,OAAMqD,EAAS,MAJjD,CAMJ,GAEA,CAAAT,IAAA,mBAAAC,MACA,WACI,IAAK,IAAIU,EAAI,EAAGA,EAAIpE,KAAKuD,SAASvE,OAAQoF,GAAK,EAAG,CAC9C,IAAMC,EAAUrE,KAAKuD,SAASa,GAAGlD,UAC3BoD,EAAQD,EAAUrE,KAAKuD,SAASa,GAAGG,aACnCC,GACDtB,SAASuB,gBAAgB/E,WACtBwD,SAASwB,KAAKhF,WAAaM,KAAKrB,QAAQD,OAGhD,GADI8F,EAAkBH,GAAWG,GAAmBF,EAEhD,OAAOtE,KAAKuD,SAASa,EAE7B,CACJ,GAAC,CAAAX,IAAA,YAAAC,MAED,SAAUiB,GACWA,EAAWC,UAAUC,SAClC7E,KAAKrB,QAAQ2E,cAGbqB,EAAWC,UAAUE,IAAI9E,KAAKrB,QAAQ2E,YAE9C,GAAC,CAAAG,IAAA,sBAAAC,MAED,SAAmBqB,GAAa,IAAAC,EAAA,KAAVhB,EAAMe,EAANf,OAClBiB,EAA4CjF,KAAKrB,QAAzC0E,EAAa4B,EAAb5B,cAAexE,EAAgBoG,EAAhBpG,iBACjBqG,EAAQ,GAAHrE,OAAMhC,EAAgB,iBAAAgC,OAAgBwC,EAAa,MAAAxC,OAAKmD,EAAOG,aACtEd,GACH,OACiBrD,KAAKgD,SAASQ,iBAAiB0B,GAEvCC,SAAQ,SAAAC,GACd,OAAOA,EAAKR,UAAUS,OAAOL,EAAKrG,QAAQ2E,YAC9C,GAEJ,M,6EAAC,CAnFiB,E","sources":["webpack://fed-boilerplate/./src/4-sections/sticky-nav/s-sticky-nav.js","webpack://fed-boilerplate/./src/4-sections/sticky-nav/simple-scrollspy/index.js","webpack://fed-boilerplate/./src/4-sections/sticky-nav/simple-scrollspy/scrollspy.js"],"sourcesContent":["import $ from 'jquery';\nimport scrollSpy from './simple-scrollspy';\n\n// need to re init on each header height change\nconst scrollSpyInit = offset => {\n    const options = {\n        sectionClass: '.js-scrollspy',\n        menuActiveTarget: '.js-item-anchor',\n        offset: (offset || $('.s-header').outerHeight()) + 20,\n    };\n\n    // init:\n    if ($('#js-spy-on').length > 0) {\n        scrollSpy('#js-spy-on', options);\n    }\n};\n\nconst scrollTo = ($el, parentClass, url, redo) => {\n    if ($(url).length <= 0) {\n        return;\n    }\n\n    const headerH = $el.closest(parentClass).outerHeight();\n\n    if (redo) {\n        // reinit scroll spy with new height\n        scrollSpyInit(headerH);\n    }\n\n    $('html, body').animate(\n        { scrollTop: $(url).offset().top - headerH },\n        400,\n        () => {\n            // the header height is change on first time it scroll\n            // use the sorter header to make sure the target is visible\n            if (headerH > $el.closest(parentClass).outerHeight()) {\n                if (!redo) {\n                    // redo only once\n                    scrollTo($el, parentClass, url, true);\n                }\n            }\n        }\n    );\n};\n\nconst stickyNavInit = () => {\n    const $stickyHeader = $('.js-sticky-nav');\n    const $item = $('.js-item-anchor');\n\n    if ($stickyHeader.length <= 0) {\n        return;\n    }\n\n    $item.click(function(e) {\n        const $el = $(this);\n        const url = $el.attr('href');\n\n        if (url.substr(0, 1) === '#') {\n            e.preventDefault();\n            window.history.replaceState({ path: url }, '', url);\n\n            if ($el.closest('.js-product-sticky-nav').length > 0) {\n                // product-sticky-nav\n                scrollTo($el, '.s-header', url);\n                $item.removeClass('active');\n                $el.addClass('active');\n            } else {\n                // default sticky-nav\n                scrollTo($el, '.js-sticky-nav', url);\n            }\n        }\n    });\n\n    // respon for mobile select\n    $('.js-mobile-show').change(function() {\n        const $sel = $(this);\n        $sel.closest('.js-sticky-nav')\n            .find(`.js-item-anchor[href=\"${$sel.val()}\"]`)\n            .click();\n    });\n\n    // on scroll\n    window.onscroll = () => {\n        // is not posible to have .s-sticky-nav and .s-sticky-nav.product-sticky-nav at the same time\n        // so set this for .js-sticky-nav only\n        // .s-sticky-nav.product-sticky-nav sit inside header, no need to set sticky on it\n        $('.js-sticky-nav:not(.product-sticky-nav)').each(function() {\n            const $nav = $(this);\n            const offsetTop = $nav.offset().top;\n            if ($(window).scrollTop() > offsetTop) {\n                $nav.addClass('sticky');\n                // hide the header when the nav is sticky\n                $('.s-header').fadeOut();\n            } else {\n                $nav.removeClass('sticky');\n                // show the header when the nav is no longer sticky\n                $('.s-header').fadeIn();\n            }\n        });\n    };\n\n    window.onresize = () => {\n        if ($(window).width() < 1024) {\n            return;\n        }\n\n        scrollSpyInit();\n\n        $stickyHeader.each(function() {\n            const $nav = $(this);\n            const $menu = $nav.find('.menu');\n            const $items = $menu.find('.desktop-item');\n            let totalWidth = -1;\n\n            $nav.removeClass('packed');\n            $items.each(function() {\n                totalWidth += $(this).outerWidth(true);\n            });\n\n            // Check if the last element is outside the width of the menu\n            if ($menu.outerWidth() < totalWidth) {\n                $nav.addClass('packed');\n            }\n        });\n    };\n    $(window).resize();\n};\n\n// click anchor onload\nconst clickAnchor = () => {\n    const { hash } = window.location;\n\n    // Guard from picking up React hash router. Its routes look like `#/route name`.\n    // The `#/` part isn't a valid DOM selector and the script below would throw\n    // an error without this guard.\n    if ((/^#\\//).test(hash)) {\n        return;\n    }\n\n    const $target = $(hash);\n\n    if (hash && $target.length > 0) {\n        $(`.js-product-sticky-nav .js-item-anchor[href=\"${hash}\"]`).click();\n    }\n};\n\n// doc ready\n$(() => {\n    stickyNavInit();\n    clickAnchor();\n    scrollSpyInit();\n});\n","// @NOTE - code taken from https://github.com/kimyvgy/simple-scrollspy/blob/master/src/index.js\n//       - Need to host it locally to allow babel to build it so IE11 works\nmodule.exports = (el, options = {}) => {\n    // eslint-disable-next-line global-require\n    const { ScrollSpy } = require('./scrollspy');\n    const instance = new ScrollSpy(el, options);\n\n    window.onload = instance.onScroll();\n    window.addEventListener('scroll', () => {\n        return instance.onScroll();\n    });\n\n    return instance;\n};\n","// @NOTE - code taken from https://github.com/kimyvgy/simple-scrollspy/blob/master/src/scrollspy.js\n//       - Need to host it locally to allow babel to build it so IE11 works\nexport class ScrollSpy {\n    constructor(menu, options = {}) {\n        if (!menu) {\n            throw new Error(\n                'First argument is query selector to your navigation.'\n            );\n        }\n\n        if (typeof options !== 'object') {\n            throw new Error('Second argument must be instance of Object.');\n        }\n\n        const defaultOptions = {\n            sectionClass: '.scrollspy',\n            menuActiveTarget: 'li > a',\n            offset: 0,\n            hrefAttribute: 'href',\n            activeClass: 'active',\n        };\n\n        this.menuList =\n            menu instanceof HTMLElement ? menu : document.querySelector(menu);\n        this.options = { ...defaultOptions, ...options };\n        this.sections = document.querySelectorAll(this.options.sectionClass);\n    }\n\n    onScroll() {\n        const section = this.getSectionInView();\n        const menuItem = this.getMenuItemBySection(section);\n\n        if (menuItem) {\n            this.removeCurrentActive({ ignore: menuItem });\n            this.setActive(menuItem);\n        }\n    }\n\n    getMenuItemBySection(section) {\n        if (!section) {\n            return;\n        }\n        const sectionId = section.getAttribute('id');\n        // eslint-disable-next-line consistent-return\n        return this.menuList.querySelector(\n            `[${this.options.hrefAttribute}=\"#${sectionId}\"]`\n        );\n    }\n\n    // eslint-disable-next-line consistent-return\n    getSectionInView() {\n        for (let i = 0; i < this.sections.length; i += 1) {\n            const startAt = this.sections[i].offsetTop;\n            const endAt = startAt + this.sections[i].offsetHeight;\n            const currentPosition =\n                (document.documentElement.scrollTop ||\n                    document.body.scrollTop) + this.options.offset;\n            const isInView =\n                currentPosition > startAt && currentPosition <= endAt;\n            if (isInView) {\n                return this.sections[i];\n            }\n        }\n    }\n\n    setActive(activeItem) {\n        const isActive = activeItem.classList.contains(\n            this.options.activeClass\n        );\n        if (!isActive) {\n            activeItem.classList.add(this.options.activeClass);\n        }\n    }\n\n    removeCurrentActive({ ignore }) {\n        const { hrefAttribute, menuActiveTarget } = this.options;\n        const items = `${menuActiveTarget}.active:not([${hrefAttribute}=\"${ignore.getAttribute(\n            hrefAttribute\n        )}\"])`;\n        const menuItems = this.menuList.querySelectorAll(items);\n\n        menuItems.forEach(item => {\n            return item.classList.remove(this.options.activeClass);\n        }\n        );\n    }\n}\n"],"names":["scrollSpyInit","offset","options","sectionClass","menuActiveTarget","$","outerHeight","length","scrollSpy","scrollTo","$el","parentClass","url","redo","headerH","closest","animate","scrollTop","top","$stickyHeader","$item","click","e","this","attr","substr","preventDefault","window","history","replaceState","path","removeClass","addClass","change","$sel","find","concat","val","onscroll","each","$nav","offsetTop","fadeOut","fadeIn","onresize","width","$menu","$items","totalWidth","outerWidth","resize","hash","location","test","$target","clickAnchor","module","exports","el","arguments","undefined","instance","ScrollSpy","require","onload","onScroll","addEventListener","menu","_classCallCheck","Error","_typeof","menuList","HTMLElement","document","querySelector","_objectSpread","hrefAttribute","activeClass","sections","querySelectorAll","key","value","section","getSectionInView","menuItem","getMenuItemBySection","removeCurrentActive","ignore","setActive","sectionId","getAttribute","i","startAt","endAt","offsetHeight","currentPosition","documentElement","body","activeItem","classList","contains","add","_ref","_this","_this$options","items","forEach","item","remove"],"sourceRoot":""}