{"version":3,"file":"js/11-374f32e175296913d2bd.js","mappings":"2GAIO,MCDDA,EAAS,CACbC,eAAgB,uBAChBC,gBAAiB,wBACjBC,WAAY,sBACZC,aAAc,kBAIhBC,OAAOC,iBAAiB,QAAQ,KDPEC,GAAGN,iBAAgBC,kBAAiBC,aAAYC,mBAChF,MAAMI,EAAeC,SAASC,eAAeT,GACvCU,EAAeF,SAASC,eAAeR,GAG7B,SAFAU,aAAaC,QAAQV,IAInCK,GAAcM,UAAUC,IAAIX,GAG3BO,GACDA,EAAaL,iBAAiB,SAAS,KAErCM,aAAaI,QAAQb,EAAY,QACjCK,EAAaM,UAAUG,OAAOb,EAAa,GAE/C,ECRAG,CAAmBP,EAAO,G,kBCRrB,MCEDA,EACkB,gBADlBA,EAEiB,0BAFjBA,EAGkB,oCAHlBA,EAIgB,kCAJhBA,EAKa,oBAInBK,OAAOC,iBAAiB,QAAQ,KDXIY,GAAGC,2BACrC,MAAMC,EAAeX,SAASY,cAAcF,GAC5C,IACIG,EADAC,EAAgB,EAGpBlB,OAAOC,iBAAiB,UAAU,KAChCgB,EAAiBjB,OAAOmB,QACpBF,GAAkBC,EACpBH,GAAcN,UAAUC,IAAI,wBAE5BK,GAAcN,UAAUG,OAAO,wBAEjCM,EAAgBD,CAAc,GAC9B,ECGFJ,CAH8B,CAC5BC,qBAAsBnB,IDMKyB,GAAGC,uBAAsBC,qBAAoBC,sBAAqBC,sBAC/F,MAAMC,EAAerB,SAASY,cAAcK,GACtCK,EAAatB,SAASY,cAAcM,GAC1C,IAAKI,EACH,OAEF,MAAMC,EAAoBD,EAAWV,cAAcO,GAE/CE,GACFA,EAAaxB,iBAAiB,SAAS,KACrCyB,EAAWjB,UAAUC,IAAIc,GACzBpB,SAASwB,KAAKC,MAAMC,SAAW,QAAQ,IAIvCH,GACFA,EAAkB1B,iBAAiB,SAAS,KAC1CyB,EAAWjB,UAAUG,OAAOY,GAC5BpB,SAASwB,KAAKC,MAAMC,SAAW,MAAM,GAEzC,ECdAV,CANyB,CACvBC,qBAAsB1B,EACtB2B,mBAAoB3B,EACpB4B,oBAAqB5B,EACrB6B,gBAAiB7B,GAEc,G,kBC1B5B,MA+BMoC,EAA2BA,EAAGC,WAAUC,mBACnD,MAAMC,EAAiB9B,SAASY,cAAcgB,GAC9C,GAAIE,EAAgB,CAClB,MAAMC,EAAiBD,EAAeE,wBAAwBC,OAC9DjC,SAASkC,gBAAgBT,MAAMU,YAAYN,EAAe,GAAEE,MAC9D,GCtCIxC,EACY,UAYZ6C,EAAuB,CAC3BR,SAAUrC,EACVsC,aAXc,mBAcVQ,EAAkB,CACtBC,kBAdmB,aAenBC,oBAdqB,yBAerBC,sBAduB,OAevBC,6BAd8B,0BAe9BC,0BAd2B,yBAe3BC,kBAAmBA,IAAMhB,EAAyBS,IAG9CQ,EAAkB,CACtBC,eAAgBtD,EAChBuD,mBA3BoB,sBA4BpBC,YA3Ba,iBA4BbC,WArBY,MAwBRC,EAAsBA,KAC1BtB,EAAyBS,EAAqB,EAGhDpC,SAASH,iBAAiB,oBAAoB,KDgBXqD,GACjCZ,oBACAC,sBACAC,wBACAC,+BACAC,4BACAC,wBAEA,MAAMQ,EAAmBnD,SAASY,cAAc0B,GAEhD,IAAKa,EAAkB,OAEvB,MAAMC,EAA8BpD,SAASY,cAAc6B,GAElCY,MACvB,MAAMC,EAAYC,eAAenD,QAAQmC,KAAyBC,EAClEW,EAAiB9C,UAAUmD,OAAOd,EAA2BY,GACxDA,GAAWX,GAAmB,EAGrCU,GAEKD,GACLA,EAA4BvD,iBAAiB,SAAS,KACpDsD,EAAiB9C,UAAUC,IAAIoC,GAC/BC,IACAY,eAAehD,QAAQgC,EAAqBC,EAAsB,GAClE,EC1CFU,CAAoBb,EAAgB,IAGtCzC,OAAOC,iBAAiB,QAAQ,KDxCD4D,GAAGZ,iBAAgBC,qBAAoBC,cAAaC,iBACjF,MAAMU,EAAS1D,SAASY,cAAciC,GAChCc,EAAmB3D,SAASY,cAAckC,GAE5CY,GAAUC,IACZA,EAAiB9D,iBAAiB,SAAS,KACzC6D,EAAOrD,UAAUmD,OAAOT,GACxB/C,SAASwB,KAAKC,MAAMC,SAAWgC,EAAOrD,UAAUuD,SAASb,GAAe,SAAW,EAAE,IAGzEW,EAAOG,iBAAiB,KAChCC,SAAQC,IACZA,EAAKlE,iBAAiB,SAAS,KAC7B6D,EAAOrD,UAAUG,OAAOuC,GACxB/C,SAASwB,KAAKC,MAAMC,SAAW,EAAE,GACjC,IAGJ9B,OAAOC,iBAAiB,UAAU,KAC5BD,OAAOoE,WAAahB,GAAcU,EAAOrD,UAAUuD,SAASb,KAC9DW,EAAOrD,UAAUG,OAAOuC,GACxB/C,SAASwB,KAAKC,MAAMC,SAAW,GACjC,IAEJ,ECiBA+B,CAAgBb,GAChBK,GAAqB,IAGvBrD,OAAOC,iBAAiB,SAAUoD,E,8FCvC3B,MAAMgB,EAAgBA,CAACC,EAAgB,CAAC,EAAGC,EAAoB,QACpE,MAAMC,EAAiBD,GAAqB,CAC1CE,MAAM,EACNC,SAAU,CACRC,MAAO,KAETC,MAAO,KAGT,MAAO,IACFJ,KACAF,EACHI,SAAU,IACLF,EAAeE,YACfJ,EAAcI,UAEpB,EAYUG,EAAuBA,CAACC,EAAWC,EAASC,EAAW,OAClE,IAAIC,EAAS,KAEb,MAAMC,EAAaA,IACblF,OAAOoE,YAAcY,EAChB,IAAIG,EAAAA,EAAOL,EAAWC,GAExB,KAGHK,EAAWA,KACXH,GAAUjF,OAAOoE,WAAaY,GAChCC,EAAOI,SAAQ,GAAM,GACrBJ,EAAS,OACCA,GAAUjF,OAAOoE,YAAcY,IACzCC,EAASC,IACX,EAMF,OAHAD,EAASC,IACTlF,OAAOC,iBAAiB,SAAUmF,GAE3B,CACLC,QAASA,KACHJ,GACFA,EAAOI,SAAQ,GAAM,GAEvBrF,OAAOsF,oBAAoB,SAAUF,EAAS,EAEjD,C,iBCnEH,MAOMG,EAAmBtC,GAAmB7C,SAASY,cAAciC,GAAgBuC,aAK7EC,EAAoBC,IACxB1F,OAAO2F,SAAS,CACdC,IAAKF,EACLG,SAAU,UACV,EAGEC,EAAqBA,CAACC,EAAOC,EAAS/C,KAC1C,MAAM,UAAEgD,EAAS,SAAEC,GApBKC,KACxB,MAAOF,EAAWC,GAAYC,EAAKC,MAAM,KACzC,MAAO,CAAEH,YAAWC,WAAU,EAkBEG,CAAiBL,EAAQM,aAAa,SAGtE,GAAKL,IAlBqBjG,OAAOuG,SAASC,WAkBPP,EAAW,CAC5CF,EAAMU,iBACN,MAAMC,EAAgBtG,SAASC,eAAe6F,GACxCS,EAAepB,EAAgBtC,GAErC,GAAIyD,EAAe,CACjB,MAAME,EApBcC,EAACH,EAAeC,IACxCD,EAActE,wBAAwBwD,IAAM5F,OAAOmB,QAAUwF,EAmBlCE,CAAkBH,EAAeC,GACxDlB,EAAiBmB,GAGjB,MAAME,EAAU,GAAE9G,OAAOuG,SAASC,YAAYN,IAC9Ca,QAAQC,UAAU,KAAM,GAAIF,EAC9B,CACF,GA4BWG,EAAoBA,EAAGC,mBAAkBjE,qBAzB1BkE,EAACC,EAAUnE,KACrCmE,EAASlD,SAAS8B,IAChBA,EAAQ/F,iBAAiB,SAAU8F,GAAUD,EAAmBC,EAAOC,EAAS/C,IAAgB,GAChG,EAwBFkE,CADyB/G,SAAS6D,iBAAiBiD,GACbjE,GArBXA,KAC3B,MAAMoE,EAAMrH,OAAOuG,SAASJ,KAE5B,IAA0B,IAAtBkB,EAAIC,QAAQ,KAAa,CAC3B,MAAMC,EAASF,EAAIjB,MAAM,KACnBoB,EAASpH,SAASC,eAAekH,EAAOA,EAAOE,OAAS,IACxDd,EAAepB,EAAgBtC,GAErC,GAAIuE,EAAQ,CACV,MAAM9B,EAAWgC,KAAKC,MAAMH,EAAOpF,wBAAwBwD,IAAM5F,OAAOmB,SAAWwF,EACnFlB,EAAiBC,EACnB,CACF,GAUAkC,CAAoB3E,EAAe,EChE/BtD,EACc,kCADdA,EAEY,UAFZA,EAGqB,iBAHrBA,EAIS,SAGfK,OAAOC,iBAAiB,QAAQ,KAM9BgH,EAJ2B,CACzBC,iBAAkBvH,EAClBsD,eAAgBtD,ID6DgBkI,GAAGC,0BAAyB3E,kBAC9D,MAAM4E,EAAkB3H,SAASY,cAAc8G,GAC/C,GAAIC,EAAiB,CACnB,MAAMC,EAAyBA,KACzBhI,OAAOmB,QAAU,GACnB4G,EAAgBtH,UAAUC,IAAIyC,GAE9B4E,EAAgBtH,UAAUG,OAAOuC,EACnC,EAGF6E,IACAhI,OAAOC,iBAAiB,SAAU+H,GAClCD,EAAgB9H,iBAAiB,SAAS,KACxCD,OAAO2F,SAAS,CAAEC,IAAK,EAAGC,SAAU,UAAW,GAEnD,GCpEAgC,CAJ8B,CAC5BC,wBAAyBnI,EACzBwD,YAAaxD,GAE4B,G,+CClB7C,MA6BMsI,EAAYA,CAACC,EAAaC,EAAiBC,EAAgBjF,EAAakF,EAAYC,KA7BnEC,EAACC,EAAYL,KAClC,MAAMM,EAAWrI,SAASC,eAAemI,GACnCE,EAAiBtI,SAASC,eAAe8H,GAC/CO,EAAeC,UAAY,GAC3B,MAAMC,EAAQxI,SAASyI,WAAWJ,EAASK,SAAS,GACpDJ,EAAeK,YAAYH,EAAM,EAyBjCL,CAAgB,GAAEL,KAAeE,IAAkBD,GAhBhCa,EAACd,EAAaG,EAAYlF,KAC7CkF,EAAWnE,SAAQ+E,IACjBA,EAAOxI,UAAUmD,OAAOT,EAAa8F,EAAOC,KAAOhB,EAAY,GAC/D,EAcFc,CAAad,EAAaG,EAAYlF,GAGd,oBAAbmF,GACTA,GACF,EAyBWa,EAAWA,CAACC,EAAmBjB,EAAiBC,EAAgBjF,EAAamF,KACxF,MAAMD,EAAajI,SAAS6D,iBAAiBmF,GAfrBC,EAAChB,EAAYF,EAAiBC,EAAgBjF,EAAamF,KACnFD,EAAWnE,SAAQ+E,IACjBA,EAAOhJ,iBAAiB,SAAS,IAAMgI,EAAUgB,EAAOC,GAAIf,EAAiBC,EAAgBjF,EAAakF,EAAYC,IAAU,GAChI,EAaFe,CAAkBhB,EAAYF,EAAiBC,EAAgBjF,EAAamF,GAGxED,EAAWZ,OAAS,GACtBQ,EAAUI,EAAW,GAAGa,GAAIf,EAAiBC,EAAgBjF,EAAakF,EAAYC,EACxF,E,0CClEFlI,SAASH,iBAAiB,oBAAoB,KAE5C,GAAIG,SAASY,cAAc,qBAAsB,CAE/C,MAAMsI,EAAkB,IAAInE,EAAAA,EAAO,0BAA2B,CAC5DoE,cAAe,IACfC,aAAc,KAGhB,IAAIrE,EAAAA,EACF,qBACAd,EAAAA,EAAAA,IAAc,CACZkF,cAAe,EACfC,aAAc,GACdC,WAAY,CACVC,OAAQ,wBACRC,OAAQ,yBAEVC,WAAY,CACVC,GAAI,sBACJC,YAAa,2BACbC,kBAAmB,mCACnBC,WAAW,GAEbC,OAAQ,CACNhF,OAAQqE,KAIhB,CAGIlJ,SAASY,cAAc,uBACzB,IAAImE,EAAAA,EACF,sBACAd,EAAAA,EAAAA,IAAc,CACZkF,cAAe,IACfC,aAAc,GACdC,WAAY,CACVC,OAAQ,0CACRC,OAAQ,2CAEVO,YAAa,CACX,IAAK,CACHX,cAAe,OACfC,aAAc,OAKxB,IAGFxJ,OAAOC,iBAAiB,QAAQ,KAG9B,IAAIkK,EAAiB,KAErB,MAAMC,EAAoBA,KACxB,MAAMC,EAAwBjK,SAASY,cAAc,wBACjDqJ,IACEF,GAEFA,EAAe9E,SAAQ,GAAM,GAG/B8E,EAAiB,IAAIhF,EAAAA,EACnBkF,GACAhG,EAAAA,EAAAA,IAAc,CACZI,MAAM,EACN8E,cAAe,OACfC,aAAc,GACdc,eAAe,EACfb,WAAY,CACVC,OAAQ,kCACRC,OAAQ,sCAIhB,EAIFR,EACE,0BACA,kBACA,UACA,iCACAiB,GAEFjB,EACE,0BACA,yBACA,QACA,iCACAiB,GAKFjB,EAAS,mCAAoC,8BAA+B,WAAY,2BAIxFA,EAAS,gCAAiC,2BAA4B,WAAY,2BAgBlF,GAboB/I,SAASY,cAAc,oBAEzCuJ,IAAAA,KAAO,CACLlD,IAAK,gDACLmD,WAAWC,GACTA,EAAIC,iBAAiB,eAAgBH,IAAE,2BAA2BI,KAAK,WACzE,EACAC,KAAM,MACNC,QAAS,MAKTzK,SAASY,cAAc,oBAAqB,CAE9C,MAAM8J,EAA2BC,IAC/B,MAAMC,EAAoBD,EAAeE,OAAOF,EAAeG,aAAa5E,aAAa,gBAEzFlG,SAAS6D,iBAAiB,0BAA0BC,SAASiH,IACvDA,EAAMjC,KAAO8B,EACfG,EAAM1K,UAAUC,IAAI,WAEpByK,EAAM1K,UAAUG,OAAO,UACzB,GACA,EAIEwK,EAAgB,IAAIjG,EAAAA,EACxB,oBACAd,EAAAA,EAAAA,IAAc,CACZkF,cAAe,EACfC,aAAc,GACdC,WAAY,CACVC,OAAQ,6BACRC,OAAQ,8BAEV0B,GAAI,CACFC,KAAM,WACJR,EAAwBS,KAC1B,EACAC,YAAa,WACXV,EAAwBS,KAC1B,MAMNnL,SAAS6D,iBAAiB,QAAQC,SAASuH,IACzCA,EAAKxL,iBAAiB,SAAUyL,IAC9BA,EAAEjF,iBACF,MAAMkF,EAASF,EAAKnF,aAAa,gBAGjClG,SAAS6D,iBAAiB,0BAA0BC,SAASiH,IACvDA,EAAMjC,KAAOyC,EACfR,EAAM1K,UAAUC,IAAI,WAEpByK,EAAM1K,UAAUG,OAAO,UACzB,IAIF,MAAMgL,EAAcC,MAAMC,KAAK1L,SAAS6D,iBAAiB,gCAAgC8H,WACtFC,GAAUA,EAAM1F,aAAa,kBAAoBqF,KAG/B,IAAjBC,GACFR,EAAca,QAAQL,EACxB,GACA,GAEN,CAGA,MAAMlF,EAAgBtG,SAASY,cAAc,cAC7C,GAAI0F,EAAe,CACjB,MAAMwF,EAAW,IAAIC,sBACnB,KAEE,GAD4B/L,SAASY,cAAc,4BAC1B,CACDZ,SAASC,eAAe,kBAChCJ,iBAAiB,SAAS,KACtCsK,IAAAA,KAAO,CACLlD,IAAK,cACLmD,WAAWC,GACTA,EAAIC,iBAAiB,eAAgBH,IAAE,2BAA2BI,KAAK,WACzE,EACAC,KAAM,MACNC,QAAS,KACT,GAEN,CACAqB,EAASE,YAAY,GAEvB,CACEC,KAAM,KACNC,WAAY,UACZC,UAAW,CAAC,KAKhBL,EAASM,QAAQ9F,EACnB,CAEA+F,KAAgB,G","sources":["webpack://kyoto_kankou/./app/javascript/sprinkles/module/CookieConsentFunctions.js","webpack://kyoto_kankou/./app/javascript/sprinkles/cookieConsent.js","webpack://kyoto_kankou/./app/javascript/sprinkles/module/FloatButtonFunctions.js","webpack://kyoto_kankou/./app/javascript/sprinkles/floatButton.js","webpack://kyoto_kankou/./app/javascript/sprinkles/module/HeaderFunctions.js","webpack://kyoto_kankou/./app/javascript/sprinkles/header.js","webpack://kyoto_kankou/./app/javascript/sprinkles/module/SwiperFunctions.js","webpack://kyoto_kankou/./app/javascript/sprinkles/module/ScrollFunctions.js","webpack://kyoto_kankou/./app/javascript/sprinkles/scroll.js","webpack://kyoto_kankou/./app/javascript/sprinkles/module/TabFunctions.js","webpack://kyoto_kankou/./app/javascript/sprinkles/top.js"],"sourcesContent":["/**\n * Cookie同意ポップアップの表示と同意処理を設定する関数\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setupCookieConsent = ({ consentPopupId, consentButtonId, consentKey, displayClass }) => {\n const consentPopup = document.getElementById(consentPopupId);\n const acceptButton = document.getElementById(consentButtonId);\n const consent = localStorage.getItem(consentKey);\n\n if (consent !== 'true') {\n // ローカルストレージに同意の記録がない場合、ポップアップを表示\n consentPopup?.classList.add(displayClass);\n }\n\n if(acceptButton) {\n acceptButton.addEventListener('click', () => {\n // 同意するをクリックした場合、ローカルストレージに同意を記録し、ポップアップを非表示にする\n localStorage.setItem(consentKey, 'true');\n consentPopup.classList.remove(displayClass);\n });\n }\n};\n","import { setupCookieConsent } from './module/CookieConsentFunctions';\n\n// 設定オブジェクト\nconst config = {\n consentPopupId: 'cookie-consent-popup',\n consentButtonId: 'cookie-consent-button',\n consentKey: 'cookieConsent-kyoto',\n displayClass: 'u-displayBlock'\n};\n\n// DOMの読み込みが完了したら設定する\nwindow.addEventListener('load', () => {\n setupCookieConsent(config);\n});\n","/**\n * フローティングボタンのスクロールに応じた表示切り替え\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setupFloatingButtons = ({ floatButtonsSelector }) => {\n const floatButtons = document.querySelector(floatButtonsSelector);\n let startPosition = 0;\n let windowPosition;\n\n window.addEventListener('scroll', () => {\n windowPosition = window.scrollY;\n if (windowPosition <= startPosition) {\n floatButtons?.classList.add('floatButtons--active');\n } else {\n floatButtons?.classList.remove('floatButtons--active');\n }\n startPosition = windowPosition;\n });\n};\n\n/**\n * 検索メニューの表示制御\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setupSearchMenu = ({ searchButtonSelector, searchMenuSelector, closeButtonSelector, menuActiveClass }) => {\n const searchButton = document.querySelector(searchButtonSelector);\n const searchMenu = document.querySelector(searchMenuSelector);\n if (!searchMenu) {\n return;\n }\n const searchCloseButton = searchMenu.querySelector(closeButtonSelector);\n\n if (searchButton) {\n searchButton.addEventListener('click', () => {\n searchMenu.classList.add(menuActiveClass);\n document.body.style.overflow = 'hidden';\n });\n }\n\n if (searchCloseButton) {\n searchCloseButton.addEventListener('click', () => {\n searchMenu.classList.remove(menuActiveClass);\n document.body.style.overflow = 'auto';\n });\n }\n};\n","import {\n setupFloatingButtons,\n setupSearchMenu,\n} from './module/FloatButtonFunctions';\n\n// 設定オブジェクト\nconst config = {\n floatButtonsSelector: '.floatButtons',\n closeButtonSelector: '.floatMenu__closeButton',\n searchButtonSelector: '[data-role=\"float-Button-search\"]',\n searchMenuSelector: '[data-role=\"float-menu-search\"]',\n menuActiveClass: 'floatMenu--active',\n};\n\n// DOMの読み込みが完了したら設定する\nwindow.addEventListener('load', () => {\n // フローティングボタンの設定\n const floatingButtonsConfig = {\n floatButtonsSelector: config.floatButtonsSelector,\n };\n setupFloatingButtons(floatingButtonsConfig);\n\n\n // 検索メニューの設定\n const searchMenuConfig = {\n searchButtonSelector: config.searchButtonSelector,\n searchMenuSelector: config.searchMenuSelector,\n closeButtonSelector: config.closeButtonSelector,\n menuActiveClass: config.menuActiveClass,\n };\n setupSearchMenu(searchMenuConfig);\n\n});\n","/**\n * ハンバーガーメニューのトグル機能を設定する関数\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setupMenuToggle = ({ headerSelector, openButtonSelector, activeClass, breakpoint }) => {\n const header = document.querySelector(headerSelector);\n const headerOpenButton = document.querySelector(openButtonSelector);\n\n if (header && headerOpenButton) {\n headerOpenButton.addEventListener('click', () => {\n header.classList.toggle(activeClass);\n document.body.style.overflow = header.classList.contains(activeClass) ? 'hidden' : '';\n });\n\n const links = header.querySelectorAll('a');\n links.forEach(link => {\n link.addEventListener('click', () => {\n header.classList.remove(activeClass);\n document.body.style.overflow = '';\n });\n });\n\n window.addEventListener('resize', () => {\n if (window.innerWidth > breakpoint && header.classList.contains(activeClass)) {\n header.classList.remove(activeClass);\n document.body.style.overflow = '';\n }\n });\n }\n};\n\n/**\n * 要素の高さを取得して変数として登録\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setElementHeightVariable = ({ selector, variableName }) => {\n const targetSelector = document.querySelector(selector);\n if (targetSelector) {\n const selectorHeight = targetSelector.getBoundingClientRect().height;\n document.documentElement.style.setProperty(variableName, `${selectorHeight}px`);\n }\n};\n\n/**\n * 緊急情報セクションの表示状態を管理し、ユーザーが情報を閉じた場合に関連動作を実行する。\n * この関数は、緊急情報セクションが存在するかを確認し、セクションの開閉状態をセッションストレージを使用して制御します。\n * 緊急情報を閉じるボタンにイベントリスナーを設定し、閉じる動作時に指定されたコールバックを実行します。\n *\n * @param {Object} params - 関数のパラメータを含むオブジェクト。\n * @param {string} params.emergencySelector - 緊急情報セクションのセレクタ。\n * @param {string} params.emergencyDismissKey - セッションストレージに保存される閉じた状態を識別するためのキー。\n * @param {string} params.emergencyDismissValue - セッションストレージで使用される閉じた状態の値。\n * @param {string} params.emergencyCloseButtonSelector - 緊急情報を閉じるボタンのセレクタ。\n * @param {string} params.emergencyDisplayNoneClass - 緊急情報セクションが非表示時に適用されるクラス名。\n * @param {Function} params.onEmergencyChange - 緊急情報の表示状態が変更された際に呼び出されるコールバック関数。\n */\nexport const handleEmergencyInfo = ({\n emergencySelector,\n emergencyDismissKey,\n emergencyDismissValue,\n emergencyCloseButtonSelector,\n emergencyDisplayNoneClass,\n onEmergencyChange,\n}) => {\n const emergencyElement = document.querySelector(emergencySelector);\n\n if (!emergencyElement) return;\n\n const emergencyCloseButtonElement = document.querySelector(emergencyCloseButtonSelector);\n\n const updateVisibility = () => {\n const dismissed = sessionStorage.getItem(emergencyDismissKey) === emergencyDismissValue;\n emergencyElement.classList.toggle(emergencyDisplayNoneClass, dismissed);\n if (!dismissed) onEmergencyChange();\n };\n\n updateVisibility();\n\n if (!emergencyCloseButtonElement) return;\n emergencyCloseButtonElement.addEventListener('click', () => {\n emergencyElement.classList.add(emergencyDisplayNoneClass);\n onEmergencyChange();\n sessionStorage.setItem(emergencyDismissKey, emergencyDismissValue);\n });\n};\n","import { setupMenuToggle, setElementHeightVariable, handleEmergencyInfo } from './module/HeaderFunctions';\n\nconst config = {\n headerSelector: '.header',\n openButtonSelector: '.header__openButton',\n activeClass: 'header--active',\n variableName: '--header-height',\n emergencySelector: '.emergency',\n emergencyDismissKey: 'emergencyInfoDismissed',\n emergencyDismissValue: 'true',\n emergencyCloseButtonSelector: '.emergency__closeButton',\n emergencyDisplayNoneClass: 'emergency--displayNone',\n breakpoint: 1024,\n};\n\nconst heightVariableConfig = {\n selector: config.headerSelector,\n variableName: config.variableName,\n};\n\nconst emergencyConfig = {\n emergencySelector: config.emergencySelector,\n emergencyDismissKey: config.emergencyDismissKey,\n emergencyDismissValue: config.emergencyDismissValue,\n emergencyCloseButtonSelector: config.emergencyCloseButtonSelector,\n emergencyDisplayNoneClass: config.emergencyDisplayNoneClass,\n onEmergencyChange: () => setElementHeightVariable(heightVariableConfig),\n};\n\nconst setUpMenuConfig = {\n headerSelector: config.headerSelector,\n openButtonSelector: config.openButtonSelector,\n activeClass: config.activeClass,\n breakpoint: config.breakpoint,\n};\n\nconst handleResizeAndLoad = () => {\n setElementHeightVariable(heightVariableConfig);\n};\n\ndocument.addEventListener('DOMContentLoaded', () => {\n handleEmergencyInfo(emergencyConfig);\n});\n\nwindow.addEventListener('load', () => {\n setupMenuToggle(setUpMenuConfig);\n handleResizeAndLoad();\n});\n\nwindow.addEventListener('resize', handleResizeAndLoad);\n","import Swiper from 'swiper/bundle';\n\n/**\n * Swiperのオプションを生成する関数。\n * カスタムオプションでデフォルトオプションを上書きする。\n *\n * @param {Object} customOptions - Swiperに適用するカスタムオプション。\n * @param {Object|null} newDefaultOptions - 新しいデフォルトオプション。指定されない場合は、内部で定義されたデフォルトオプションが使用される。\n * @returns {Object} - 結合されたSwiperオプション。\n */\nexport const swiperOptions = (customOptions = {}, newDefaultOptions = null) => {\n const defaultOptions = newDefaultOptions || {\n loop: true,\n autoplay: {\n delay: 5000,\n },\n speed: 3000,\n };\n\n return {\n ...defaultOptions,\n ...customOptions,\n autoplay: {\n ...defaultOptions.autoplay,\n ...customOptions.autoplay\n }\n };\n};\n\n/**\n * 特定の最大幅以下でのみSwiperインスタンスを初期化し、\n * ウィンドウのサイズが変更されたときに適切に応答する関数。\n *\n * @param {string | Element} container - Swiperインスタンスを初期化するコンテナのセレクタまたは要素。\n * @param {Object} options - Swiperインスタンスに適用するオプション。\n * @param {number} maxWidth - Swiperを初期化する最大の画面幅(ピクセル単位)。デフォルトは 768px。\n * @returns {Object} - Swiperインスタンスを破棄するための `destroy` メソッドを含むオブジェクト。\n */\nexport const initResponsiveSwiper = (container, options, maxWidth = 768) => {\n let swiper = null;\n\n const initSwiper = () => {\n if (window.innerWidth <= maxWidth) {\n return new Swiper(container, options);\n }\n return null;\n };\n\n const onResize = () => {\n if (swiper && window.innerWidth > maxWidth) {\n swiper.destroy(true, true);\n swiper = null;\n } else if (!swiper && window.innerWidth <= maxWidth) {\n swiper = initSwiper();\n }\n };\n\n swiper = initSwiper();\n window.addEventListener('resize', onResize);\n\n return {\n destroy: () => {\n if (swiper) {\n swiper.destroy(true, true);\n }\n window.removeEventListener('resize', onResize);\n },\n };\n};\n\n/**\n * ボタンのスタイルをSwiperのautoplay状態に基づいて更新する関数\n *\n * @param {boolean} isAutoplayRunning - Swiperのautoplayが実行中かどうかを示すブール値。\n * @param {HTMLElement} buttonElement - 停止ボタンの要素。\n */\nconst updateButtonState = (isAutoplayRunning, buttonElement) => {\n if (isAutoplayRunning) {\n buttonElement.classList.remove('u-snsButton--stop');\n buttonElement.classList.add('u-snsButton--start');\n } else {\n buttonElement.classList.remove('u-snsButton--start');\n buttonElement.classList.add('u-snsButton--stop');\n }\n};\n\n/**\n * Swiperのautoplayをトグルするイベントリスナーを設定する関数。\n * Swiperのautoplay状態に基づいて、指定されたボタンのスタイルを切り替える。\n *\n * @param {HTMLElement} buttonElement - クリックイベントを設定するボタン要素。\n * @param {Swiper} swiperInstance - 制御するSwiperインスタンス。\n */\nexport const toggleSwiperAutoplay = (buttonElement, swiperInstance) => {\n if (buttonElement) {\n // ボタンの初期状態を設定\n updateButtonState(swiperInstance.autoplay.running, buttonElement);\n\n // ボタンクリックイベントの設定\n buttonElement.addEventListener('click', function () {\n if (swiperInstance.autoplay.running) {\n swiperInstance.autoplay.stop();\n } else {\n swiperInstance.autoplay.start();\n }\n });\n\n // Swiperのautoplay状態変更イベントの設定\n swiperInstance.on('autoplayStart', () => updateButtonState(true, buttonElement));\n swiperInstance.on('autoplayStop', () => updateButtonState(false, buttonElement));\n }\n};\n","const getTargetElement = (href) => {\n const [targetUrl, targetId] = href.split('#');\n return { targetUrl, targetId };\n};\n\nconst getCurrentUrl = () => window.location.pathname;\n\nconst getHeaderHeight = (headerSelector) => document.querySelector(headerSelector).offsetHeight;\n\nconst getTargetPosition = (targetElement, headerHeight) => \n targetElement.getBoundingClientRect().top + window.scrollY - headerHeight;\n\nconst scrollToPosition = (position) => {\n window.scrollTo({\n top: position,\n behavior: 'smooth',\n });\n};\n\nconst handleElementClick = (event, element, headerSelector) => {\n const { targetUrl, targetId } = getTargetElement(element.getAttribute('href'));\n const currentUrl = getCurrentUrl();\n\n if ((targetUrl === currentUrl) || !targetUrl) {\n event.preventDefault();\n const targetElement = document.getElementById(targetId);\n const headerHeight = getHeaderHeight(headerSelector);\n\n if (targetElement) {\n const targetPosition = getTargetPosition(targetElement, headerHeight);\n scrollToPosition(targetPosition);\n\n // URLを変更する\n const newUrl = `${window.location.pathname}#${targetId}`;\n history.pushState(null, '', newUrl);\n }\n }\n};\n\nconst setupEventListeners = (elements, headerSelector) => {\n elements.forEach((element) => {\n element.addEventListener('click', (event) => handleElementClick(event, element, headerSelector));\n });\n};\n\nconst scrollToAnchorInUrl = (headerSelector) => {\n const url = window.location.href;\n\n if (url.indexOf('#') !== -1) {\n const anchor = url.split('#');\n const target = document.getElementById(anchor[anchor.length - 1]);\n const headerHeight = getHeaderHeight(headerSelector);\n\n if (target) {\n const position = Math.floor(target.getBoundingClientRect().top + window.scrollY) - headerHeight;\n scrollToPosition(position);\n }\n }\n};\n\n/**\n * 特定の要素へスムーススクロールする関数\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setupSmoothScroll = ({ scrollToSelector, headerSelector }) => {\n const scrollToElements = document.querySelectorAll(scrollToSelector);\n setupEventListeners(scrollToElements, headerSelector);\n scrollToAnchorInUrl(headerSelector);\n};\n\n\n/**\n * トップへ戻るボタンの表示をトグルする関数\n * @param {Object} config - 構成設定オブジェクト\n */\nexport const setupScrollTopButton = ({ scrollTopButtonSelector, activeClass }) => {\n const scrollTopButton = document.querySelector(scrollTopButtonSelector);\n if (scrollTopButton) {\n const toggleButtonVisibility = () => {\n if (window.scrollY > 70) {\n scrollTopButton.classList.add(activeClass);\n } else {\n scrollTopButton.classList.remove(activeClass);\n }\n };\n\n toggleButtonVisibility();\n window.addEventListener('scroll', toggleButtonVisibility);\n scrollTopButton.addEventListener('click', () => {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n });\n }\n};\n","import { setupScrollTopButton, setupSmoothScroll } from './module/ScrollFunctions';\n\n// ページの設定オブジェクト\nconst config = {\n scrollToSelector: '[data-role=\"scroll-to-element\"]',\n headerSelector: '.header',\n scrollTopButtonSelector: '.u-scrollToTop',\n activeClass: 'active',\n};\n\nwindow.addEventListener('load', () => {\n // スムーススクロールの設定\n const smoothScrollConfig = {\n scrollToSelector: config.scrollToSelector,\n headerSelector: config.headerSelector,\n };\n setupSmoothScroll(smoothScrollConfig);\n\n // トップへ戻るボタンの設定\n const scrollTopButtonConfig = {\n scrollTopButtonSelector: config.scrollTopButtonSelector,\n activeClass: config.activeClass,\n };\n setupScrollTopButton(scrollTopButtonConfig);\n});\n","/**\n * 指定されたテンプレートのコンテンツを表示領域に表示する。\n * @param {string} templateId - 表示するコンテンツのテンプレート要素のID。\n * @param {string} displaySelector - コンテンツを表示する領域のセレクタ。\n */\nconst displayContent = (templateId, displaySelector) => {\n const template = document.getElementById(templateId);\n const contentDisplay = document.getElementById(displaySelector);\n contentDisplay.innerHTML = '';\n const clone = document.importNode(template.content, true);\n contentDisplay.appendChild(clone);\n};\n\n/**\n * 指定されたタブをアクティブにし、他のタブを非アクティブにする。\n * @param {string} activeTabId - アクティブにするタブのID。\n * @param {NodeList} tabButtons - 全タブボタンのNodeList。\n * @param {string} activeClass - アクティブなタブに適用するクラス名。\n */\nconst setActiveTab = (activeTabId, tabButtons, activeClass) => {\n tabButtons.forEach(button => {\n button.classList.toggle(activeClass, button.id === activeTabId);\n });\n};\n\n/**\n * 指定されたタブのコンテンツを表示し、タブをアクティブにする。任意の追加処理がある場合は実行する。\n * @param {string} activeTabId - アクティブにするタブのID。\n * @param {string} displaySelector - コンテンツを表示する領域のセレクタ。\n * @param {string} templateSuffix - テンプレートIDの接尾辞。\n * @param {string} activeClass - アクティブなタブに適用するクラス名。\n * @param {NodeList} tabButtons - 全タブボタンのNodeList。\n * @param {Function} [callback] - タブ切り替え後に実行する任意の追加処理の関数。\n */\nconst switchTab = (activeTabId, displaySelector, templateSuffix, activeClass, tabButtons, callback) => {\n displayContent(`${activeTabId}-${templateSuffix}`, displaySelector);\n setActiveTab(activeTabId, tabButtons, activeClass);\n\n // コールバック関数が提供されていれば実行\n if (typeof callback === 'function') {\n callback();\n }\n};\n\n/**\n * タブボタンにイベントリスナーを設定し、クリック時にタブの切り替えを行う。\n * @param {NodeList} tabButtons - 全タブボタンのNodeList。\n * @param {string} displaySelector - コンテンツを表示する領域のセレクタ。\n * @param {string} templateSuffix - テンプレートIDの接尾辞。\n * @param {string} activeClass - アクティブなタブに適用するクラス名。\n * @param {Function} [callback] - タブ切り替え後に実行する任意の追加処理の関数。\n */\nconst setupTabListeners = (tabButtons, displaySelector, templateSuffix, activeClass, callback) => {\n tabButtons.forEach(button => {\n button.addEventListener('click', () => switchTab(button.id, displaySelector, templateSuffix, activeClass, tabButtons, callback));\n });\n};\n\n/**\n * タブ機能を初期化する。最初のタブをアクティブにし、全タブボタンにイベントリスナーを設定する。\n * @param {string} tabButtonSelector - タブボタンを選択するセレクタ。\n * @param {string} displaySelector - コンテンツを表示する領域のセレクタ。\n * @param {string} templateSuffix - テンプレートIDの接尾辞。\n * @param {string} activeClass - アクティブなタブに適用するクラス名。\n * @param {Function} [callback] - タブ切り替え後に実行する任意の追加処理の関数。\n */\nexport const initTabs = (tabButtonSelector, displaySelector, templateSuffix, activeClass, callback) => {\n const tabButtons = document.querySelectorAll(tabButtonSelector);\n setupTabListeners(tabButtons, displaySelector, templateSuffix, activeClass, callback);\n\n // 初期表示のタブを設定\n if (tabButtons.length > 0) {\n switchTab(tabButtons[0].id, displaySelector, templateSuffix, activeClass, tabButtons, callback);\n }\n};\n","import Swiper from 'swiper/bundle';\nimport { swiperOptions } from './module/SwiperFunctions';\nimport { initTabs } from './module/TabFunctions';\nimport imageMapResize from 'image-map-resizer';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport $ from 'jquery';\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // main view\n if (document.querySelector('.mainView__swiper')) {\n // サムネイル\n const sliderThumbnail = new Swiper('.mainView__swiperThumbs', {\n slidesPerView: 3.3, // サムネイルの枚数\n spaceBetween: 16,\n });\n\n new Swiper(\n '.mainView__swiper',\n swiperOptions({\n slidesPerView: 1,\n spaceBetween: 20,\n navigation: {\n nextEl: '.u-swiperButton--next',\n prevEl: '.u-swiperButton--prev',\n },\n pagination: {\n el: '.u-swiperPagination',\n bulletClass: 'u-swiperPaginationBullet',\n bulletActiveClass: 'u-swiperPaginationBullet--active',\n clickable: true,\n },\n thumbs: {\n swiper: sliderThumbnail,\n },\n })\n );\n }\n\n // pick up\n if (document.querySelector('.topPickUp__swiper')) {\n new Swiper(\n '.topPickUp__swiper',\n swiperOptions({\n slidesPerView: 1.2,\n spaceBetween: 20,\n navigation: {\n nextEl: '.topPickUp .u-articleSwiperButton--next',\n prevEl: '.topPickUp .u-articleSwiperButton--prev',\n },\n breakpoints: {\n 768: {\n slidesPerView: 'auto',\n spaceBetween: 32,\n },\n },\n })\n );\n }\n});\n\nwindow.addEventListener('load', () => {\n // seasonal\n // swiper\n let seasonalSwiper = null;\n\n const setSeasonalSwiper = () => {\n const seasonalSwiperElement = document.querySelector('.topSeasonal__swiper');\n if (seasonalSwiperElement) {\n if (seasonalSwiper) {\n // 前のSwiperインスタンスを削除\n seasonalSwiper.destroy(true, true);\n }\n\n seasonalSwiper = new Swiper(\n seasonalSwiperElement,\n swiperOptions({\n loop: false,\n slidesPerView: 'auto',\n spaceBetween: 28,\n watchOverflow: true,\n navigation: {\n nextEl: '.topSeasonal__swiperButton_next',\n prevEl: '.topSeasonal__swiperButton_prev',\n },\n })\n );\n }\n };\n\n // tab\n initTabs(\n '.topSeasonal__tabButton',\n 'content-display',\n 'content',\n 'topSeasonal__tabButton--active',\n setSeasonalSwiper\n );\n initTabs(\n '.topSeasonal__tabButton',\n 'seasonal-image-display',\n 'image',\n 'topSeasonal__tabButton--active',\n setSeasonalSwiper\n );\n\n // rankingセクション\n // tab\n initTabs('[data-role=\"top-ranking-button\"]', 'top-ranking-content-display', 'template', 'dualTab__button--active');\n\n // newsセクション\n // tab\n initTabs('[data-role=\"top-news-button\"]', 'top-news-content-display', 'template', 'dualTab__button--active');\n\n // AI協調フィルタリング\n const aiRecommend = document.querySelector('#top-ranking-ai');\n if (aiRecommend) {\n $.ajax({\n url: '/recommends?id=top-ai-recommend&data_type=top',\n beforeSend(xhr) {\n xhr.setRequestHeader('X-CSRF-Token', $('meta[name=\"csrf-token\"]').attr('content'));\n },\n type: 'GET',\n timeout: 5000,\n });\n }\n\n // エリアマップセクション\n if (document.querySelector('.topArea__swiper')) {\n // アクティブなスライダーに対応する地図の更新処理を関数として定義\n const updateMapForActiveSlide = (swiperInstance) => {\n const activeSlideAreaId = swiperInstance.slides[swiperInstance.activeIndex].getAttribute('data-area-id');\n\n document.querySelectorAll('.topArea__areaMapImage').forEach((image) => {\n if (image.id === activeSlideAreaId) {\n image.classList.add('checked'); // 対応する地図画像に .checked クラスを付与\n } else {\n image.classList.remove('checked'); // 他の画像からは .checked クラスを削除\n }\n });\n };\n\n // Swiperの初期化\n const topAreaSwiper = new Swiper(\n '.topArea__swiper',\n swiperOptions({\n slidesPerView: 1,\n spaceBetween: 28,\n navigation: {\n nextEl: '.topArea__swiperButtonNext',\n prevEl: '.topArea__swiperButtonPrev',\n },\n on: {\n init: function () {\n updateMapForActiveSlide(this); // 初期化時にも対応する地図を更新\n },\n slideChange: function () {\n updateMapForActiveSlide(this); // スライドが変更された時も更新\n },\n },\n })\n );\n\n // タグのクリックイベントリスナーを設定\n document.querySelectorAll('area').forEach((area) => {\n area.addEventListener('click', (e) => {\n e.preventDefault(); // デフォルトの動作を防止\n const areaId = area.getAttribute('data-area-id');\n\n // 対応する地図に.checkedクラスを付与し、他を削除\n document.querySelectorAll('.topArea__areaMapImage').forEach((image) => {\n if (image.id === areaId) {\n image.classList.add('checked');\n } else {\n image.classList.remove('checked');\n }\n });\n\n // 対応するスライダーのインデックスを見つける\n const targetIndex = Array.from(document.querySelectorAll('.swiper-slide[data-area-id]')).findIndex(\n (slide) => slide.getAttribute('data-area-id') === areaId\n );\n\n if (targetIndex !== -1) {\n topAreaSwiper.slideTo(targetIndex); // 対応するスライドに移動\n }\n });\n });\n }\n\n // News最新情報が表示される直前にイベント情報取非同期処理のクリックイベントを登録\n const targetElement = document.querySelector('.top__news');\n if (targetElement) {\n const observer = new IntersectionObserver(\n () => {\n const topEventsTabElement = document.querySelector('#top-news-event-template');\n if (topEventsTabElement) {\n const eventsElement = document.getElementById('top-news-event');\n eventsElement.addEventListener('click', () => {\n $.ajax({\n url: '/top_events',\n beforeSend(xhr) {\n xhr.setRequestHeader('X-CSRF-Token', $('meta[name=\"csrf-token\"]').attr('content'));\n },\n type: 'GET',\n timeout: 5000,\n });\n });\n }\n observer.disconnect();\n },\n {\n root: null, // ビューポート\n rootMargin: '30% 0px', // 交差していると判断する領域の拡大\n threshold: [0], // 2割、4割、8割交差したときのみ検出する(デフォルトは0)\n }\n );\n\n // 監視を開始\n observer.observe(targetElement);\n }\n\n imageMapResize();\n});\n"],"names":["config","consentPopupId","consentButtonId","consentKey","displayClass","window","addEventListener","setupCookieConsent","consentPopup","document","getElementById","acceptButton","localStorage","getItem","classList","add","setItem","remove","setupFloatingButtons","floatButtonsSelector","floatButtons","querySelector","windowPosition","startPosition","scrollY","setupSearchMenu","searchButtonSelector","searchMenuSelector","closeButtonSelector","menuActiveClass","searchButton","searchMenu","searchCloseButton","body","style","overflow","setElementHeightVariable","selector","variableName","targetSelector","selectorHeight","getBoundingClientRect","height","documentElement","setProperty","heightVariableConfig","emergencyConfig","emergencySelector","emergencyDismissKey","emergencyDismissValue","emergencyCloseButtonSelector","emergencyDisplayNoneClass","onEmergencyChange","setUpMenuConfig","headerSelector","openButtonSelector","activeClass","breakpoint","handleResizeAndLoad","handleEmergencyInfo","emergencyElement","emergencyCloseButtonElement","updateVisibility","dismissed","sessionStorage","toggle","setupMenuToggle","header","headerOpenButton","contains","querySelectorAll","forEach","link","innerWidth","swiperOptions","customOptions","newDefaultOptions","defaultOptions","loop","autoplay","delay","speed","initResponsiveSwiper","container","options","maxWidth","swiper","initSwiper","Swiper","onResize","destroy","removeEventListener","getHeaderHeight","offsetHeight","scrollToPosition","position","scrollTo","top","behavior","handleElementClick","event","element","targetUrl","targetId","href","split","getTargetElement","getAttribute","location","pathname","preventDefault","targetElement","headerHeight","targetPosition","getTargetPosition","newUrl","history","pushState","setupSmoothScroll","scrollToSelector","setupEventListeners","elements","url","indexOf","anchor","target","length","Math","floor","scrollToAnchorInUrl","setupScrollTopButton","scrollTopButtonSelector","scrollTopButton","toggleButtonVisibility","switchTab","activeTabId","displaySelector","templateSuffix","tabButtons","callback","displayContent","templateId","template","contentDisplay","innerHTML","clone","importNode","content","appendChild","setActiveTab","button","id","initTabs","tabButtonSelector","setupTabListeners","sliderThumbnail","slidesPerView","spaceBetween","navigation","nextEl","prevEl","pagination","el","bulletClass","bulletActiveClass","clickable","thumbs","breakpoints","seasonalSwiper","setSeasonalSwiper","seasonalSwiperElement","watchOverflow","$","beforeSend","xhr","setRequestHeader","attr","type","timeout","updateMapForActiveSlide","swiperInstance","activeSlideAreaId","slides","activeIndex","image","topAreaSwiper","on","init","this","slideChange","area","e","areaId","targetIndex","Array","from","findIndex","slide","slideTo","observer","IntersectionObserver","disconnect","root","rootMargin","threshold","observe","imageMapResize"],"sourceRoot":""}