{"version":3,"file":"./assets/js/app.js","mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACvxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACtYA;AACA;AAEA;AACA;AADA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAGA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtCA;;AACA;AACA;AAAA;;AACA;AACA;AACA;AACA;AAGA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AAEA;AACA;AACA;AAEA;AACA;;;;AAEA;AAAA;;AACA;AAGA;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAJA;AAAA;;AAAA;AAKA;AAAA;;AACA;AACA;AACA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;;AAUA;AACA;AACA;AACA;AACA;AACA;;AAJA;AAAA;;AAAA;AAKA;AAAA;;AACA;AACA;AACA;AACA;AATA;AAAA;AAAA;AAAA;AAAA;;AAUA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;;AAEA;AACA;;;AAEA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAIA;AACA;;;AAEA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AAGA;AADA;AAIA;AACA;AACA;AACA;AAJA;AAOA;;;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AAAA;;AACA;AAIA;AACA;AACA;AACA;AAHA;AAMA;AACA;AACA;AACA;;;AAEA;AACA;;AACA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClLA;AACA;AAEA;AACA;AACA;;AAEA;AACA;AAAA;;AACA;AACA;;AAGA;AAEA;AACA;;;;AAEA;AACA;AACA;;AAIA;AACA;;;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;;;;AAEA;AAAA;;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AAEA;;AAGA;AAIA;;AACA;AACA;AACA;AAAA;AACA;;AAjBA;;AAAA;AAoBA;AAAA;AACA;;AArBA;AAAA;AAAA;AAAA;AAAA;;AAwBA;AAAA;AAAA;;AAGA;AACA;AAAA;AACA;AAAA;;AAGA;AAAA;AAAA;;AAhCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;AAmCA;AACA;AACA;AACA;AAEA;AAAA;;AAKA;;AAGA;;AAGA;AAAA;AAAA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5FA;;AACA;AACA;AAAA;;AACA;AAEA;AACA;;;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBA;AACA;AAAA;;AACA;AACA;AAIA;AAEA;AACA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;;AACA;;AACA;AAAA;AAAA;;AAKA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AAAA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AAAA;;AACA;AACA;AADA;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;;AAdA;AAAA;AAAA;;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;AAEA;;AAJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhBA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAwBA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAKA;AAEA;AACA;AACA;AACA;;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxBA;AAAA;AAqCA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5GA;;AAEA;AACA;AAAA;;AACA;AACA;AACA;;;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA;;AACA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AAAA;;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AALA;AAQA;AACA;AACA;AACA;;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAGA;AAEA;AACA;AACA;;AAEA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzHA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AACA;;AAEA;AACA;;;AAEA;AAAA;;AACA;AACA;;AAEA;;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;;;AAEA;AAAA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AAFA;AAIA;;;AAEA;AAAA;;AACA;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;;;AAEA;AACA;AACA;;;AAEA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;;AAEA;;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;;AACA;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAAA;;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;AACA;AACA;;AAEA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AAAA;;AACA;AACA;AACA;AAGA;AACA;;;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;;;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AACA;;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AATA;AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;;AAEA;AAAA;;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AAIA;AACA;;AACA;AACA;AACA;AACA;AAEA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1EA;AACA;;AACA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;;AAEA;;;AAEA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAGA;AACA;;;;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjGA;AACA;AACA;AACA;;AAEA;AACA;AAAA;;AACA;;AAMA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;;;AAEA;AACA;AAAA;AAAA;AAGA;;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;AAEA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AAtBA;AAwBA;;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AADA;AAXA;AAiBA;;;AAEA;AACA;AACA;AACA;AACA;AAFA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA;AADA;AAJA;AAXA;AAmBA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAFA;AADA;AAXA;AAkBA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;AAWA;;;AAEA;AACA;;AACA;AACA;AACA;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAJA;AAMA;AACA;AACA;AAFA;AAPA;AAdA;AA2BA;;;AAEA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAXA;AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7NA;AACA;AACA;AACA;;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;AACA;AACA;;;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AAFA;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;;AACA;AACA;AAEA;AAAA;AAAA;;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAIA;;;;;;;;;;;;ACpBA;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AAEA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAGA;AACA;AACA;;AACA;AACA;AAAA;;AACA;AACA;AACA;AACA;;;;AAEA;AAAA;;AACA;AAEA;AACA;;AAEA;;AAMA;AACA;AACA;AACA;;AAGA;AAEA;AACA;;;AAEA;AACA;AACA;AACA;;;AAEA;AACA;AAGA;;;;;AAGA;;;AACA;AAEA;AACA","sources":["webpack://project-template-webpack/./node_modules/@jamestomasino/scroll-frame/index.js","webpack://project-template-webpack/./node_modules/@splidejs/splide-extension-auto-scroll/dist/js/splide-extension-auto-scroll.esm.js","webpack://project-template-webpack/./node_modules/@splidejs/splide/dist/js/splide.esm.js","webpack://project-template-webpack/./node_modules/a11y-dialog/dist/a11y-dialog.esm.js","webpack://project-template-webpack/./src/components/a11y-dialog/a11y-dialog.js","webpack://project-template-webpack/./src/components/accordion/accordion.js","webpack://project-template-webpack/./src/components/alert/alert.js","webpack://project-template-webpack/./src/components/app.js","webpack://project-template-webpack/./src/components/grid-iframe/iframe-component.js","webpack://project-template-webpack/./src/components/grid-picker/grid-picker.js","webpack://project-template-webpack/./src/components/grid-video/grid-video.js","webpack://project-template-webpack/./src/components/header/header.js","webpack://project-template-webpack/./src/components/hero-video/hero-video.js","webpack://project-template-webpack/./src/components/hero/hero.js","webpack://project-template-webpack/./src/components/masonry/masonry.js","webpack://project-template-webpack/./src/components/modal/modal.js","webpack://project-template-webpack/./src/components/navigation/navigation.js","webpack://project-template-webpack/./src/components/poster-form/poster-form.js","webpack://project-template-webpack/./src/components/reviews/reviews.js","webpack://project-template-webpack/./src/components/richtext/richtext.js","webpack://project-template-webpack/./src/components/scroll-to/scroll-to.js","webpack://project-template-webpack/./src/components/splide/splide.js","webpack://project-template-webpack/./src/components/starring/starring.js","webpack://project-template-webpack/./src/consts/const-event-types.js","webpack://project-template-webpack/./src/services/service-cookies.js","webpack://project-template-webpack/./src/services/service-utils.js","webpack://project-template-webpack/./src/index.css","webpack://project-template-webpack/./node_modules/regenerator-runtime/runtime.js","webpack://project-template-webpack/./node_modules/withinviewport/withinviewport.js","webpack://project-template-webpack/./node_modules/supports-webp/index.js","webpack://project-template-webpack/webpack/bootstrap","webpack://project-template-webpack/webpack/runtime/compat get default export","webpack://project-template-webpack/webpack/runtime/define property getters","webpack://project-template-webpack/webpack/runtime/hasOwnProperty shorthand","webpack://project-template-webpack/webpack/runtime/make namespace object","webpack://project-template-webpack/./src/index.js"],"sourcesContent":["function scrollFrame() {\n let animationFrame = window.requestAnimationFrame(loop)\n let callbackCollection = []\n let lastY = -1\n let lastX = -1\n\n /**\n * Object that holds a callback function and data about how to handle it\n *\n * @param {function} func The callback function\n * @param {boolean} breakOnError If callback function throws an error, remove from scroll listener\n */\n function Callback(func, breakOnError) {\n this.func = func\n this.breakOnError = breakOnError\n }\n\n /**\n * Determines if scroll has occurred and callbacks exist to initiate a trigger\n */\n function loop () {\n // Only process checks if callback exists\n if (callbackCollection.length) {\n // Only process loop if we are scrolling\n const y = window.pageYOffset\n const x = window.pageXOffset\n switch (false) {\n case (y === lastY):\n case (x === lastX):\n lastY = y\n lastX = x\n trigger()\n }\n }\n animationFrame = window.requestAnimationFrame(loop)\n }\n\n /**\n * Fire all callback functions in the callback collection\n */\n function trigger() {\n // Reverse while loop is safer when potentially removing elements from array\n let i=callbackCollection.length\n while(i--) {\n // callback functions are external and could be problematic\n const callback = callbackCollection[i]\n try {\n callback.func()\n } catch (err) {\n if (callback.breakOnError) {\n removeScrollListener(callback.func)\n } else {\n // pass through error otherwise\n throw err\n }\n }\n }\n }\n\n /**\n * Test if callback collection contains a reference to the supplied callback function\n *\n * @param {function} func The function to test for presence in the collection\n * @return {boolean} true if found, false if not found\n */\n function contains(func) {\n return callbackCollection.length && callbackCollection.reduce((prev, callback) => {\n prev || func === callback.func\n }, false)\n }\n\n /**\n * Binds a callback function to the scroll listener\n *\n * @param {function} func The callback function to trigger on scroll\n * @param {boolean} breakOnError If callback function throws an error, remove from scroll listener\n */\n function addScrollListener(func, breakOnError = false) {\n // Only allow a single instance of a callback function\n if (!contains(func)) {\n // Only allow functions as callbackCollection\n if (typeof func === 'function') {\n callbackCollection.push(new Callback(func, breakOnError))\n }\n }\n }\n\n /**\n * Remove a callback function from the scroll listener\n *\n * @param {function} func The callback function to remove from the scroll listener\n */\n function removeScrollListener(func) {\n let i=callbackCollection.length\n while(i--) {\n if (callbackCollection[i].func === func) {\n callbackCollection.splice(i, 1)\n break\n }\n }\n }\n\n return { addScrollListener, removeScrollListener }\n}\n\nmodule.exports = scrollFrame()\n","/*!\n * @splidejs/splide-extension-auto-scroll\n * Version : 0.3.7\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\n// node_modules/@splidejs/splide/dist/js/splide.esm.js\nfunction isArray(subject) {\n return Array.isArray(subject);\n}\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_DESTROY = \"destroy\";\nfunction EventInterface(Splide22) {\n const { event } = Splide22;\n const key = {};\n let listeners = [];\n function on(events, callback, priority) {\n event.on(events, callback, key, priority);\n }\n function off(events) {\n event.off(events, key);\n }\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, (target, event2) => {\n listeners.push([target, event2, callback, options]);\n target.addEventListener(event2, callback, options);\n });\n }\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, (target, event2) => {\n listeners = listeners.filter((listener) => {\n if (listener[0] === target && listener[1] === event2 && (!callback || listener[2] === callback)) {\n target.removeEventListener(event2, listener[2], listener[3]);\n return false;\n }\n return true;\n });\n });\n }\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, (target) => {\n if (target) {\n events.split(\" \").forEach(iteratee.bind(null, target));\n }\n });\n }\n function destroy() {\n listeners = listeners.filter((data) => unbind(data[0], data[1]));\n event.offBy(key);\n }\n event.on(EVENT_DESTROY, destroy, key);\n return {\n on,\n off,\n emit: event.emit,\n bind,\n unbind,\n destroy\n };\n}\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n const { now } = Date;\n let startTime;\n let rate = 0;\n let id;\n let paused = true;\n let count = 0;\n function update() {\n if (!paused) {\n const elapsed = now() - startTime;\n if (elapsed >= interval) {\n rate = 1;\n startTime = now();\n } else {\n rate = elapsed / interval;\n }\n if (onUpdate) {\n onUpdate(rate);\n }\n if (rate === 1) {\n onInterval();\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n raf(update);\n }\n }\n function start(resume) {\n !resume && cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n raf(update);\n }\n function pause() {\n paused = true;\n }\n function rewind() {\n startTime = now();\n rate = 0;\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n function cancel() {\n cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n function set(time) {\n interval = time;\n }\n function isPaused() {\n return paused;\n }\n return {\n start,\n rewind,\n pause,\n cancel,\n set,\n isPaused\n };\n}\n\n// node_modules/@splidejs/splide/src/js/constants/types.ts\nvar SLIDE2 = \"slide\";\n\n// node_modules/@splidejs/splide/src/js/utils/type/type.ts\nfunction isObject2(subject) {\n return !isNull2(subject) && typeof subject === \"object\";\n}\nfunction isUndefined2(subject) {\n return typeof subject === \"undefined\";\n}\nfunction isNull2(subject) {\n return subject === null;\n}\n\n// node_modules/@splidejs/splide/src/js/utils/array/index.ts\nvar arrayProto2 = Array.prototype;\n\n// node_modules/@splidejs/splide/src/js/utils/arrayLike/slice/slice.ts\nfunction slice2(arrayLike, start, end) {\n return arrayProto2.slice.call(arrayLike, start, end);\n}\n\n// node_modules/@splidejs/splide/src/js/utils/object/forOwn/forOwn.ts\nfunction forOwn2(object, iteratee, right) {\n if (object) {\n let keys = Object.keys(object);\n keys = right ? keys.reverse() : keys;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \"__proto__\") {\n if (iteratee(object[key], key) === false) {\n break;\n }\n }\n }\n }\n return object;\n}\n\n// node_modules/@splidejs/splide/src/js/utils/object/assign/assign.ts\nfunction assign2(object) {\n slice2(arguments, 1).forEach((source) => {\n forOwn2(source, (value, key) => {\n object[key] = source[key];\n });\n });\n return object;\n}\n\n// node_modules/@splidejs/splide/src/js/utils/math/math/math.ts\nvar { min: min2, max: max2, floor: floor2, ceil: ceil2, abs: abs2 } = Math;\n\n// node_modules/@splidejs/splide/src/js/utils/math/clamp/clamp.ts\nfunction clamp2(number, x, y) {\n const minimum = min2(x, y);\n const maximum = max2(x, y);\n return min2(max2(minimum, number), maximum);\n}\n\n// src/js/constants/defaults.ts\nvar DEFAULTS2 = {\n speed: 1,\n autoStart: true,\n pauseOnHover: true,\n pauseOnFocus: true\n};\n\n// src/js/extensions/AutoScroll/AutoScroll.ts\nfunction AutoScroll(Splide3, Components2, options) {\n const { on, off, bind, unbind } = EventInterface(Splide3);\n const { translate, getPosition, toIndex, getLimit } = Components2.Move;\n const { setIndex, getIndex } = Components2.Controller;\n const { orient } = Components2.Direction;\n const { root } = Splide3;\n let autoScrollOptions = {};\n let interval;\n let paused;\n let hovered;\n let focused;\n let busy;\n let currPosition;\n function setup() {\n const { autoScroll } = options;\n autoScrollOptions = assign2({}, DEFAULTS2, isObject2(autoScroll) ? autoScroll : {});\n }\n function mount() {\n if (!interval && options.autoScroll !== false) {\n interval = RequestInterval(0, move);\n listen();\n autoStart();\n }\n }\n function destroy() {\n if (interval) {\n interval.cancel();\n interval = null;\n currPosition = void 0;\n off([EVENT_MOVE, EVENT_DRAG, EVENT_SCROLL, EVENT_MOVED, EVENT_SCROLLED]);\n unbind(root, \"mouseenter mouseleave focusin focusout\");\n }\n }\n function listen() {\n if (autoScrollOptions.pauseOnHover) {\n bind(root, \"mouseenter mouseleave\", (e) => {\n hovered = e.type === \"mouseenter\";\n autoToggle();\n });\n }\n if (autoScrollOptions.pauseOnFocus) {\n bind(root, \"focusin focusout\", (e) => {\n focused = e.type === \"focusin\";\n autoToggle();\n });\n }\n on(EVENT_UPDATED, update);\n on([EVENT_MOVE, EVENT_DRAG, EVENT_SCROLL], () => {\n busy = true;\n pause(false);\n });\n on([EVENT_MOVED, EVENT_SCROLLED], () => {\n busy = false;\n autoToggle();\n });\n }\n function update() {\n const { autoScroll } = options;\n if (autoScroll !== false) {\n autoScrollOptions = assign2(autoScrollOptions, isObject2(autoScroll) ? autoScroll : {});\n mount();\n } else {\n destroy();\n }\n if (interval && !isUndefined2(currPosition)) {\n translate(currPosition);\n }\n }\n function autoStart() {\n if (autoScrollOptions.autoStart) {\n if (document.readyState === \"complete\") {\n play();\n } else {\n bind(window, \"load\", play);\n }\n }\n }\n function play() {\n if (interval && interval.isPaused()) {\n interval.start(true);\n }\n }\n function pause(manual = true) {\n if (interval && !interval.isPaused()) {\n interval.pause();\n }\n paused = manual;\n }\n function autoToggle() {\n if (!paused) {\n if (!hovered && !focused && !busy) {\n play();\n } else {\n pause(false);\n }\n }\n }\n function move() {\n const position = getPosition();\n const destination = computeDestination(position);\n if (position !== destination) {\n translate(destination);\n updateIndex(destination);\n currPosition = destination;\n } else {\n pause(false);\n if (autoScrollOptions.rewind) {\n Splide3.go(0);\n }\n }\n }\n function computeDestination(position) {\n const speed = autoScrollOptions.speed || 1;\n position += orient(speed);\n if (Splide3.is(SLIDE2)) {\n position = clamp2(position, getLimit(false), getLimit(true));\n }\n return position;\n }\n function updateIndex(position) {\n const { length } = Splide3;\n const index = (toIndex(position) + length) % length;\n if (index !== getIndex()) {\n setIndex(index);\n Components2.Slides.update();\n Components2.Pagination.update();\n }\n }\n return {\n setup,\n mount,\n destroy,\n play,\n pause\n };\n}\n/*!\n * Splide.js\n * Version : 3.6.11\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\n\nexport { AutoScroll };\n","/*!\n * Splide.js\n * Version : 3.6.12\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nconst PROJECT_CODE = \"splide\";\nconst DATA_ATTRIBUTE = `data-${PROJECT_CODE}`;\n\nconst CREATED = 1;\nconst MOUNTED = 2;\nconst IDLE = 3;\nconst MOVING = 4;\nconst DESTROYED = 5;\nconst STATES = {\n CREATED,\n MOUNTED,\n IDLE,\n MOVING,\n DESTROYED\n};\n\nconst DEFAULT_EVENT_PRIORITY = 10;\nconst DEFAULT_USER_EVENT_PRIORITY = 20;\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeof subject === \"object\";\n}\nfunction isArray(subject) {\n return Array.isArray(subject);\n}\nfunction isFunction(subject) {\n return typeof subject === \"function\";\n}\nfunction isString(subject) {\n return typeof subject === \"string\";\n}\nfunction isUndefined(subject) {\n return typeof subject === \"undefined\";\n}\nfunction isNull(subject) {\n return subject === null;\n}\nfunction isHTMLElement(subject) {\n return subject instanceof HTMLElement;\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push(...toArray(items));\n return array;\n}\n\nconst arrayProto = Array.prototype;\n\nfunction slice(arrayLike, start, end) {\n return arrayProto.slice.call(arrayLike, start, end);\n}\n\nfunction find(arrayLike, predicate) {\n return slice(arrayLike).filter(predicate)[0];\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, (name) => {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, (node) => {\n const parent = ref.parentNode;\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n return parent ? slice(parent.children).filter((child) => matches(child, selector)) : [];\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n let keys = Object.keys(object);\n keys = right ? keys.reverse() : keys;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key !== \"__proto__\") {\n if (iteratee(object[key], key) === false) {\n break;\n }\n }\n }\n }\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach((source) => {\n forOwn(source, (value, key) => {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object, source) {\n forOwn(source, (value, key) => {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge(isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n return object;\n}\n\nfunction removeAttribute(elm, attrs) {\n if (elm) {\n forEach(attrs, (attr) => {\n elm.removeAttribute(attr);\n });\n }\n}\n\nfunction setAttribute(elm, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, (value2, name) => {\n setAttribute(elm, name, value2);\n });\n } else {\n isNull(value) ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n }\n}\n\nfunction create(tag, attrs, parent) {\n const elm = document.createElement(tag);\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n if (!isNull(value)) {\n const { style: style2 } = elm;\n value = `${value}`;\n if (style2[prop] !== value) {\n style2[prop] = value;\n }\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({ preventScroll: true });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, (node) => {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction measure(parent, value) {\n if (isString(value)) {\n const div = create(\"div\", { style: `width: ${value}; position: absolute;` }, parent);\n value = rect(div).width;\n remove(div);\n }\n return value;\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return slice(parent.querySelectorAll(selector));\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? `${value}px` : \"\";\n}\n\nfunction assert(condition, message = \"\") {\n if (!condition) {\n throw new Error(`[${PROJECT_CODE}] ${message}`);\n }\n}\n\nfunction nextTick(callback) {\n setTimeout(callback);\n}\n\nconst noop = () => {\n};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nconst { min, max, floor, ceil, abs } = Math;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, minOrMax, maxOrMin, exclusive) {\n const minimum = min(minOrMax, maxOrMin);\n const maximum = max(minOrMax, maxOrMin);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n const minimum = min(x, y);\n const maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, (replacement) => {\n string = string.replace(\"%s\", `${replacement}`);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? `0${number}` : `${number}`;\n}\n\nconst ids = {};\nfunction uniqueId(prefix) {\n return `${prefix}${pad(ids[prefix] = (ids[prefix] || 0) + 1)}`;\n}\n\nfunction EventBus() {\n let handlers = {};\n function on(events, callback, key, priority = DEFAULT_EVENT_PRIORITY) {\n forEachEvent(events, (event, namespace) => {\n handlers[event] = handlers[event] || [];\n push(handlers[event], {\n _event: event,\n _callback: callback,\n _namespace: namespace,\n _priority: priority,\n _key: key\n }).sort((handler1, handler2) => handler1._priority - handler2._priority);\n });\n }\n function off(events, key) {\n forEachEvent(events, (event, namespace) => {\n const eventHandlers = handlers[event];\n handlers[event] = eventHandlers && eventHandlers.filter((handler) => {\n return handler._key ? handler._key !== key : key || handler._namespace !== namespace;\n });\n });\n }\n function offBy(key) {\n forOwn(handlers, (eventHandlers, event) => {\n off(event, key);\n });\n }\n function emit(event) {\n (handlers[event] || []).forEach((handler) => {\n handler._callback.apply(handler, slice(arguments, 1));\n });\n }\n function destroy() {\n handlers = {};\n }\n function forEachEvent(events, iteratee) {\n toArray(events).join(\" \").split(\" \").forEach((eventNS) => {\n const fragments = eventNS.split(\".\");\n iteratee(fragments[0], fragments[1]);\n });\n }\n return {\n on,\n off,\n offBy,\n emit,\n destroy\n };\n}\n\nconst EVENT_MOUNTED = \"mounted\";\nconst EVENT_READY = \"ready\";\nconst EVENT_MOVE = \"move\";\nconst EVENT_MOVED = \"moved\";\nconst EVENT_SHIFTED = \"shifted\";\nconst EVENT_CLICK = \"click\";\nconst EVENT_ACTIVE = \"active\";\nconst EVENT_INACTIVE = \"inactive\";\nconst EVENT_VISIBLE = \"visible\";\nconst EVENT_HIDDEN = \"hidden\";\nconst EVENT_SLIDE_KEYDOWN = \"slide:keydown\";\nconst EVENT_REFRESH = \"refresh\";\nconst EVENT_UPDATED = \"updated\";\nconst EVENT_RESIZE = \"resize\";\nconst EVENT_RESIZED = \"resized\";\nconst EVENT_REPOSITIONED = \"repositioned\";\nconst EVENT_DRAG = \"drag\";\nconst EVENT_DRAGGING = \"dragging\";\nconst EVENT_DRAGGED = \"dragged\";\nconst EVENT_SCROLL = \"scroll\";\nconst EVENT_SCROLLED = \"scrolled\";\nconst EVENT_DESTROY = \"destroy\";\nconst EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nconst EVENT_ARROWS_UPDATED = \"arrows:updated\";\nconst EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nconst EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nconst EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nconst EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nconst EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nconst EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nconst EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\n\nfunction EventInterface(Splide2) {\n const { event } = Splide2;\n const key = {};\n let listeners = [];\n function on(events, callback, priority) {\n event.on(events, callback, key, priority);\n }\n function off(events) {\n event.off(events, key);\n }\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, (target, event2) => {\n listeners.push([target, event2, callback, options]);\n target.addEventListener(event2, callback, options);\n });\n }\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, (target, event2) => {\n listeners = listeners.filter((listener) => {\n if (listener[0] === target && listener[1] === event2 && (!callback || listener[2] === callback)) {\n target.removeEventListener(event2, listener[2], listener[3]);\n return false;\n }\n return true;\n });\n });\n }\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, (target) => {\n if (target) {\n events.split(\" \").forEach(iteratee.bind(null, target));\n }\n });\n }\n function destroy() {\n listeners = listeners.filter((data) => unbind(data[0], data[1]));\n event.offBy(key);\n }\n event.on(EVENT_DESTROY, destroy, key);\n return {\n on,\n off,\n emit: event.emit,\n bind,\n unbind,\n destroy\n };\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n const { now } = Date;\n let startTime;\n let rate = 0;\n let id;\n let paused = true;\n let count = 0;\n function update() {\n if (!paused) {\n const elapsed = now() - startTime;\n if (elapsed >= interval) {\n rate = 1;\n startTime = now();\n } else {\n rate = elapsed / interval;\n }\n if (onUpdate) {\n onUpdate(rate);\n }\n if (rate === 1) {\n onInterval();\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n raf(update);\n }\n }\n function start(resume) {\n !resume && cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n raf(update);\n }\n function pause() {\n paused = true;\n }\n function rewind() {\n startTime = now();\n rate = 0;\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n function cancel() {\n cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n function set(time) {\n interval = time;\n }\n function isPaused() {\n return paused;\n }\n return {\n start,\n rewind,\n pause,\n cancel,\n set,\n isPaused\n };\n}\n\nfunction State(initialState) {\n let state = initialState;\n function set(value) {\n state = value;\n }\n function is(states) {\n return includes(toArray(states), state);\n }\n return { set, is };\n}\n\nfunction Throttle(func, duration) {\n let interval;\n function throttled() {\n if (!interval) {\n interval = RequestInterval(duration || 0, () => {\n func.apply(this, arguments);\n interval = null;\n }, null, 1);\n interval.start();\n }\n }\n return throttled;\n}\n\nfunction Options(Splide2, Components2, options) {\n const throttledObserve = Throttle(observe);\n let initialOptions;\n let points;\n let currPoint;\n function setup() {\n try {\n merge(options, JSON.parse(getAttribute(Splide2.root, DATA_ATTRIBUTE)));\n } catch (e) {\n assert(false, e.message);\n }\n initialOptions = merge({}, options);\n const { breakpoints } = options;\n if (breakpoints) {\n const isMin = options.mediaQuery === \"min\";\n points = Object.keys(breakpoints).sort((n, m) => isMin ? +m - +n : +n - +m).map((point) => [\n point,\n matchMedia(`(${isMin ? \"min\" : \"max\"}-width:${point}px)`)\n ]);\n observe();\n }\n }\n function mount() {\n if (points) {\n addEventListener(\"resize\", throttledObserve);\n }\n }\n function destroy(completely) {\n if (completely) {\n removeEventListener(\"resize\", throttledObserve);\n }\n }\n function observe() {\n const item = find(points, (item2) => item2[1].matches) || [];\n if (item[0] !== currPoint) {\n onMatch(currPoint = item[0]);\n }\n }\n function onMatch(point) {\n const newOptions = options.breakpoints[point] || initialOptions;\n if (newOptions.destroy) {\n Splide2.options = initialOptions;\n Splide2.destroy(newOptions.destroy === \"completely\");\n } else {\n if (Splide2.state.is(DESTROYED)) {\n destroy(true);\n Splide2.mount();\n }\n Splide2.options = newOptions;\n }\n }\n return {\n setup,\n mount,\n destroy\n };\n}\n\nconst RTL = \"rtl\";\nconst TTB = \"ttb\";\n\nconst ORIENTATION_MAP = {\n marginRight: [\"marginBottom\", \"marginLeft\"],\n autoWidth: [\"autoHeight\"],\n fixedWidth: [\"fixedHeight\"],\n paddingLeft: [\"paddingTop\", \"paddingRight\"],\n paddingRight: [\"paddingBottom\", \"paddingLeft\"],\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [\"ArrowUp\", \"ArrowRight\"],\n ArrowRight: [\"ArrowDown\", \"ArrowLeft\"]\n};\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly) {\n const { direction } = options;\n const index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop][index] || prop;\n }\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n return {\n resolve,\n orient\n };\n}\n\nconst CLASS_ROOT = PROJECT_CODE;\nconst CLASS_SLIDER = `${PROJECT_CODE}__slider`;\nconst CLASS_TRACK = `${PROJECT_CODE}__track`;\nconst CLASS_LIST = `${PROJECT_CODE}__list`;\nconst CLASS_SLIDE = `${PROJECT_CODE}__slide`;\nconst CLASS_CLONE = `${CLASS_SLIDE}--clone`;\nconst CLASS_CONTAINER = `${CLASS_SLIDE}__container`;\nconst CLASS_ARROWS = `${PROJECT_CODE}__arrows`;\nconst CLASS_ARROW = `${PROJECT_CODE}__arrow`;\nconst CLASS_ARROW_PREV = `${CLASS_ARROW}--prev`;\nconst CLASS_ARROW_NEXT = `${CLASS_ARROW}--next`;\nconst CLASS_PAGINATION = `${PROJECT_CODE}__pagination`;\nconst CLASS_PAGINATION_PAGE = `${CLASS_PAGINATION}__page`;\nconst CLASS_PROGRESS = `${PROJECT_CODE}__progress`;\nconst CLASS_PROGRESS_BAR = `${CLASS_PROGRESS}__bar`;\nconst CLASS_AUTOPLAY = `${PROJECT_CODE}__autoplay`;\nconst CLASS_PLAY = `${PROJECT_CODE}__play`;\nconst CLASS_PAUSE = `${PROJECT_CODE}__pause`;\nconst CLASS_SPINNER = `${PROJECT_CODE}__spinner`;\nconst CLASS_INITIALIZED = \"is-initialized\";\nconst CLASS_ACTIVE = \"is-active\";\nconst CLASS_PREV = \"is-prev\";\nconst CLASS_NEXT = \"is-next\";\nconst CLASS_VISIBLE = \"is-visible\";\nconst CLASS_LOADING = \"is-loading\";\nconst STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING];\nconst CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction Elements(Splide2, Components2, options) {\n const { on } = EventInterface(Splide2);\n const { root } = Splide2;\n const elements = {};\n const slides = [];\n let classes;\n let slider;\n let track;\n let list;\n function setup() {\n collect();\n identify();\n addClass(root, classes = getClasses());\n }\n function mount() {\n on(EVENT_REFRESH, refresh, DEFAULT_EVENT_PRIORITY - 2);\n on(EVENT_UPDATED, update);\n }\n function destroy() {\n [root, track, list].forEach((elm) => {\n removeAttribute(elm, \"style\");\n });\n empty(slides);\n removeClass(root, classes);\n }\n function refresh() {\n destroy();\n setup();\n }\n function update() {\n removeClass(root, classes);\n addClass(root, classes = getClasses());\n }\n function collect() {\n slider = child(root, `.${CLASS_SLIDER}`);\n track = query(root, `.${CLASS_TRACK}`);\n list = child(track, `.${CLASS_LIST}`);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, `.${CLASS_SLIDE}:not(.${CLASS_CLONE})`));\n const autoplay = find(`.${CLASS_AUTOPLAY}`);\n const arrows = find(`.${CLASS_ARROWS}`);\n assign(elements, {\n root,\n slider,\n track,\n list,\n slides,\n arrows,\n autoplay,\n prev: query(arrows, `.${CLASS_ARROW_PREV}`),\n next: query(arrows, `.${CLASS_ARROW_NEXT}`),\n bar: query(find(`.${CLASS_PROGRESS}`), `.${CLASS_PROGRESS_BAR}`),\n play: query(autoplay, `.${CLASS_PLAY}`),\n pause: query(autoplay, `.${CLASS_PAUSE}`)\n });\n }\n function identify() {\n const id = root.id || uniqueId(PROJECT_CODE);\n root.id = id;\n track.id = track.id || `${id}-track`;\n list.id = list.id || `${id}-list`;\n }\n function find(selector) {\n return child(root, selector) || child(slider, selector);\n }\n function getClasses() {\n return [\n `${CLASS_ROOT}--${options.type}`,\n `${CLASS_ROOT}--${options.direction}`,\n options.drag && `${CLASS_ROOT}--draggable`,\n options.isNavigation && `${CLASS_ROOT}--nav`,\n CLASS_ACTIVE\n ];\n }\n return assign(elements, {\n setup,\n mount,\n destroy\n });\n}\n\nconst ROLE = \"role\";\nconst ARIA_CONTROLS = \"aria-controls\";\nconst ARIA_CURRENT = \"aria-current\";\nconst ARIA_LABEL = \"aria-label\";\nconst ARIA_HIDDEN = \"aria-hidden\";\nconst TAB_INDEX = \"tabindex\";\nconst DISABLED = \"disabled\";\nconst ARIA_ORIENTATION = \"aria-orientation\";\nconst ALL_ATTRIBUTES = [\n ROLE,\n ARIA_CONTROLS,\n ARIA_CURRENT,\n ARIA_LABEL,\n ARIA_HIDDEN,\n ARIA_ORIENTATION,\n TAB_INDEX,\n DISABLED\n];\n\nconst SLIDE = \"slide\";\nconst LOOP = \"loop\";\nconst FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n const { on, emit, bind, destroy: destroyEvents } = EventInterface(Splide2);\n const { Components, root, options } = Splide2;\n const { isNavigation, updateOnMove } = options;\n const { resolve } = Components.Direction;\n const styles = getAttribute(slide, \"style\");\n const isClone = slideIndex > -1;\n const container = child(slide, `.${CLASS_CONTAINER}`);\n const focusableNodes = options.focusableNodes && queryAll(slide, options.focusableNodes);\n let destroyed;\n function mount() {\n if (!isClone) {\n slide.id = `${root.id}-slide${pad(index + 1)}`;\n }\n bind(slide, \"click keydown\", (e) => {\n emit(e.type === \"click\" ? EVENT_CLICK : EVENT_SLIDE_KEYDOWN, self, e);\n });\n on([EVENT_REFRESH, EVENT_REPOSITIONED, EVENT_SHIFTED, EVENT_MOVED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n function destroy() {\n destroyed = true;\n destroyEvents();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n }\n function initNavigation() {\n const idx = isClone ? slideIndex : index;\n const label = format(options.i18n.slideX, idx + 1);\n const controls = Splide2.splides.map((target) => target.splide.root.id).join(\" \");\n setAttribute(slide, ARIA_LABEL, label);\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, \"menuitem\");\n updateActivity(isActive());\n }\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n function update() {\n if (!destroyed) {\n const { index: currIndex } = Splide2;\n updateActivity(isActive());\n updateVisibility(isVisible());\n toggleClass(slide, CLASS_PREV, index === currIndex - 1);\n toggleClass(slide, CLASS_NEXT, index === currIndex + 1);\n }\n }\n function updateActivity(active) {\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n if (isNavigation) {\n setAttribute(slide, ARIA_CURRENT, active || null);\n }\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n function updateVisibility(visible) {\n const hidden = !visible && (!isActive() || isClone);\n setAttribute(slide, ARIA_HIDDEN, hidden || null);\n setAttribute(slide, TAB_INDEX, !hidden && options.slideFocus ? 0 : null);\n if (focusableNodes) {\n focusableNodes.forEach((node) => {\n setAttribute(node, TAB_INDEX, hidden ? -1 : null);\n });\n }\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n }\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n function isActive() {\n const { index: curr } = Splide2;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n const trackRect = rect(Components.Elements.track);\n const slideRect = rect(slide);\n const left = resolve(\"left\");\n const right = resolve(\"right\");\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n function isWithin(from, distance) {\n let diff = abs(from - index);\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n return diff <= distance;\n }\n const self = {\n index,\n slideIndex,\n slide,\n container,\n isClone,\n mount,\n destroy,\n update,\n style: style$1,\n isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n const { on, emit, bind } = EventInterface(Splide2);\n const { slides, list } = Components2.Elements;\n const Slides2 = [];\n function mount() {\n init();\n on(EVENT_REFRESH, refresh);\n on([EVENT_MOUNTED, EVENT_REFRESH], () => {\n Slides2.sort((Slide1, Slide2) => Slide1.index - Slide2.index);\n });\n }\n function init() {\n slides.forEach((slide, index) => {\n register(slide, index, -1);\n });\n }\n function destroy() {\n forEach$1((Slide2) => {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n function refresh() {\n destroy();\n init();\n }\n function update() {\n forEach$1((Slide2) => {\n Slide2.update();\n });\n }\n function register(slide, index, slideIndex) {\n const object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n }\n function get(excludeClones) {\n return excludeClones ? filter((Slide2) => !Slide2.isClone) : Slides2;\n }\n function getIn(page) {\n const { Controller } = Components2;\n const index = Controller.toIndex(page);\n const max = Controller.hasFocus() ? 1 : options.perPage;\n return filter((Slide2) => between(Slide2.index, index, index + max - 1));\n }\n function getAt(index) {\n return filter(index)[0];\n }\n function add(items, index) {\n forEach(items, (slide) => {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n if (isHTMLElement(slide)) {\n const ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, emit.bind(null, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n function remove$1(matcher) {\n remove(filter(matcher).map((Slide2) => Slide2.slide));\n emit(EVENT_REFRESH);\n }\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : (Slide2) => isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index));\n }\n function style(prop, value, useContainer) {\n forEach$1((Slide2) => {\n Slide2.style(prop, value, useContainer);\n });\n }\n function observeImages(elm, callback) {\n const images = queryAll(elm, \"img\");\n let { length } = images;\n if (length) {\n images.forEach((img) => {\n bind(img, \"load error\", () => {\n if (!--length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n return {\n mount,\n destroy,\n update,\n register,\n get,\n getIn,\n getAt,\n add,\n remove: remove$1,\n forEach: forEach$1,\n filter,\n style,\n getLength,\n isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n const { on, bind, emit } = EventInterface(Splide2);\n const { Slides } = Components2;\n const { resolve } = Components2.Direction;\n const { root, track, list } = Components2.Elements;\n const { getAt } = Slides;\n let vertical;\n let rootRect;\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(emit.bind(this, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n function init() {\n rootRect = null;\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize();\n }\n function resize() {\n const newRect = rect(root);\n if (!rootRect || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n Slides.style(resolve(\"marginRight\"), unit(options.gap));\n Slides.style(\"width\", cssSlideWidth() || null);\n setSlidesHeight();\n rootRect = newRect;\n emit(EVENT_RESIZED);\n }\n }\n function setSlidesHeight() {\n Slides.style(\"height\", cssSlideHeight() || null, true);\n }\n function cssPadding(right) {\n const { padding } = options;\n const prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n function cssTrackHeight() {\n let height = \"\";\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = `calc(${height} - ${cssPadding(false)} - ${cssPadding(true)})`;\n }\n return height;\n }\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n function cssSlideWidth() {\n return options.autoWidth ? \"\" : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? \"\" : cssSlideSize() : cssHeight());\n }\n function cssSlideSize() {\n const gap = unit(options.gap);\n return `calc((100%${gap && ` + ${gap}`})/${options.perPage || 1}${gap && ` - ${gap}`})`;\n }\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n function slideSize(index, withoutGap) {\n const Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n function totalSize(index, withoutGap) {\n const Slide = getAt(index);\n if (Slide) {\n const right = rect(Slide.slide)[resolve(\"right\")];\n const left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n return 0;\n }\n function sliderSize() {\n return totalSize(Splide2.length - 1, true) - totalSize(-1, true);\n }\n function getGap() {\n const Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n function getPadding(right) {\n return parseFloat(style(track, resolve(`padding${right ? \"Right\" : \"Left\"}`))) || 0;\n }\n return {\n mount,\n listSize,\n slideSize,\n sliderSize,\n totalSize,\n getPadding\n };\n}\n\nfunction Clones(Splide2, Components2, options) {\n const { on, emit } = EventInterface(Splide2);\n const { Elements, Slides } = Components2;\n const { resolve } = Components2.Direction;\n const clones = [];\n let cloneCount;\n function mount() {\n init();\n on(EVENT_REFRESH, refresh);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n }\n function init() {\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n emit(EVENT_RESIZE);\n }\n }\n function destroy() {\n remove(clones);\n empty(clones);\n }\n function refresh() {\n destroy();\n init();\n }\n function observe() {\n if (cloneCount < computeCloneCount()) {\n emit(EVENT_REFRESH);\n }\n }\n function generate(count) {\n const slides = Slides.get().slice();\n const { length } = slides;\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n push(slides.slice(-count), slides.slice(0, count)).forEach((Slide, index) => {\n const isHead = index < count;\n const clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n function cloneDeep(elm, index) {\n const clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = `${Splide2.root.id}-clone${pad(index + 1)}`;\n return clone;\n }\n function computeCloneCount() {\n let { clones: clones2 } = options;\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (!clones2) {\n const fixedSize = measure(Elements.list, options[resolve(\"fixedWidth\")]);\n const fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n const baseCount = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage;\n clones2 = baseCount * (options.drag ? (options.flickMaxPages || 1) + 1 : 2);\n }\n return clones2;\n }\n return {\n mount,\n destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n const { on, emit } = EventInterface(Splide2);\n const { slideSize, getPadding, totalSize, listSize, sliderSize } = Components2.Layout;\n const { resolve, orient } = Components2.Direction;\n const { list, track } = Components2.Elements;\n let Transition;\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n function destroy() {\n removeAttribute(list, \"style\");\n }\n function reposition() {\n if (!isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n emit(EVENT_REPOSITIONED);\n }\n }\n function move(dest, index, prev, callback) {\n if (!isBusy()) {\n const { set } = Splide2.state;\n const position = getPosition();\n if (dest !== index) {\n Transition.cancel();\n translate(shift(position, dest > index), true);\n }\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, () => {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n if (options.trimSpace === \"move\" && dest !== prev && position === getPosition()) {\n Components2.Controller.go(dest > prev ? \">\" : \"<\", false, callback);\n } else {\n callback && callback();\n }\n });\n }\n }\n function jump(index) {\n translate(toPosition(index, true));\n }\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n const destination = preventLoop ? position : loop(position);\n list.style.transform = `translate${resolve(\"X\")}(${destination}px)`;\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n function loop(position) {\n if (Splide2.is(LOOP)) {\n const diff = orient(position - getPosition());\n const exceededMin = exceededLimit(false, position) && diff < 0;\n const exceededMax = exceededLimit(true, position) && diff > 0;\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n return position;\n }\n function shift(position, backwards) {\n const excess = position - getLimit(backwards);\n const size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n function cancel() {\n translate(getPosition());\n Transition.cancel();\n }\n function toIndex(position) {\n const Slides = Components2.Slides.get();\n let index = 0;\n let minDistance = Infinity;\n for (let i = 0; i < Slides.length; i++) {\n const slideIndex = Slides[i].index;\n const distance = abs(toPosition(slideIndex, true) - position);\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n return index;\n }\n function toPosition(index, trimming) {\n const position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n function getPosition() {\n const left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize() - listSize()));\n }\n return position;\n }\n function offset(index) {\n const { focus } = options;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n function isBusy() {\n return Splide2.state.is(MOVING) && options.waitForTransition;\n }\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n const exceededMin = max !== true && orient(position) < orient(getLimit(false));\n const exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n return {\n mount,\n destroy,\n move,\n jump,\n translate,\n shift,\n cancel,\n toIndex,\n toPosition,\n getPosition,\n getLimit,\n isBusy,\n exceededLimit\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n const { on } = EventInterface(Splide2);\n const { Move } = Components2;\n const { getPosition, getLimit } = Move;\n const { isEnough, getLength } = Components2.Slides;\n const isLoop = Splide2.is(LOOP);\n const isSlide = Splide2.is(SLIDE);\n let currIndex = options.start || 0;\n let prevIndex = currIndex;\n let slideCount;\n let perMove;\n let perPage;\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH], init, DEFAULT_EVENT_PRIORITY - 1);\n }\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n currIndex = clamp(currIndex, 0, slideCount - 1);\n }\n function go(control, allowSameIndex, callback) {\n const dest = parse(control);\n if (options.useScroll) {\n scroll(dest, true, true, options.speed, callback);\n } else {\n const index = loop(dest);\n if (index > -1 && !Move.isBusy() && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n function scroll(destination, useIndex, snap, duration, callback) {\n const dest = useIndex ? destination : toDest(destination);\n Components2.Scroll.scroll(useIndex || snap ? Move.toPosition(dest, true) : destination, duration, () => {\n setIndex(Move.toIndex(Move.getPosition()));\n callback && callback();\n });\n }\n function parse(control) {\n let index = currIndex;\n if (isString(control)) {\n const [, indicator, number] = control.match(/([+\\-<>])(\\d+)?/) || [];\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +`${indicator}${+number || 1}`, currIndex, true);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, getEnd());\n }\n return index;\n }\n function getNext(destination) {\n return getAdjacent(false, destination);\n }\n function getPrev(destination) {\n return getAdjacent(true, destination);\n }\n function getAdjacent(prev, destination) {\n const number = perMove || (hasFocus() ? 1 : perPage);\n const dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex);\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : getEnd();\n }\n }\n return destination ? dest : loop(dest);\n }\n function computeDestIndex(dest, from, incremental) {\n if (isEnough()) {\n const end = getEnd();\n if (dest < 0 || dest > end) {\n if (between(0, dest, from, true) || between(end, from, dest, true)) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = perMove || hasFocus() ? dest : dest < 0 ? -(slideCount % perPage || perPage) : slideCount;\n } else if (options.rewind) {\n dest = dest < 0 ? end : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (!incremental && dest !== from) {\n dest = perMove ? dest : toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n return dest;\n }\n function getEnd() {\n let end = slideCount - perPage;\n if (hasFocus() || isLoop && perMove) {\n end = slideCount - 1;\n }\n return max(end, 0);\n }\n function loop(index) {\n if (isLoop) {\n return isEnough() ? index % slideCount + (index < 0 ? slideCount : 0) : -1;\n }\n return index;\n }\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, getEnd());\n }\n function toPage(index) {\n if (!hasFocus()) {\n index = between(index, slideCount - perPage, slideCount - 1) ? slideCount - 1 : index;\n index = floor(index / perPage);\n }\n return index;\n }\n function toDest(destination) {\n const closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, getEnd()) : closest;\n }\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n return {\n mount,\n go,\n scroll,\n getNext,\n getPrev,\n getAdjacent,\n getEnd,\n setIndex,\n getIndex,\n toIndex,\n toPage,\n toDest,\n hasFocus\n };\n}\n\nconst XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nconst PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nconst SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n const { on, bind, emit } = EventInterface(Splide2);\n const { classes, i18n } = options;\n const { Elements, Controller } = Components2;\n let wrapper = Elements.arrows;\n let prev = Elements.prev;\n let next = Elements.next;\n let created;\n const arrows = {};\n function mount() {\n init();\n on(EVENT_UPDATED, init);\n }\n function init() {\n if (options.arrows) {\n if (!prev || !next) {\n createArrows();\n }\n }\n if (prev && next) {\n if (!arrows.prev) {\n const { id } = Elements.track;\n setAttribute(prev, ARIA_CONTROLS, id);\n setAttribute(next, ARIA_CONTROLS, id);\n arrows.prev = prev;\n arrows.next = next;\n listen();\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n } else {\n display(wrapper, options.arrows === false ? \"none\" : \"\");\n }\n }\n }\n function destroy() {\n if (created) {\n remove(wrapper);\n } else {\n removeAttribute(prev, ALL_ATTRIBUTES);\n removeAttribute(next, ALL_ATTRIBUTES);\n }\n }\n function listen() {\n const { go } = Controller;\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_UPDATED, EVENT_REFRESH, EVENT_SCROLLED], update);\n bind(next, \"click\", () => {\n go(\">\", true);\n });\n bind(prev, \"click\", () => {\n go(\"<\", true);\n });\n }\n function createArrows() {\n wrapper = create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n before(wrapper, child(options.arrows === \"slider\" && Elements.slider || Splide2.root));\n }\n function createArrow(prev2) {\n const arrow = ``;\n }\n html() {\n const { rootClass, listTag, arrows, beforeTrack, afterTrack, slider, beforeSlider, afterSlider } = this.config;\n let html = \"\";\n html += `
`;\n html += ``;\n if (slider) {\n html += beforeSlider || \"\";\n html += `
`;\n }\n html += beforeTrack || \"\";\n if (arrows) {\n html += this.renderArrows();\n }\n html += `
`;\n html += `<${listTag} class=\"splide__list\">`;\n html += this.renderSlides();\n html += ``;\n html += `
`;\n html += afterTrack || \"\";\n if (slider) {\n html += `
`;\n html += afterSlider || \"\";\n }\n html += `
`;\n return html;\n }\n}\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_AUTOPLAY, CLASS_CLONE, CLASS_CONTAINER, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PAUSE, CLASS_PLAY, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SLIDER, CLASS_SPINNER, CLASS_TRACK, CLASS_VISIBLE, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_REPOSITIONED, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBus, EventInterface, RequestInterval, STATUS_CLASSES, Splide, SplideRenderer, State, Throttle, Splide as default };\n","var focusableSelectors = [\n 'a[href]:not([tabindex^=\"-\"])',\n 'area[href]:not([tabindex^=\"-\"])',\n 'input:not([type=\"hidden\"]):not([type=\"radio\"]):not([disabled]):not([tabindex^=\"-\"])',\n 'input[type=\"radio\"]:not([disabled]):not([tabindex^=\"-\"])',\n 'select:not([disabled]):not([tabindex^=\"-\"])',\n 'textarea:not([disabled]):not([tabindex^=\"-\"])',\n 'button:not([disabled]):not([tabindex^=\"-\"])',\n 'iframe:not([tabindex^=\"-\"])',\n 'audio[controls]:not([tabindex^=\"-\"])',\n 'video[controls]:not([tabindex^=\"-\"])',\n '[contenteditable]:not([tabindex^=\"-\"])',\n '[tabindex]:not([tabindex^=\"-\"])',\n];\n\nvar TAB_KEY = 9;\nvar ESCAPE_KEY = 27;\n\n/**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} element\n */\nfunction A11yDialog(element) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n this.$el = element;\n this.shown = false;\n this._id = this.$el.getAttribute('data-a11y-dialog') || this.$el.id;\n this._previouslyFocused = null;\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create();\n}\n\n/**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\nA11yDialog.prototype.create = function () {\n this.$el.setAttribute('aria-hidden', true);\n this.$el.setAttribute('aria-modal', true);\n this.$el.setAttribute('tabindex', -1);\n\n if (!this.$el.hasAttribute('role')) {\n this.$el.setAttribute('role', 'dialog');\n }\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this._id + '\"]');\n this._openers.forEach(\n function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this)\n );\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.$el).concat(\n $$('[data-a11y-dialog-hide=\"' + this._id + '\"]')\n );\n this._closers.forEach(\n function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this\n};\n\n/**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\nA11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this\n }\n\n // Keep a reference to the currently focused element to be able to restore\n // it later\n this._previouslyFocused = document.activeElement;\n this.$el.removeAttribute('aria-hidden');\n this.shown = true;\n\n // Set the focus to the dialog element\n moveFocusToDialog(this.$el);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this\n};\n\n/**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\nA11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this\n }\n\n this.shown = false;\n this.$el.setAttribute('aria-hidden', 'true');\n\n // If there was a focused element before the dialog was opened (and it has a\n // `focus` method), restore the focus back to it\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/108\n if (this._previouslyFocused && this._previouslyFocused.focus) {\n this._previouslyFocused.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this\n};\n\n/**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\nA11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(\n function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this)\n );\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(\n function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this\n};\n\n/**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\nA11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this\n};\n\n/**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\nA11yDialog.prototype.off = function (type, handler) {\n var index = (this._listeners[type] || []).indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this\n};\n\n/**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any). Also\n * dispatch a custom event on the DOM element itself to make it possible to\n * react to the lifecycle of auto-instantiated dialogs.\n *\n * @access private\n * @param {string} type\n * @param {CustomEvent} event\n */\nA11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n var domEvent = new CustomEvent(type, { detail: event });\n\n this.$el.dispatchEvent(domEvent);\n\n listeners.forEach(\n function (listener) {\n listener(this.$el, event);\n }.bind(this)\n );\n};\n\n/**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\nA11yDialog.prototype._bindKeypress = function (event) {\n // This is an escape hatch in case there are nested dialogs, so the keypresses\n // are only reacted to for the most recent one\n if (!this.$el.contains(document.activeElement)) return\n\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog, unless its role\n // is 'alertdialog', which should be modal\n if (\n this.shown &&\n event.which === ESCAPE_KEY &&\n this.$el.getAttribute('role') !== 'alertdialog'\n ) {\n event.preventDefault();\n this.hide(event);\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.$el, event);\n }\n};\n\n/**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\nA11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within a dialog element (either\n // this one or another one in case of nested dialogs) or within an element\n // with the `data-a11y-dialog-focus-trap-ignore` attribute, move it back to\n // its first focusable child.\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/177\n if (\n this.shown &&\n !event.target.closest('[aria-modal=\"true\"]') &&\n !event.target.closest('[data-a11y-dialog-ignore-focus-trap]')\n ) {\n moveFocusToDialog(this.$el);\n }\n};\n\n/**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\nfunction toArray(collection) {\n return Array.prototype.slice.call(collection)\n}\n\n/**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\nfunction $$(selector, context) {\n return toArray((context || document).querySelectorAll(selector))\n}\n\n/**\n * Set the focus to the first element with `autofocus` with the element or the\n * element itself\n *\n * @param {Element} node\n */\nfunction moveFocusToDialog(node) {\n var focused = node.querySelector('[autofocus]') || node;\n\n focused.focus();\n}\n\n/**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction getFocusableChildren(node) {\n return $$(focusableSelectors.join(','), node).filter(function (child) {\n return !!(\n child.offsetWidth ||\n child.offsetHeight ||\n child.getClientRects().length\n )\n })\n}\n\n/**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\nfunction trapTabKey(node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (\n !event.shiftKey &&\n focusedItemIndex === focusableChildren.length - 1\n ) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n}\n\nfunction instantiateDialogs() {\n $$('[data-a11y-dialog]').forEach(function (node) {\n new A11yDialog(node);\n });\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', instantiateDialogs);\n } else {\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(instantiateDialogs);\n } else {\n window.setTimeout(instantiateDialogs, 16);\n }\n }\n}\n\nexport { A11yDialog as default };\n","import A11yDialog from \"a11y-dialog\";\r\nimport Modal from \"../modal/modal\";\r\n\r\nconst modals = {\r\n starringModal: \"\",\r\n};\r\n\r\nexport function makeDialogAccessible(container) {\r\n modals.starringModal = new A11yDialog(container);\r\n modals.starringModal.show();\r\n modals.starringModal.on(\"hide\", function (el) {\r\n Modal.closeModal(el);\r\n });\r\n}\r\n\r\nexport function makeDialogInaccessible() {\r\n modals.starringModal.hide();\r\n}\r\n","export default class Accordion {\r\n constructor(element) {\r\n this.el = element;\r\n this.Buttons = this.el.querySelectorAll(\"button\");\r\n this.toggleContent = this.toggleContent.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.Buttons.forEach((button) => {\r\n button.addEventListener(\"click\", () => {\r\n this.toggleContent(button);\r\n });\r\n });\r\n }\r\n\r\n toggleContent(button) {\r\n this.AccordionContent = button\r\n .closest(\".accordion-item\")\r\n .querySelector(\".accordion-content\");\r\n if (!button.classList.contains(\"active\")) {\r\n this.AccordionContent.classList.add(\"active\");\r\n button.classList.add(\"active\");\r\n button.ariaExpanded = \"true\";\r\n } else {\r\n this.AccordionContent.classList.remove(\"active\");\r\n button.classList.remove(\"active\");\r\n button.ariaExpanded = \"false\";\r\n }\r\n }\r\n\r\n static openFromExternal(button) {\r\n this.AccordionContent = button\r\n .closest(\".accordion-item\")\r\n .querySelector(\".accordion-content\");\r\n this.AccordionContent.classList.add(\"active\");\r\n button.ariaExpanded = \"true\";\r\n button.classList.add(\"active\");\r\n }\r\n}\r\n","import A11yDialog from \"a11y-dialog\";\r\nexport default class Alert {\r\n constructor(element) {\r\n this.el = element;\r\n this.parent = this.el.closest(\".alert-wrapper\");\r\n this.alertsContainer = this.el.closest(\".alerts\");\r\n this.pageAlertContainer = this.alertsContainer.querySelector(\r\n \"[data-alert='page']\"\r\n );\r\n this.globalAlertContainer = this.alertsContainer.querySelector(\r\n \"[data-alert='global']\"\r\n );\r\n this.closedAlerts =\r\n JSON.parse(sessionStorage.getItem(\"closedAlerts\")) || [];\r\n this.alertCloseElements = this.el.querySelectorAll(\"[data-alert-id]\");\r\n this.alertId = this.alertCloseElements[0].dataset.alertId;\r\n this.pageId = document.querySelector(\".site-wrapper\").dataset.pageId;\r\n this.dialog;\r\n let globalAlert = this.el.closest(\".globalAlert\");\r\n this.globalAlertId =\r\n globalAlert != null\r\n ? globalAlert.querySelector(\".alert-close-btn\").dataset.alertId\r\n : null;\r\n this.scaleRatio = 1;\r\n this.toYTranslate = 0;\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n this.openedFrom = urlParams.get(\"openedfrom\");\r\n this.pageIdFrom = urlParams.get(\"pageid\");\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.showAlert();\r\n\r\n //console.log(this.openedFrom);\r\n //console.log(\"page id from: \" + this.pageIdFrom);\r\n\r\n //console.log(this.alertId);\r\n //console.log(\"pageid:\" + this.pageId);\r\n\r\n this.alertCloseElements.forEach((element) => {\r\n element.addEventListener(\"click\", () => {\r\n this.closeAlert();\r\n });\r\n });\r\n }\r\n\r\n showAlert() {\r\n if (!this.el.hasAttribute(\"data-show-once\")) {\r\n this.el.hidden = false;\r\n this.moveDown();\r\n return;\r\n }\r\n\r\n this.isSeen(this.isInSessionStorage());\r\n }\r\n\r\n isInSessionStorage() {\r\n if (this.globalAlertId == null) {\r\n if (parseInt(this.openedFrom) === parseInt(this.alertId)) {\r\n this.saveInStorage();\r\n return true;\r\n }\r\n for (const alert of this.closedAlerts) {\r\n if (alert.alertId === this.alertId && alert.pageId === this.pageId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n if (this.openedFrom == this.alertId) {\r\n this.saveInStorage();\r\n return true;\r\n }\r\n for (const alert of this.closedAlerts) {\r\n if (alert.alertId === this.alertId) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n isSeen(seen) {\r\n if (seen === false) {\r\n this.el.hidden = false;\r\n this.moveDown();\r\n } else {\r\n this.removeAlert();\r\n }\r\n }\r\n\r\n closeAlert() {\r\n this.dialog.hide();\r\n this.moveUp();\r\n //add id to sessionStorage\r\n this.saveInStorage();\r\n }\r\n\r\n saveInStorage() {\r\n if (this.el.hasAttribute(\"data-show-once\")) {\r\n this.closedAlerts =\r\n JSON.parse(sessionStorage.getItem(\"closedAlerts\")) || [];\r\n let closedAlert =\r\n this.globalAlertId != null\r\n ? { alertId: this.alertId, pageId: null }\r\n : { alertId: this.alertId, pageId: this.pageId };\r\n this.closedAlerts.push(closedAlert);\r\n window.sessionStorage.setItem(\r\n \"closedAlerts\",\r\n JSON.stringify(this.closedAlerts)\r\n );\r\n }\r\n }\r\n\r\n moveDown() {\r\n if (\r\n this.alertsContainer.hasAttribute(\"data-two-alerts\") &&\r\n this.el.classList.contains(\"globalAlert\")\r\n ) {\r\n this.scaleRatio = 0.96;\r\n this.toYTranslate = -8;\r\n this.makeAccessible(this.pageAlertContainer);\r\n } else {\r\n this.makeAccessible(this.parent);\r\n }\r\n this.alertsContainer.classList.add(\"alert-visible\");\r\n gsap.fromTo(\r\n this.el,\r\n {\r\n y: -100,\r\n },\r\n {\r\n y: this.toYTranslate,\r\n duration: 0.4,\r\n ease: \"back.out(1.8)\",\r\n scale: this.scaleRatio,\r\n }\r\n );\r\n }\r\n\r\n makeAccessible(container) {\r\n this.dialog = new A11yDialog(container);\r\n this.dialog.show();\r\n container.querySelector(\".alert-content\").style.visibility = \"visible\";\r\n }\r\n\r\n moveUp() {\r\n const distanceToTop =\r\n this.el.getBoundingClientRect().top +\r\n this.el.getBoundingClientRect().height;\r\n\r\n const moveUp = gsap.to(this.el, {\r\n y: -distanceToTop,\r\n duration: 0.3,\r\n ease: \"power1.in\",\r\n });\r\n\r\n moveUp.eventCallback(\"onComplete\", () => {\r\n this.removeAlert();\r\n });\r\n }\r\n\r\n removeAlert() {\r\n this.parent.remove();\r\n if (this.alertsContainer.children.length > 0) {\r\n const nextAlert = this.alertsContainer.querySelector(\".alert\");\r\n gsap.to(nextAlert, {\r\n scale: this.scaleRatio,\r\n duration: 0.2,\r\n });\r\n this.makeAccessible(nextAlert.parentElement);\r\n } else {\r\n this.alertsContainer.classList.remove(\"alert-visible\");\r\n this.alertsContainer.remove();\r\n }\r\n }\r\n}\r\n","import users from \"../json/mockdata.json\";\r\nimport { EventBus, EventTypes } from \"../consts/const-event-types\";\r\n\r\n/*\r\nUse App.js for global functionality\r\n*/\r\n\r\nexport default class App {\r\n constructor(element) {\r\n // save a reference of your component-element so you can access it from your methods:\r\n this.el = element;\r\n\r\n // bind your methods to 'this' when calling them from event-listeners:\r\n this.onAppReady = this.onAppReady.bind(this);\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n // Use init-method to store DOM-references and setup initial event-listeners:\r\n if (this.el)\r\n this.someElement = this.el.querySelector(\"[data-example-js-selector]\");\r\n\r\n // You could listen for all components to be instantiated to make sure events between components are captured:\r\n EventBus.addEventListener(EventTypes.ALL_COMPONENTS_READY, this.onAppReady);\r\n }\r\n\r\n onAppReady(event) {\r\n //console.log(event.type);\r\n\r\n // create your own event-types for component-to-component communication (fx. this event will be picked up by Header.js component):\r\n const eventData = { detail: new Date().toJSON() };\r\n const ev = new CustomEvent(EventTypes.MY_CUSTOM_EVENT, eventData);\r\n EventBus.dispatchEvent(ev);\r\n\r\n this.exampleES6Features();\r\n this.exampleRenderSomeContent();\r\n }\r\n\r\n async exampleES6Features() {\r\n // use async/await to load data:\r\n\r\n const someString = \"something is rotten in Denmark\";\r\n const hasDenmark = someString.includes(\"Denmark\");\r\n\r\n const someNodeList = document.querySelectorAll(\"p\");\r\n\r\n // using ES6 syntax to convert the NodeList to an Array (gives access to useful array-methods):\r\n const convertedToArray = [...someNodeList];\r\n\r\n // import json-data:\r\n\r\n // using forEach for looping over array-items:\r\n users.forEach((user, index) => {\r\n // using Spread operators to extract properties:\r\n const { name, gender } = user;\r\n });\r\n\r\n // using a for..of loop:\r\n for (const user of users) {\r\n }\r\n\r\n // using map to loop and return a new array:\r\n const userNames = users.map((user) => user.name);\r\n\r\n // chain .filter and .map to create new array:\r\n const femaleUserNamesArray = users\r\n .filter((user) => user.gender === \"female\")\r\n .map((user) => user.name);\r\n\r\n // using reduce to fx. sum up values in array:\r\n const sumUserStars = users.reduce((sum, current) => sum + current.stars, 0);\r\n }\r\n\r\n exampleRenderSomeContent() {\r\n if (this.someElement) {\r\n // compose some HTML:\r\n const templateUsers = `\r\n
    \r\n ${users.map((user) => UserItem.template(user)).join(\"\")}\r\n
\r\n `;\r\n\r\n // insert template into DOM:\r\n this.someElement.innerHTML = templateUsers;\r\n\r\n // If JS-components are needed runtime, instantiate them manually:\r\n const nodes = [\r\n ...this.someElement.querySelectorAll('[data-component=\"user-item\"]'),\r\n ];\r\n nodes.forEach((node, idx) => new UserItem(node, users[idx]));\r\n }\r\n }\r\n}\r\n","import {getCookie} from \"../../services/service-cookies.js\";\r\nexport default class IframeComponent {\r\n constructor(element) {\r\n this.el = element; \r\n \r\n this.init();\r\n }\r\n\r\n init() {\r\n console.log(this.el.dataset.cookie)\r\n window.addEventListener('CookiebotOnAccept', (e) => {\r\n if (this.el.dataset.cookie != \"true\"){ \r\n location.reload();\r\n }\r\n }, false);\r\n\r\n window.addEventListener('CookiebotOnDecline', (e) => {\r\n if (this.el.dataset.cookie != \"false\"){ \r\n location.reload();\r\n } \r\n }, false)\r\n \r\n }\r\n\r\n \r\n}","export default class GridPicker {\r\n constructor(element) {\r\n this.el = element;\r\n this.gridEl = this.el\r\n .closest(\".main-content\")\r\n .querySelector(\".top-grid-content\");\r\n\r\n this.firstRowContainer = this.el.querySelectorAll(\".rows\")[0];\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n //check if another grid-el exists\r\n if (this.gridEl !== null) {\r\n if (this.firstRowContainer !== undefined) {\r\n //check if .multi-row is inside this.el\r\n if (!this.firstRowContainer.classList.contains(\".multi-row\")) {\r\n //get col-classes\r\n const columnClassValue =\r\n this.firstRowContainer.querySelector(\".columns\").classList.value;\r\n this.gridEl.classList.add(\"multi-row\");\r\n this.gridEl.querySelector(\".columns\").classList.value =\r\n columnClassValue;\r\n } else {\r\n this.gridEl.classList.add(\"full-row\");\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { getCookie } from \"../../services/service-cookies\";\r\nconst withinviewport = require(\"withinviewport\");\r\nconst {\r\n addScrollListener,\r\n removeScrollListener,\r\n} = require(\"@jamestomasino/scroll-frame\");\r\n\r\nexport default class GridVideo {\r\n constructor(element) {\r\n this.el = element;\r\n this.videoWrapper = this.el.querySelector(\".grid-video-wrapper\");\r\n this.playButton = this.el.querySelector(\".play-button\");\r\n this.videoInit = this.videoInit.bind(this);\r\n this.videoDestroy = this.videoDestroy.bind(this);\r\n this.videoPlayer = null;\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.cookieconsent = getCookie(\"CookieConsent\");\r\n if (this.cookieconsent && this.cookieconsent.includes(\"preferences:true\")) {\r\n this.videoInit(); \r\n }\r\n window.addEventListener('CookiebotOnAccept', (e) => {\r\n if (Cookiebot.consent.preferences) {\r\n this.videoInit(); \r\n } else { \r\n this.videoDestroy();\r\n }\r\n }, false);\r\n\r\n window.addEventListener('CookiebotOnDecline', (e) => {\r\n console.log(\"listen to cookiebot\")\r\n if (Cookiebot.consent.preferences) {\r\n this.videoInit(); \r\n } else { \r\n this.videoDestroy();\r\n }\r\n }, false)\r\n }\r\n \r\n videoInit(){ \r\n const videoId = this.el.dataset.videoid;\r\n if (this.el.hasAttribute(\"data-loop\")) {\r\n this.embedVideo(videoId);\r\n } else {\r\n if (this.el.hasAttribute(\"data-placeholder\")) {\r\n this.playButton.addEventListener(\"click\", () => {\r\n this.embedVideo(videoId);\r\n });\r\n } else {\r\n this.embedVideo(videoId);\r\n }\r\n }\r\n }\r\n\r\n videoDestroy() {\r\n if (this.videoPlayer != null){\r\n console.log(\"destroy video now\");\r\n this.videoPlayer.destroy();\r\n }\r\n }\r\n\r\n embedVideo(videoId) {\r\n const videoOptions = {\r\n id: videoId,\r\n };\r\n\r\n const videoPlayer = new Vimeo.Player(this.videoWrapper, videoOptions);\r\n this.videoPlayer = videoPlayer;\r\n videoPlayer.on(\"loaded\", () => {\r\n videoPlayer.setVolume(0);\r\n const videoEl = this.el;\r\n\r\n if (this.el.hasAttribute(\"data-loop\")) {\r\n if (withinviewport(videoEl)) {\r\n videoPlayer.play();\r\n }\r\n addScrollListener(playFirstTime);\r\n } else if (this.el.hasAttribute(\"data-placeholder\")) {\r\n videoPlayer.play();\r\n }\r\n videoPlayer.on(\"bufferend\", () => {\r\n addScrollListener(pauseIfOutOfViewport);\r\n });\r\n\r\n async function playFirstTime() {\r\n if (withinviewport(videoEl) && (await videoPlayer.getPaused())) {\r\n videoPlayer.play();\r\n\r\n removeScrollListener(playFirstTime);\r\n }\r\n }\r\n\r\n async function pauseIfOutOfViewport() {\r\n if (\r\n !withinviewport(videoEl) &&\r\n (await videoPlayer.getPaused()) === false\r\n ) {\r\n videoPlayer.pause();\r\n\r\n removeScrollListener(pauseIfOutOfViewport);\r\n videoPlayer.on(\"play\", () => {\r\n addScrollListener(pauseIfOutOfViewport);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { EventBus, EventTypes } from \"../../consts/const-event-types\";\r\n\r\nexport default class Header {\r\n constructor(element) {\r\n this.el = element;\r\n this.init();\r\n }\r\n\r\n init() {\r\n /* console.log(\"init Header\"); */\r\n }\r\n}\r\n","import { getCookie } from \"../../services/service-cookies\";\r\nexport default class HeroVideo {\r\n constructor(element) {\r\n this.el = element;\r\n this.parentHero = document.querySelector('[data-component=\"hero\"]');\r\n this.playButton = this.parentHero.querySelector(\".play-button\");\r\n this.showVideo = this.showVideo.bind(this);\r\n this.embedVideo = this.embedVideo.bind(this);\r\n this.initVideoControls = this.initVideoControls.bind(this);\r\n this.videoInit = this.videoInit.bind(this);\r\n this.videoDestroy = this.videoDestroy.bind(this);\r\n this.videoPlayer = null;\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.cookieconsent = getCookie(\"CookieConsent\");\r\n if (this.cookieconsent && this.cookieconsent.includes(\"preferences:true\")) {\r\n this.videoInit(); \r\n }\r\n window.addEventListener('CookiebotOnAccept', (e) => {\r\n if (Cookiebot.consent.preferences) {\r\n this.videoInit(); \r\n } else { \r\n this.videoDestroy();\r\n }\r\n }, false);\r\n\r\n window.addEventListener('CookiebotOnDecline', (e) => {\r\n console.log(\"listen to cookiebot\")\r\n if (Cookiebot.consent.preferences) {\r\n this.videoInit(); \r\n } else { \r\n this.videoDestroy();\r\n }\r\n }, false)\r\n }\r\n\r\n videoInit() {\r\n const videoId = this.el.dataset.videoid;\r\n let loopVideo = false;\r\n let controlsVideo = false;\r\n \r\n if (this.el.dataset.video === \"bg-video\") {\r\n loopVideo = true;\r\n this.embedVideo(videoId, loopVideo, controlsVideo);\r\n } else {\r\n controlsVideo = true;\r\n this.playButton.addEventListener(\"click\", () => {\r\n this.embedVideo(videoId, loopVideo, controlsVideo);\r\n this.showVideo();\r\n });\r\n } \r\n }\r\n\r\n videoDestroy() {\r\n if (this.videoPlayer != null){\r\n console.log(\"destroy video now\");\r\n this.videoPlayer.destroy();\r\n }\r\n }\r\n\r\n \r\n\r\n embedVideo(videoId, loopVideo, controlsVideo) {\r\n const videoOptions = {\r\n id: videoId,\r\n autoplay: loopVideo,\r\n loop: loopVideo,\r\n controls: controlsVideo,\r\n muted: loopVideo,\r\n };\r\n\r\n const videoPlayer = new Vimeo.Player(this.el, videoOptions);\r\n videoPlayer.on(\"loaded\", () => {\r\n if (controlsVideo === true) {\r\n this.initVideoControls(videoPlayer);\r\n videoPlayer.play();\r\n }\r\n\r\n videoPlayer.setVolume(0);\r\n this.videoPlayer = videoPlayer;\r\n });\r\n }\r\n\r\n showVideo() {\r\n this.parentHero.dataset.videoShown = true;\r\n this.parentHero.dataset.videoPlaying = true;\r\n }\r\n\r\n initVideoControls(videoPlayer) {\r\n videoPlayer.on(\"play\", () => {\r\n this.parentHero.dataset.videoPlaying = true;\r\n document.addEventListener(\"scroll\", trackScroll);\r\n });\r\n videoPlayer.on(\"pause\", () => {\r\n this.parentHero.dataset.videoPlaying = false;\r\n });\r\n\r\n this.playButton.addEventListener(\"click\", () => {\r\n videoPlayer.play();\r\n });\r\n\r\n //track scroll to pause the video\r\n let ticking = false;\r\n\r\n videoPlayer.on(\"bufferend\", () => {\r\n document.addEventListener(\"scroll\", trackScroll);\r\n });\r\n\r\n function trackScroll() {\r\n let lastKnownScrollPosition = scrollY;\r\n if (!ticking && lastKnownScrollPosition > 200) {\r\n window.requestAnimationFrame(function () {\r\n videoPlayer.pause();\r\n ticking = false;\r\n document.removeEventListener(\"scroll\", trackScroll);\r\n });\r\n ticking = true;\r\n }\r\n }\r\n }\r\n}\r\n","export default class Hero {\r\n constructor(element) {\r\n this.el = element;\r\n this.calculateHeight = this.calculateHeight.bind(this);\r\n this.trackScreenResize = this.trackScreenResize.bind(this);\r\n this.delay = 250;\r\n this.throttled = false;\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.calculateHeight();\r\n //track window change\r\n this.trackScreenResize();\r\n }\r\n\r\n calculateHeight() {\r\n if (!this.throttled) {\r\n this.throttled = true;\r\n //get bottom element\r\n const bottomEl = document.querySelector(\".hero-bottom\");\r\n if (bottomEl !== null) {\r\n //get it's height\r\n const elHeight = bottomEl.getBoundingClientRect().height;\r\n //get top margin of hero - has only in mobile\r\n const heroMarginTop = window.getComputedStyle(this.el).marginTop;\r\n //calculate heigth\r\n if (heroMarginTop === \"0px\") {\r\n this.el.style.height = `calc(100vh - ${elHeight}px)`;\r\n } else {\r\n this.el.style.height = `calc(100vh - ${elHeight}px - ${heroMarginTop})`;\r\n }\r\n setTimeout(() => {\r\n this.throttled = false;\r\n }, this.delay);\r\n }\r\n }\r\n }\r\n\r\n trackScreenResize() {\r\n window.addEventListener(\"resize\", this.calculateHeight);\r\n }\r\n}\r\n","export default class MasonryLayout {\r\n constructor(element) {\r\n this.el = element;\r\n this.grid = this.el.querySelector(\".grid\");\r\n this.updateMasonry = this.updateMasonry.bind(this);\r\n this.filterShows = this.filterShows.bind(this);\r\n this.filterButtons = this.el.querySelectorAll(\".filter-button\");\r\n this.addActiveFilterBtnDisplay = this.addActiveFilterBtnDisplay.bind(this);\r\n this.removeActiveFilterBtnDisplay =\r\n this.removeActiveFilterBtnDisplay.bind(this);\r\n this.mason = null;\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.updateMasonry();\r\n if (this.filterButtons) {\r\n this.filterButtons.forEach((btn) => {\r\n btn.addEventListener(\"click\", () => {\r\n if (!btn.classList.contains(\"active\")) {\r\n this.addActiveFilterBtnDisplay(btn);\r\n } else {\r\n this.removeActiveFilterBtnDisplay();\r\n }\r\n this.filterShows(btn);\r\n });\r\n });\r\n }\r\n }\r\n\r\n updateMasonry() {\r\n this.mason = new Masonry(\".grid\", {\r\n columWidth: \".grid-sizer\",\r\n percentPosition: true,\r\n });\r\n }\r\n\r\n filterShows(btn) {\r\n this.gridItems = this.el.querySelectorAll(\".grid-item\");\r\n if (btn.classList.contains(\"active\")) {\r\n const filterBy = btn.dataset.filter;\r\n\r\n this.gridItems.forEach((item) => {\r\n //hide all other than filtered items\r\n if (!item.dataset.group.includes(filterBy)) {\r\n this.hideItem(item);\r\n } else {\r\n this.showItem(item);\r\n }\r\n });\r\n } else {\r\n this.gridItems.forEach((item) => {\r\n this.showItem(item);\r\n });\r\n }\r\n this.mason.layout();\r\n }\r\n\r\n showItem(item) {\r\n item.style.display = \"block\";\r\n }\r\n\r\n hideItem(item) {\r\n item.style.display = \"none\";\r\n }\r\n\r\n addActiveFilterBtnDisplay(clickedButton) {\r\n this.filterButtons.forEach((btn) => {\r\n if (btn !== clickedButton) {\r\n btn.classList.add(\"inactive\");\r\n btn.classList.remove(\"active\");\r\n }\r\n });\r\n clickedButton.classList.add(\"active\");\r\n clickedButton.classList.remove(\"inactive\");\r\n }\r\n\r\n removeActiveFilterBtnDisplay() {\r\n this.filterButtons.forEach((btn) => {\r\n btn.classList.remove(\"inactive\");\r\n btn.classList.remove(\"active\");\r\n });\r\n }\r\n}\r\n","import { makeDialogAccessible } from \"../a11y-dialog/a11y-dialog\";\r\n\r\nexport default class Modal {\r\n static openModal(modalRef) {\r\n modalRef.removeAttribute(\"hidden\");\r\n makeDialogAccessible(modalRef);\r\n modalRef.offsetHeight;\r\n modalRef.classList.add(\"active\");\r\n document.querySelector(\"body\").style.overflow = \"hidden\";\r\n }\r\n\r\n static closeModal(el) {\r\n const listener = () => {\r\n el.setAttribute(\"hidden\", true);\r\n /* makeDialogInaccessible(this.el); */\r\n el.removeEventListener(\"transitionend\", listener);\r\n };\r\n hideModal(listener);\r\n function hideModal(listener) {\r\n el.addEventListener(\"transitionend\", listener);\r\n el.classList.remove(\"active\");\r\n document.querySelector(\"body\").style.overflow = \"auto\";\r\n }\r\n }\r\n}\r\n","export default class Navigation {\r\n constructor(element) {\r\n this.el = element;\r\n this.navBtn = document.querySelector(\".nav-toggle\");\r\n /* this.navWrapper = this.el.querySelector(\".nav-wrapper\"); */\r\n this.openNav = this.openNav.bind(this);\r\n this.toggleNavBtnDisplay = this.toggleNavBtnDisplay.bind(this);\r\n this.hideScrollBar = this.hideScrollBar.bind(this);\r\n this.closeNav = this.closeNav.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.navBtn.addEventListener(\"click\", () => {\r\n if (!this.navBtn.classList.contains(\"active\")) {\r\n this.navBtn.classList.add(\"active\");\r\n\r\n this.openNav();\r\n } else {\r\n this.navBtn.classList.remove(\"active\");\r\n this.closeNav();\r\n }\r\n this.toggleNavBtnDisplay();\r\n });\r\n }\r\n\r\n openNav() {\r\n this.el.style.visibility = \"visible\";\r\n this.el.style.opacity = \"1\";\r\n this.el.classList.add(\"scroll\");\r\n document.querySelector(\"body\").style.overflow = \"hidden\";\r\n this.hideScrollBar();\r\n }\r\n\r\n closeNav() {\r\n this.el.style.visibility = \"hidden\";\r\n this.el.style.opacity = \"0\";\r\n this.el.classList.remove(\"scroll\");\r\n document.querySelector(\"body\").style.overflow = \"auto\";\r\n }\r\n\r\n toggleNavBtnDisplay() {\r\n this.text = this.navBtn.querySelector(\".text\");\r\n this.menu = this.navBtn.querySelector(\".menu-icon\");\r\n this.cross = this.navBtn.querySelector(\".cross-icon\");\r\n if (this.navBtn.classList.contains(\"active\")) {\r\n this.text.textContent = \"LUK\";\r\n this.menu.style.display = \"none\";\r\n this.cross.style.display = \"inline\";\r\n } else {\r\n this.text.textContent = \"MENU\";\r\n this.cross.style.display = \"none\";\r\n this.menu.style.display = \"inline\";\r\n }\r\n }\r\n\r\n hideScrollBar() {\r\n //calculate scrollbar width and add it as padding to nav\r\n this.el.style.paddingRight =\r\n this.el.offsetWidth - this.el.clientWidth + \"px\";\r\n }\r\n}\r\n","export default class PosterForm {\r\n constructor(element) {\r\n this.el = element;\r\n this.toggleDetailsInput = this.toggleDetailsInput.bind(this);\r\n this.posterFormatCheckBoxes = this.el.querySelectorAll(\r\n '.checkbox-with-details input[type=\"checkbox\"]'\r\n );\r\n this.init();\r\n }\r\n\r\n init() {\r\n console.log(\"init form\");\r\n console.log(this.posterFormatCheckBoxes);\r\n this.posterFormatCheckBoxes.forEach((el) => {\r\n el.addEventListener(\"input\", (e) => this.toggleDetailsInput(e));\r\n });\r\n }\r\n\r\n toggleDetailsInput(e) {\r\n const checkbox = e.target;\r\n const inputDetails = checkbox\r\n .closest(\".checkbox-with-details\")\r\n .querySelector(\".details\");\r\n if (checkbox.checked === true) {\r\n inputDetails.style.opacity = \"1\";\r\n } else {\r\n inputDetails.style.opacity = \"0\";\r\n }\r\n }\r\n}\r\n","export default class Reviews {\r\n constructor(element) {\r\n this.el = element;\r\n this.reviews = this.el.querySelectorAll(\".review\");\r\n this.changeLayout = this.changeLayout.bind(this);\r\n this.init();\r\n }\r\n\r\n init() {\r\n const numberOfReviews = this.reviews.length;\r\n if (numberOfReviews > 5) {\r\n this.changeLayout(numberOfReviews);\r\n }\r\n }\r\n\r\n changeLayout(numberOfReviews) {\r\n /* console.log(numberOfReviews, \"reviews\"); */\r\n switch (numberOfReviews) {\r\n case 6:\r\n this.reviews.forEach((element) => {\r\n element.style.width = \"33.33%\";\r\n });\r\n break;\r\n case 7:\r\n this.reviews.forEach((element) => {\r\n element.style.width = \"25%\";\r\n });\r\n }\r\n }\r\n}\r\n","export default class Expandable {\r\n constructor(element) {\r\n this.el = element;\r\n this.button = this.el.querySelector(\".expand-button\");\r\n this.buttonText = this.button.querySelector(\".text\");\r\n this.buttonIcon = this.button.querySelector(\"span:first-of-type\");\r\n this.content = this.el.querySelector(\".richtext-content\");\r\n this.setHeight = this.setHeight.bind(this);\r\n this.delay = 1000;\r\n this.throttled = false;\r\n this.prevWidth = window.innerWidth;\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.setHeight();\r\n this.button.addEventListener(\"click\", () => {\r\n this.toggleContent(this.el);\r\n });\r\n window.addEventListener(\"resize\", (e) => {\r\n if (window.innerWidth !== this.prevWidth) {\r\n this.prevWidth = window.innerWidth;\r\n this.setHeight();\r\n }\r\n });\r\n }\r\n\r\n setHeight() {\r\n //this.throttled = true;\r\n this.content.classList.remove(\"height-is-set\");\r\n const isExpanded = this.content.classList.contains(\"expanded\");\r\n //check if already expanded\r\n if (isExpanded) {\r\n this.content.classList.remove(\"expanded\");\r\n }\r\n\r\n this.content.style.setProperty(\r\n \"--containerHeight\",\r\n `${this.content.getBoundingClientRect().height}px`\r\n );\r\n setTimeout(() => {\r\n this.content.classList.add(\"height-is-set\");\r\n if (isExpanded) {\r\n this.content.classList.add(\"expanded\");\r\n }\r\n }, 0);\r\n //setTimeout(() => (this.throttled = false), this.delay);\r\n }\r\n\r\n toggleContent() {\r\n if (!this.content.classList.contains(\"expanded\")) {\r\n this.content.classList.add(\"expanded\");\r\n this.buttonText.textContent = \"Vis mindre\";\r\n this.buttonIcon.classList.remove(\"plus-icon\");\r\n this.buttonIcon.classList.add(\"minus-icon\");\r\n } else {\r\n this.content.classList.remove(\"expanded\");\r\n this.buttonText.textContent = \"Læs mere\";\r\n this.buttonIcon.classList.add(\"plus-icon\");\r\n this.buttonIcon.classList.remove(\"minus-icon\");\r\n }\r\n }\r\n\r\n static hideContentFromExternal(el) {\r\n const content = el.querySelector(\".richtext-content\");\r\n if (content.classList.contains(\"expanded\")) {\r\n const btnIcon = el.querySelector(\"span:first-of-type\");\r\n const btnText = el.querySelector(\".text\");\r\n\r\n content.classList.remove(\"expanded\");\r\n btnText.textContent = \"Læs mere\";\r\n btnIcon.classList.add(\"plus-icon\");\r\n btnIcon.classList.remove(\"minus-icon\");\r\n }\r\n }\r\n}\r\n","import Accordion from \"../accordion/accordion\";\r\nimport supportsWebP from 'supports-webp';\r\nexport default class ScrollTo {\r\n constructor(element) {\r\n this.el = element;\r\n this.links = this.el.querySelectorAll('[data-scroll=\"true\"]');\r\n this.scrollTo = this.scrollTo.bind(this);\r\n this.canUseWebP = this.canUseWebP.bind(this);\r\n this.init();\r\n }\r\n init() {\r\n this.canUseWebP();\r\n this.supportFormatWebp();\r\n this.checkWebpSupport()\r\n this.check_webp_feature('lossy', function (feature, isSupported) {\r\n if (isSupported) {\r\n //console.log('Google way: Supports WebP!');\r\n } else { \r\n //console.log('Google way: Does NOT support WebP!');\r\n }\r\n });\r\n this.links.forEach((link) => {\r\n link.addEventListener(\"click\", (e) => {\r\n /* this.scrollTo(e); */\r\n const linkTo = e.currentTarget.attributes.href.nodeValue;\r\n\r\n if (linkTo === \"#tour-tickets\") {\r\n Accordion.openFromExternal(document.querySelector(linkTo));\r\n }\r\n });\r\n });\r\n }\r\n\r\n scrollTo(e) {\r\n e.preventDefault();\r\n const linkTo = e.currentTarget.attributes.href.nodeValue;\r\n gsap.to(window, { duration: 0.8, scrollTo: linkTo });\r\n if (linkTo === \"#tour-tickets\") {\r\n Accordion.openFromExternal(document.querySelector(linkTo));\r\n }\r\n }\r\n\r\n canUseWebP() {\r\n var webPsupport = (function() {\r\n var webP = new Image();\r\n webP.onload = WebP.onerror = function () {\r\n callback(webP.height == 2);\r\n };\r\n webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\r\n });\r\n //console.log(webPsupport ? 'Image: webP supported!' : 'Image: webP not supported.');\r\n }\r\n\r\n supportFormatWebp() {\r\n var elem = document.createElement('canvas');\r\n if (!!(elem.getContext && elem.getContext('2d'))) {\r\n // was able or not to get WebP representation\r\n //console.log(\"Canvas trick: webP supported!\");\r\n //console.log(elem.toDataURL('image/webp'));\r\n return elem.toDataURL('image/webp').indexOf('data:image/webp') == 0;\r\n }\r\n else {\r\n // very old browser like IE 8, canvas not supported\r\n //console.log(\"Canvas trick: webP NOT supported!\");\r\n return false;\r\n }\r\n }\r\n\r\n checkWebpSupport(){\r\n supportsWebP.then(supported => {\r\n if (supported) {\r\n //console.log('NPM package: Supports WebP!');\r\n } else {\r\n //console.log('NPM package: Does NOT support WebP!');\r\n }\r\n });\r\n }\r\n\r\n // check_webp_feature:\r\n // 'feature' can be one of 'lossy', 'lossless', 'alpha' or 'animation'.\r\n // 'callback(feature, isSupported)' will be passed back the detection result (in an asynchronous way!)\r\n check_webp_feature(feature, callback) {\r\n var kTestImages = {\r\n lossy: \"UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",\r\n lossless: \"UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==\",\r\n alpha: \"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==\",\r\n animation: \"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA\"\r\n };\r\n var img = new Image();\r\n img.onload = function () {\r\n var result = (img.width > 0) && (img.height > 0);\r\n callback(feature, result);\r\n };\r\n img.onerror = function () {\r\n callback(feature, false);\r\n };\r\n img.src = \"data:image/webp;base64,\" + kTestImages[feature];\r\n }\r\n}\r\n","import Splide from \"@splidejs/splide\";\r\nimport { AutoScroll } from \"@splidejs/splide-extension-auto-scroll\";\r\nimport { isDesktop } from \"../../services/service-utils\";\r\nimport Expandable from \"../richtext/richtext\";\r\n\r\nexport default class SplideSlider {\r\n constructor(element) {\r\n this.el = element;\r\n\r\n\r\n\r\n //TODO: find better solution to this quick fix\r\n \r\n this.el.classList.remove(\"mobile-splice\");\r\n this.mountShowsCarousel = this.mountShowsCarousel.bind(this);\r\n this.mountGridCarousel = this.mountGridCarousel.bind(this);\r\n this.mountDetailedGridCarousel =\r\n this.mountDetailedGridCarousel.bind(this);\r\n this.mountReviewsCarousel = this.mountReviewsCarousel.bind(this);\r\n this.openFullImage = this.openFullImage.bind(this);\r\n this.init();\r\n this.starringModal;\r\n \r\n }\r\n\r\n init() {\r\n const carouselClass = Array.from(this.el.classList).find((c) =>\r\n c.includes(\"carousel\")\r\n );\r\n let autowidth = isDesktop() ? true: false;\r\n switch (carouselClass) {\r\n case \"shows-carousel\":\r\n this.mountShowsCarousel();\r\n break;\r\n\r\n case \"grid-carousel\":\r\n if (this.el.dataset.details === \"false\") {\r\n //create slider without details text\r\n this.mountGridCarousel();\r\n } else {\r\n //create slider with details text\r\n this.mountDetailedGridCarousel(autowidth);\r\n }\r\n break;\r\n\r\n case \"reviews-carousel\":\r\n this.mountReviewsCarousel();\r\n break;\r\n case \"starring-carousel\":\r\n if (this.el.classList.contains(\"main-starring\")) {\r\n this.mountStarringCarouselMain();\r\n }\r\n break;\r\n }\r\n }\r\n openFullImage(img) {\r\n console.log(\"open full image\");\r\n const clone = img.cloneNode(true);\r\n\r\n console.log(clone);\r\n const parent = document.querySelector(\".content\");\r\n const container = document.createElement(\"div\");\r\n container.classList.add(\"exp-img-container\");\r\n parent.appendChild(container);\r\n container.appendChild(clone);\r\n clone.ariaExpanded = \"true\";\r\n container.querySelector(\".carousel-image\").remove();\r\n }\r\n\r\n mountShowsCarousel() {\r\n let firstSlide = this.el.querySelector('[data-currentshow=\"true\"]').dataset\r\n .slideId;\r\n new Splide(this.el, {\r\n type: \"loop\",\r\n keyboard: \"focused\",\r\n start: firstSlide,\r\n focus: \"center\",\r\n arrows: true,\r\n pagination: false,\r\n padding: 50,\r\n perPage: 3,\r\n focusableNodes: \"button\",\r\n mediaQuery: \"min\",\r\n breakpoints: {\r\n 1023: {\r\n perPage: 5,\r\n },\r\n },\r\n }).mount();\r\n }\r\n\r\n mountGridCarousel() {\r\n new Splide(this.el, {\r\n autoScroll: {\r\n speed: 0.5,\r\n autoStart: true,\r\n },\r\n type: \"loop\",\r\n pagination: false,\r\n arrows: false,\r\n perPage: 1,\r\n focusableNodes: \"button\",\r\n mediaQuery: \"min\",\r\n breakpoints: {\r\n 1000: {\r\n perPage: 2,\r\n },\r\n 1500: {\r\n perPage: 3,\r\n },\r\n },\r\n }).mount({ AutoScroll });\r\n\r\n /* this.el.querySelectorAll(\".img-carousel-button\").forEach((btn) => {\r\n btn.addEventListener(\"click\", () => {\r\n if (btn.querySelector(\".grid-image\").ariaExpanded === \"false\") {\r\n const img = btn.querySelector(\".grid-image\");\r\n console.log(btn.querySelector(\".grid-image\"));\r\n this.openFullImage(img);\r\n btn.querySelector(\".grid-image\").ariaExpanded = \"true\";\r\n console.log(btn.querySelector(\".grid-image\").ariaExpanded);\r\n } else {\r\n this.openFullImage();\r\n btn.querySelector(\".grid-image\").ariaExpanded = \"false\";\r\n console.log(btn.querySelector(\".grid-image\").ariaExpanded);\r\n }\r\n });\r\n }); */\r\n }\r\n\r\n mountDetailedGridCarousel(autowidth) {\r\n new Splide(this.el, {\r\n type: \"loop\",\r\n keyboard: \"focused\",\r\n pagination: true,\r\n arrows: true,\r\n perPage: 1,\r\n focus: \"center\",\r\n autoWidth: autowidth,\r\n updateOnMove: true,\r\n mediaQuery: \"min\",\r\n focusableNodes: \"button\",\r\n breakpoints: {\r\n 1500: {\r\n /* padding: 300, */\r\n gap: 50,\r\n },\r\n },\r\n }).mount();\r\n }\r\n\r\n mountReviewsCarousel() {\r\n new Splide(this.el, {\r\n type: \"slide\",\r\n keyboard: \"focused\",\r\n pagination: true,\r\n arrows: false,\r\n gap: 100,\r\n perPage: 1,\r\n focus: \"center\",\r\n interval: 8000,\r\n autoplay: true,\r\n }).mount();\r\n }\r\n\r\n mountStarringCarouselMain() {\r\n let carouselType = \"loop\";\r\n if (this.el.dataset.actorsTotal == 1) {\r\n carouselType = \"slide\";\r\n }\r\n //const el = document.querySelector(\".starring-carousel.main-starring\");\r\n new Splide(this.el, {\r\n type: carouselType,\r\n gap: 0,\r\n padding: 0,\r\n keyboard: \"focused\",\r\n perPage: 1,\r\n focus: \"center\",\r\n arrows: true,\r\n pagination: false,\r\n //focusableNodes: \"button\",\r\n rewind: false,\r\n perMove: 1,\r\n autoWidth: false,\r\n mediaQuery: \"min\",\r\n breakpoints: {\r\n 1200: {\r\n perPage: 5,\r\n gap: 40,\r\n perMove: 1,\r\n autoWidth: false,\r\n },\r\n 1920: {\r\n autoWidth: true,\r\n gap: 100,\r\n },\r\n },\r\n }).mount();\r\n }\r\n\r\n static mountStarringCarouselModal(el, slideId, carouselType) {\r\n /* Destroy previous starring slider if exists */\r\n if (this.starringModal) {\r\n this.starringModal.destroy();\r\n }\r\n\r\n //const el = document.querySelector(\".starring-carousel.modal-starring\");\r\n\r\n this.starringModal = new Splide(el, {\r\n type: carouselType,\r\n fixedWidth: 1000,\r\n width: 1000,\r\n keyboard: \"focused\",\r\n perPage: 1,\r\n start: slideId,\r\n focus: \"center\",\r\n arrows: true,\r\n pagination: false,\r\n focusableNodes: \"button\",\r\n rewind: false,\r\n }).mount();\r\n }\r\n}\r\n","import Modal from \"../modal/modal\";\r\nimport SplideSlider from \"../splide/splide\";\r\nimport { makeDialogInaccessible } from \"../a11y-dialog/a11y-dialog\";\r\nimport { isMobile, isTablet } from \"../../services/service-utils\";\r\n\r\nexport default class Starring {\r\n constructor(element) {\r\n this.el = element;\r\n this.carouselType = \"loop\";\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (this.el.dataset.actorsTotal == 1) {\r\n this.carouselType = \"slide\";\r\n }\r\n //SplideSlider.mountStarringCarouselMain(this.carouselType);\r\n const modalElement = this.el.nextElementSibling;\r\n const modalCarousel = modalElement.querySelector(\r\n \".starring-carousel.modal-starring\"\r\n );\r\n this.btns = this.el.querySelectorAll(\".starring-btn\");\r\n this.btns.forEach((btn) => {\r\n btn.addEventListener(\"click\", () => {\r\n const slideId = btn.querySelector(\".person\").dataset.slideId;\r\n Modal.openModal(modalElement);\r\n SplideSlider.mountStarringCarouselModal(\r\n modalCarousel,\r\n slideId,\r\n this.carouselType\r\n );\r\n /* track and close modal when mq is reached */\r\n //mq-sm variable\r\n const mq = window.matchMedia(\"(max-width: 1199px)\");\r\n function handleViewportChange() {\r\n // Check if the media query is true\r\n if (isTablet()) {\r\n makeDialogInaccessible();\r\n mq.removeEventListener(\"change\", handleViewportChange);\r\n }\r\n }\r\n // Register event listener\r\n mq.addEventListener(\"change\", handleViewportChange);\r\n\r\n handleViewportChange();\r\n });\r\n });\r\n }\r\n}\r\n","export const EventBus = document.body;\r\nexport const EventTypes = Object.freeze({\r\n ALL_COMPONENTS_READY: \"ALL_COMPONENTS_READY\",\r\n MY_CUSTOM_EVENT: \"MY_CUSTOM_EVENT\",\r\n});\r\n","\r\nexport const getCookie = key => {\r\n const cookies = document.cookie\r\n if(!cookies) return null\r\n const cookieArray = cookies.split(';')\r\n const value = cookieArray\r\n .filter(cookie => {\r\n while(cookie.charAt(0) === ' ') cookie = cookie.substring(1)\r\n return cookie.split(/(?<=])/)[0] === key\r\n })\r\n .map(cookie => {\r\n while(cookie.charAt(0) === ' ') cookie = cookie.substring(1)\r\n return cookie.split(/(?<=])/)[1]\r\n })[0]\r\n\r\n if(value) {\r\n return decodeURIComponent(value)\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nexport const setCookie = (key, value, exdays = 365) => {\r\n const cookieValueString = value ? encodeURIComponent(value) : ''\r\n const d = new Date()\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000))\r\n const expires = \"expires=\" + d.toUTCString()\r\n document.cookie = `${key}=${cookieValueString};${expires};path=/;SameSite=Lax`\r\n}\r\n","export const isMobile = () => {\r\n return window.matchMedia(\"(max-width: 753px)\").matches;\r\n};\r\nexport const isTablet = () => {\r\n return window.matchMedia(\"(max-width: 1199px)\").matches;\r\n};\r\n\r\nexport const isDesktop = () => {\r\n return window.matchMedia(\"(min-width: 1024px)\").matches;\r\n};\r\n\r\nexport const getViewPortWidth = () => {\r\n return Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\r\n};\r\n\r\nexport const getViewPortHeight = () => {\r\n return Math.max(\r\n document.documentElement.clientHeight,\r\n window.innerHeight || 0\r\n );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport {};","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","/**\n * Within Viewport\n *\n * @description Determines whether an element is completely within the browser viewport\n * @author Craig Patik, http://patik.com/\n * @version 2.1.2\n * @date 2019-08-16\n */\n(function (root, name, factory) {\n // AMD\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n }\n // Node and CommonJS-like environments\n else if (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = factory();\n }\n // Browser global\n else {\n root[name] = factory();\n }\n}(this, 'withinviewport', function () {\n var canUseWindowDimensions = typeof window !== 'undefined' && window.innerHeight !== undefined; // IE 8 and lower fail this\n\n /**\n * Determines whether an element is within the viewport\n * @param {Object} elem DOM Element (required)\n * @param {Object} options Optional settings\n * @return {Boolean} Whether the element was completely within the viewport\n */\n var withinviewport = function withinviewport(elem, options) {\n var result = false;\n var metadata = {};\n var config = {};\n var settings;\n var isWithin;\n var isContainerTheWindow;\n var elemBoundingRect;\n var containerBoundingRect;\n var containerScrollTop;\n var containerScrollLeft;\n var scrollBarWidths = [0, 0];\n var sideNamesPattern;\n var sides;\n var side;\n var i;\n\n // If invoked by the jQuery plugin, get the actual DOM element\n if (typeof jQuery !== 'undefined' && elem instanceof jQuery) {\n elem = elem.get(0);\n }\n\n if (typeof elem !== 'object' || elem.nodeType !== 1) {\n throw new Error('First argument must be an element');\n }\n\n // Look for inline settings on the element\n if (elem.getAttribute('data-withinviewport-settings') && window.JSON) {\n metadata = JSON.parse(elem.getAttribute('data-withinviewport-settings'));\n }\n\n // Settings argument may be a simple string (`top`, `right`, etc)\n if (typeof options === 'string') {\n settings = {\n sides: options\n };\n } else {\n settings = options || {};\n }\n\n // Build configuration from defaults and user-provided settings and metadata\n config.container = settings.container || metadata.container || withinviewport.defaults.container || window;\n config.sides = settings.sides || metadata.sides || withinviewport.defaults.sides || 'all';\n config.top = settings.top || metadata.top || withinviewport.defaults.top || 0;\n config.right = settings.right || metadata.right || withinviewport.defaults.right || 0;\n config.bottom = settings.bottom || metadata.bottom || withinviewport.defaults.bottom || 0;\n config.left = settings.left || metadata.left || withinviewport.defaults.left || 0;\n\n // Extract the DOM node from a jQuery collection\n if (typeof jQuery !== 'undefined' && config.container instanceof jQuery) {\n config.container = config.container.get(0);\n }\n\n // Use the window as the container if the user specified the body or a non-element\n if (config.container === document.body || config.container.nodeType !== 1) {\n config.container = window;\n }\n\n isContainerTheWindow = (config.container === window);\n\n // Element testing methods\n isWithin = {\n // Element is below the top edge of the viewport\n top: function _isWithin_top() {\n if (isContainerTheWindow) {\n return (elemBoundingRect.top >= config.top);\n } else {\n return (elemBoundingRect.top >= containerScrollTop - (containerScrollTop - containerBoundingRect.top) + config.top);\n }\n },\n\n // Element is to the left of the right edge of the viewport\n right: function _isWithin_right() {\n // Note that `elemBoundingRect.right` is the distance from the *left* of the viewport to the element's far right edge\n\n if (isContainerTheWindow) {\n return (elemBoundingRect.right <= (containerBoundingRect.right + containerScrollLeft) - config.right);\n } else {\n return (elemBoundingRect.right <= containerBoundingRect.right - scrollBarWidths[0] - config.right);\n }\n },\n\n // Element is above the bottom edge of the viewport\n bottom: function _isWithin_bottom() {\n var containerHeight = 0;\n\n if (isContainerTheWindow) {\n if (canUseWindowDimensions) {\n containerHeight = config.container.innerHeight;\n } else if (document && document.documentElement) {\n containerHeight = document.documentElement.clientHeight;\n }\n } else {\n containerHeight = containerBoundingRect.bottom;\n }\n\n // Note that `elemBoundingRect.bottom` is the distance from the *top* of the viewport to the element's bottom edge\n return (elemBoundingRect.bottom <= containerHeight - scrollBarWidths[1] - config.bottom);\n },\n\n // Element is to the right of the left edge of the viewport\n left: function _isWithin_left() {\n if (isContainerTheWindow) {\n return (elemBoundingRect.left >= config.left);\n } else {\n return (elemBoundingRect.left >= containerScrollLeft - (containerScrollLeft - containerBoundingRect.left) + config.left);\n }\n },\n\n // Element is within all four boundaries\n all: function _isWithin_all() {\n // Test each boundary in order of efficiency and likeliness to be false. This way we can avoid running all four functions on most elements.\n // 1. Top: Quickest to calculate + most likely to be false\n // 2. Bottom: Note quite as quick to calculate, but also very likely to be false\n // 3-4. Left and right are both equally unlikely to be false since most sites only scroll vertically, but left is faster to calculate\n return (isWithin.top() && isWithin.bottom() && isWithin.left() && isWithin.right());\n }\n };\n\n // Get the element's bounding rectangle with respect to the viewport\n elemBoundingRect = elem.getBoundingClientRect();\n\n // Get viewport dimensions and offsets\n if (isContainerTheWindow) {\n containerBoundingRect = document.documentElement.getBoundingClientRect();\n containerScrollTop = document.body.scrollTop;\n containerScrollLeft = window.scrollX || document.body.scrollLeft;\n } else {\n containerBoundingRect = config.container.getBoundingClientRect();\n containerScrollTop = config.container.scrollTop;\n containerScrollLeft = config.container.scrollLeft;\n }\n\n // Don't count the space consumed by scrollbars\n if (containerScrollLeft) {\n scrollBarWidths[0] = 18;\n }\n\n if (containerScrollTop) {\n scrollBarWidths[1] = 16;\n }\n\n // Test the element against each side of the viewport that was requested\n sideNamesPattern = /^top$|^right$|^bottom$|^left$|^all$/;\n\n // Loop through all of the sides\n sides = config.sides.split(' ');\n i = sides.length;\n\n while (i--) {\n side = sides[i].toLowerCase();\n\n if (sideNamesPattern.test(side)) {\n if (isWithin[side]()) {\n result = true;\n } else {\n result = false;\n\n // Quit as soon as the first failure is found\n break;\n }\n }\n }\n\n return result;\n };\n\n // Default settings\n withinviewport.prototype.defaults = {\n container: typeof document !== 'undefined' ? document.body : {},\n sides: 'all',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n\n withinviewport.defaults = withinviewport.prototype.defaults;\n\n /**\n * Optional enhancements and shortcuts\n *\n * @description Uncomment or comment these pieces as they apply to your project and coding preferences\n */\n\n // Shortcut methods for each side of the viewport\n // Example: `withinviewport.top(elem)` is the same as `withinviewport(elem, 'top')`\n withinviewport.prototype.top = function _withinviewport_top(element) {\n return withinviewport(element, 'top');\n };\n\n withinviewport.prototype.right = function _withinviewport_right(element) {\n return withinviewport(element, 'right');\n };\n\n withinviewport.prototype.bottom = function _withinviewport_bottom(element) {\n return withinviewport(element, 'bottom');\n };\n\n withinviewport.prototype.left = function _withinviewport_left(element) {\n return withinviewport(element, 'left');\n };\n\n return withinviewport;\n}));\n","export default new Promise(resolve => {\n\tconst image = new Image();\n\timage.addEventListener('error', () => resolve(false));\n\timage.addEventListener('load', () => resolve(image.width === 1));\n\timage.src = 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=';\n}).catch(() => false);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import \"regenerator-runtime\";\r\nimport \"./index.css\";\r\nimport { EventBus, EventTypes } from \"./consts/const-event-types\";\r\n\r\n/*\r\nTo add new components, import them here and add them to the 'components'-array below.\r\nAdd an appropriate selectorName for use in DOM (fx:
):\r\n*/\r\nimport App from \"./components/app\";\r\nimport Header from \"./components/header/header\";\r\nimport Navigation from \"./components/navigation/navigation\";\r\nimport MasonryLayout from \"./components/masonry/masonry\";\r\nimport Accordion from \"./components/accordion/accordion\";\r\nimport ScrollTo from \"./components/scroll-to/scroll-to\";\r\nimport Hero from \"./components/hero/hero\";\r\nimport Reviews from \"./components/reviews/reviews\";\r\nimport PosterForm from \"./components/poster-form/poster-form\";\r\nimport HeroVideo from \"./components/hero-video/hero-video\";\r\nimport GridPicker from \"./components/grid-picker/grid-picker\";\r\nimport SplideSlider from \"./components/splide/splide\";\r\nimport GridVideo from \"./components/grid-video/grid-video\";\r\nimport Alert from \"./components/alert/alert\";\r\nimport Starring from \"./components/starring/starring\";\r\nimport Modal from \"./components/modal/modal\";\r\nimport Expandable from \"./components/richtext/richtext\";\r\nimport IframeComponent from \"./components/grid-iframe/iframe-component\";\r\n\r\nconst components = [\r\n { Class: App, selectorName: \"app\" },\r\n { Class: Header, selectorName: \"header\" },\r\n { Class: Navigation, selectorName: \"navigation\" },\r\n { Class: MasonryLayout, selectorName: \"masonry\" },\r\n { Class: Accordion, selectorName: \"accordion\" },\r\n { Class: Hero, selectorName: \"hero\" },\r\n { Class: ScrollTo, selectorName: \"scroll-to\" },\r\n { Class: Reviews, selectorName: \"reviews\" },\r\n { Class: PosterForm, selectorName: \"form\" },\r\n { Class: HeroVideo, selectorName: \"hero-video\" },\r\n { Class: GridPicker, selectorName: \"grid-picker\" },\r\n { Class: SplideSlider, selectorName: \"splide\" },\r\n { Class: GridVideo, selectorName: \"grid-video\" },\r\n { Class: Alert, selectorName: \"alert\" },\r\n { Class: Starring, selectorName: \"starring\" },\r\n { Class: Modal, selectorName: \"modal\" },\r\n { Class: Expandable, selectorName: \"expandable\" },\r\n { Class: IframeComponent, selectorName: \"iframe-component\" },\r\n];\r\n\r\n/*\r\n * ComponentInstantiator traverses the DOM-tree and looks for [data-component='] attributes.\r\n */\r\nclass ComponentInstantiator {\r\n constructor() {\r\n this.createComponents();\r\n this.dispatchReady();\r\n return this;\r\n }\r\n\r\n createComponents() {\r\n this.componentsInstantiated = {};\r\n\r\n components.map((component) => {\r\n const nodes = [];\r\n // select all DOM-nodes with the data-component attribute:\r\n const nodeItems = [\r\n ...document.querySelectorAll(\r\n \"[data-component='\" + component.selectorName + \"']\"\r\n ),\r\n ];\r\n\r\n nodeItems.map((nodeItem) => {\r\n // instantiate component with nodeItem as param:\r\n nodes.push(new component.Class(nodeItem));\r\n });\r\n\r\n // add to componentsList object:\r\n if (nodes.length)\r\n this.componentsInstantiated[component.selectorName] = nodes;\r\n });\r\n }\r\n\r\n dispatchReady() {\r\n const event = new CustomEvent(EventTypes.ALL_COMPONENTS_READY);\r\n EventBus.dispatchEvent(event);\r\n }\r\n\r\n getComponents(selectorName) {\r\n return selectorName\r\n ? this.componentsInstantiated[selectorName]\r\n : this.componentsInstantiated;\r\n }\r\n}\r\n\r\n/* Make your App accessible via window.App */\r\nwindow.App = new ComponentInstantiator();\r\n\r\n/* Access components list */\r\n// console.log('components on this page', window.App.getComponents())\r\n"],"names":[],"sourceRoot":""}