{"version":3,"file":"head.c40b1b874dc693cab2a2.js","mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3mBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACXA;AACA;AACA;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACptBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AChlDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACPA;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;AACA;AACA;;;;;;;;;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACtBA;AACA;AACA;;;;;;;;;;;;;;;;ACFA;AACA;AACA;;;;;;;;;;;;;;;ACFA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACLA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtEA;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;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","sources":["webpack://advantshop/./node_modules/angular-ui-bootstrap/src/position/index-nocss.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/position/position.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/stackedMap/index.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/stackedMap/stackedMap.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/tooltip/index-nocss.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/tooltip/index.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/tooltip/tooltip.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/template/tooltip/tooltip-html-popup.html.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/template/tooltip/tooltip-popup.html.js","webpack://advantshop/./node_modules/angular-ui-bootstrap/template/tooltip/tooltip-template-popup.html.js","webpack://advantshop/./Areas/Landing/frontend/_common/buttons/buttons.scss?67c5","webpack://advantshop/./Areas/Landing/frontend/_common/carousel.scss?ff16","webpack://advantshop/./Areas/Landing/frontend/_common/error.scss?c2b3","webpack://advantshop/./Areas/Landing/frontend/_common/flexboxgrid.ext.scss?ba33","webpack://advantshop/./Areas/Landing/frontend/_common/general.scss?a3b1","webpack://advantshop/./Areas/Landing/frontend/_common/lp-accordion/lp-accordion.scss?792e","webpack://advantshop/./Areas/Landing/frontend/_common/lp-form/styles/lp-form.scss?f392","webpack://advantshop/./Areas/Landing/frontend/_common/lp-head.scss?5cfb","webpack://advantshop/./Areas/Landing/frontend/_common/lp-input.scss?3010","webpack://advantshop/./Areas/Landing/frontend/_common/lp-link.scss?7da2","webpack://advantshop/./Areas/Landing/frontend/_common/lp-table.scss?e765","webpack://advantshop/./Areas/Landing/frontend/_common/responsive.scss?591b","webpack://advantshop/./Areas/Landing/frontend/_common/scroll-to-block/style/style.scss?2f06","webpack://advantshop/./Areas/Landing/frontend/_common/text-align-adaptive.scss?b59c","webpack://advantshop/./Areas/Landing/frontend/blocks/booking/styles/booking.scss?1558","webpack://advantshop/./Areas/Landing/frontend/blocks/characteristics/characteristics.scss?3624","webpack://advantshop/./Areas/Landing/frontend/blocks/columns/columns.scss?e8a7","webpack://advantshop/./Areas/Landing/frontend/blocks/contacts/contacts.scss?078d","webpack://advantshop/./Areas/Landing/frontend/blocks/countdown/styles/countdown.scss?8833","webpack://advantshop/./Areas/Landing/frontend/blocks/covers/styles/covers.scss?7ab0","webpack://advantshop/./Areas/Landing/frontend/blocks/delimiter/delimiter.scss?4d83","webpack://advantshop/./Areas/Landing/frontend/blocks/exit/exit.scss?beca","webpack://advantshop/./Areas/Landing/frontend/blocks/footer/styles/footer.scss?f88e","webpack://advantshop/./Areas/Landing/frontend/blocks/form/form.scss?3fa5","webpack://advantshop/./Areas/Landing/frontend/blocks/gallery/styles/gallery.scss?e1a3","webpack://advantshop/./Areas/Landing/frontend/blocks/image/image.scss?23e5","webpack://advantshop/./Areas/Landing/frontend/blocks/lp-cart/lp-cart.scss?e189","webpack://advantshop/./Areas/Landing/frontend/blocks/lp-header/lp-header.scss?3665","webpack://advantshop/./Areas/Landing/frontend/blocks/menu-header/menu-header.scss?665e","webpack://advantshop/./Areas/Landing/frontend/blocks/news/news.scss?d475","webpack://advantshop/./Areas/Landing/frontend/blocks/partners-logo/partners-logo.scss?befa","webpack://advantshop/./Areas/Landing/frontend/blocks/price/price.scss?6007","webpack://advantshop/./Areas/Landing/frontend/blocks/products-by-category/product-by-category.scss?28f1","webpack://advantshop/./Areas/Landing/frontend/blocks/products-view/styles/products-view.scss?cf6b","webpack://advantshop/./Areas/Landing/frontend/blocks/progressbar/progressbar.scss?9f60","webpack://advantshop/./Areas/Landing/frontend/blocks/properties/properties.scss?4d46","webpack://advantshop/./Areas/Landing/frontend/blocks/reviews-singleton/styles/reviews-singleton.scss?8a70","webpack://advantshop/./Areas/Landing/frontend/blocks/reviews/styles/reviews.scss?3c08","webpack://advantshop/./Areas/Landing/frontend/blocks/schedule/styles/schedule.scss?5402","webpack://advantshop/./Areas/Landing/frontend/blocks/services/services.scss?c5b9","webpack://advantshop/./Areas/Landing/frontend/blocks/social/social.scss?01a6","webpack://advantshop/./Areas/Landing/frontend/blocks/team/team.scss?c23a","webpack://advantshop/./Areas/Landing/frontend/blocks/text/text.scss?af33","webpack://advantshop/./Areas/Landing/frontend/blocks/user/user.scss?e541","webpack://advantshop/./Areas/Landing/frontend/blocks/video/video.scss?6147","webpack://advantshop/./Areas/Landing/frontend/vendors/slick/slick-theme.scss?412a","webpack://advantshop/./Areas/Mobile/scripts/_common/tableResponsive/styles/tableResponsive.scss?237f","webpack://advantshop/./fonts/fonts.funnel.css?db38","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/position/position.css?6b16","webpack://advantshop/./node_modules/angular-ui-bootstrap/src/tooltip/tooltip.css?5273","webpack://advantshop/./node_modules/flexboxgrid/dist/flexboxgrid.css?4d24","webpack://advantshop/./node_modules/normalize.css/normalize.css?dc5f","webpack://advantshop/./node_modules/slick-carousel/slick/slick-theme.scss?2133","webpack://advantshop/./node_modules/slick-carousel/slick/slick.scss?263a","webpack://advantshop/./scripts/_common/carousel/styles/carousel.scss?a989","webpack://advantshop/./scripts/_common/iframe-responsive/styles/iframe-responsive.scss?74eb","webpack://advantshop/./scripts/_common/rating/styles/rating.scss?1795","webpack://advantshop/./scripts/_common/spinbox/styles/spinbox.scss?0c11","webpack://advantshop/./scripts/_common/tabs/styles/tabs.scss?4ab8","webpack://advantshop/./scripts/_common/transformer/styles/transformer.scss?ab8e","webpack://advantshop/./scripts/_mobile/full-height-mobile/full-height-mobile.scss?f643","webpack://advantshop/./scripts/_partials/colors-viewer/styles/colors-viewer.scss?be5c","webpack://advantshop/./scripts/_partials/custom-options/styles/customOptions.scss?0fd2","webpack://advantshop/./scripts/_partials/sizes-viewer/styles/sizes-viewer.scss?2a0d","webpack://advantshop/./styles/common/connector.scss?4e3a","webpack://advantshop/./styles/common/custom-input.scss?3d5f","webpack://advantshop/./styles/common/icons.scss?09c7","webpack://advantshop/./styles/common/tooltip.scss?8f22","webpack://advantshop/./styles/views/product.scss?ce10","webpack://advantshop/./scripts/_common/carousel/carousel.module.js","webpack://advantshop/./scripts/_common/carousel/carouselNative.js","webpack://advantshop/./scripts/_common/carousel/controllers/carouselController.js","webpack://advantshop/./scripts/_common/carousel/directives/carouselDirectives.js","webpack://advantshop/./scripts/_common/carousel/services/carouselService.js","webpack://advantshop/./scripts/_common/iframe-responsive/controllers/iframeResponsiveController.js","webpack://advantshop/./scripts/_common/iframe-responsive/directives/iframeResponsiveDirective.js","webpack://advantshop/./scripts/_common/iframe-responsive/iframeResponsive.module.js","webpack://advantshop/./scripts/_common/iframe-responsive/services/iframeResponsiveService.js","webpack://advantshop/./scripts/_common/iframe-responsive/templates/iframeResponsiveTemplates.js","webpack://advantshop/./scripts/_common/lozad-adv/lozadAdv.constants.js","webpack://advantshop/./scripts/_common/lozad-adv/lozadAdv.ctrl.js","webpack://advantshop/./scripts/_common/lozad-adv/lozadAdv.directive.js","webpack://advantshop/./scripts/_common/lozad-adv/lozadAdv.module.js","webpack://advantshop/./scripts/_common/rating/controllers/ratingController.js","webpack://advantshop/./scripts/_common/rating/directives/ratingDirectives.js","webpack://advantshop/./scripts/_common/rating/rating.module.js","webpack://advantshop/./scripts/_common/spinbox/controllers/spinboxController.js","webpack://advantshop/./scripts/_common/spinbox/directives/spinboxDirectives.js","webpack://advantshop/./scripts/_common/spinbox/spinbox.js","webpack://advantshop/./scripts/_common/spinbox/spinbox.module.js","webpack://advantshop/./scripts/_common/tabs/controllers/tabContentController.js","webpack://advantshop/./scripts/_common/tabs/controllers/tabHeaderController.js","webpack://advantshop/./scripts/_common/tabs/controllers/tabsController.js","webpack://advantshop/./scripts/_common/tabs/directives/tabsDirectives.js","webpack://advantshop/./scripts/_common/tabs/services/tabsService.js","webpack://advantshop/./scripts/_common/tabs/tabs.module.js","webpack://advantshop/./scripts/_common/transformer/controllers/transformerController.js","webpack://advantshop/./scripts/_common/transformer/directives/transformerDirectives.js","webpack://advantshop/./scripts/_common/transformer/services/transformerService.js","webpack://advantshop/./scripts/_common/transformer/transformer.js","webpack://advantshop/./scripts/_common/transformer/transformer.module.js","webpack://advantshop/./scripts/_mobile/full-height-mobile/full-height-mobile.module.js","webpack://advantshop/./scripts/_partials/colors-viewer/colorsViewer.module.js","webpack://advantshop/./scripts/_partials/colors-viewer/controllers/colorsViewerController.js","webpack://advantshop/./scripts/_partials/colors-viewer/directives/colorsViewerDirectives.js","webpack://advantshop/./scripts/_partials/custom-options/controllers/customOptionsController.js","webpack://advantshop/./scripts/_partials/custom-options/customOptions.module.js","webpack://advantshop/./scripts/_partials/custom-options/directives/customOptionsDirectives.js","webpack://advantshop/./scripts/_partials/custom-options/services/customOptionsService.js","webpack://advantshop/./scripts/_partials/sizes-viewer/controllers/sizesViewerController.js","webpack://advantshop/./scripts/_partials/sizes-viewer/directives/sizesViewerDirectives.js","webpack://advantshop/./scripts/_partials/sizes-viewer/sizesViewer.module.js","webpack://advantshop/./scripts/appDependency.js","webpack://advantshop/./vendors/lozad/lozad.custom.js","webpack://advantshop/./vendors/qazy/qazyOpt.head.js","webpack://advantshop/./vendors/qazy/qazyOpt.js","webpack://advantshop/./node_modules/debounce-fn/index.js","webpack://advantshop/./node_modules/mimic-fn/index.js","webpack://advantshop/webpack/bootstrap","webpack://advantshop/webpack/runtime/define property getters","webpack://advantshop/webpack/runtime/hasOwnProperty shorthand","webpack://advantshop/webpack/runtime/make namespace object","webpack://advantshop/webpack/runtime/publicPath","webpack://advantshop/./Areas/Landing/bundle_config/head.js"],"sourcesContent":["require('./position');\n\nvar MODULE_NAME = 'ui.bootstrap.module.position';\n\nangular.module(MODULE_NAME, ['ui.bootstrap.position']);\n\nmodule.exports = MODULE_NAME;\n","angular.module('ui.bootstrap.position', [])\n\n/**\n * A set of utility methods for working with the DOM.\n * It is meant to be used where we need to absolute-position elements in\n * relation to another element (this is the case for tooltips, popovers,\n * typeahead suggestions etc.).\n */\n .factory('$uibPosition', ['$document', '$window', function($document, $window) {\n /**\n * Used by scrollbarWidth() function to cache scrollbar's width.\n * Do not access this variable directly, use scrollbarWidth() instead.\n */\n var SCROLLBAR_WIDTH;\n /**\n * scrollbar on body and html element in IE and Edge overlay\n * content and should be considered 0 width.\n */\n var BODY_SCROLLBAR_WIDTH;\n var OVERFLOW_REGEX = {\n normal: /(auto|scroll)/,\n hidden: /(auto|scroll|hidden)/\n };\n var PLACEMENT_REGEX = {\n auto: /\\s?auto?\\s?/i,\n primary: /^(top|bottom|left|right)$/,\n secondary: /^(top|bottom|left|right|center)$/,\n vertical: /^(top|bottom)$/\n };\n var BODY_REGEX = /(HTML|BODY)/;\n\n return {\n\n /**\n * Provides a raw DOM element from a jQuery/jQLite element.\n *\n * @param {element} elem - The element to convert.\n *\n * @returns {element} A HTML element.\n */\n getRawNode: function(elem) {\n return elem.nodeName ? elem : elem[0] || elem;\n },\n\n /**\n * Provides a parsed number for a style property. Strips\n * units and casts invalid numbers to 0.\n *\n * @param {string} value - The style value to parse.\n *\n * @returns {number} A valid number.\n */\n parseStyle: function(value) {\n value = parseFloat(value);\n return isFinite(value) ? value : 0;\n },\n\n /**\n * Provides the closest positioned ancestor.\n *\n * @param {element} element - The element to get the offest parent for.\n *\n * @returns {element} The closest positioned ancestor.\n */\n offsetParent: function(elem) {\n elem = this.getRawNode(elem);\n\n var offsetParent = elem.offsetParent || $document[0].documentElement;\n\n function isStaticPositioned(el) {\n return ($window.getComputedStyle(el).position || 'static') === 'static';\n }\n\n while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || $document[0].documentElement;\n },\n\n /**\n * Provides the scrollbar width, concept from TWBS measureScrollbar()\n * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js\n * In IE and Edge, scollbar on body and html element overlay and should\n * return a width of 0.\n *\n * @returns {number} The width of the browser scollbar.\n */\n scrollbarWidth: function(isBody) {\n if (isBody) {\n if (angular.isUndefined(BODY_SCROLLBAR_WIDTH)) {\n var bodyElem = $document.find('body');\n bodyElem.addClass('uib-position-body-scrollbar-measure');\n BODY_SCROLLBAR_WIDTH = $window.innerWidth - bodyElem[0].clientWidth;\n BODY_SCROLLBAR_WIDTH = isFinite(BODY_SCROLLBAR_WIDTH) ? BODY_SCROLLBAR_WIDTH : 0;\n bodyElem.removeClass('uib-position-body-scrollbar-measure');\n }\n return BODY_SCROLLBAR_WIDTH;\n }\n\n if (angular.isUndefined(SCROLLBAR_WIDTH)) {\n var scrollElem = angular.element('
');\n $document.find('body').append(scrollElem);\n SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;\n SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;\n scrollElem.remove();\n }\n\n return SCROLLBAR_WIDTH;\n },\n\n /**\n * Provides the padding required on an element to replace the scrollbar.\n *\n * @returns {object} An object with the following properties:\n * \n */\n scrollbarPadding: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemStyle = $window.getComputedStyle(elem);\n var paddingRight = this.parseStyle(elemStyle.paddingRight);\n var paddingBottom = this.parseStyle(elemStyle.paddingBottom);\n var scrollParent = this.scrollParent(elem, false, true);\n var scrollbarWidth = this.scrollbarWidth(BODY_REGEX.test(scrollParent.tagName));\n\n return {\n scrollbarWidth: scrollbarWidth,\n widthOverflow: scrollParent.scrollWidth > scrollParent.clientWidth,\n right: paddingRight + scrollbarWidth,\n originalRight: paddingRight,\n heightOverflow: scrollParent.scrollHeight > scrollParent.clientHeight,\n bottom: paddingBottom + scrollbarWidth,\n originalBottom: paddingBottom\n };\n },\n\n /**\n * Checks to see if the element is scrollable.\n *\n * @param {element} elem - The element to check.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n *\n * @returns {boolean} Whether the element is scrollable.\n */\n isScrollable: function(elem, includeHidden) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var elemStyle = $window.getComputedStyle(elem);\n return overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX);\n },\n\n /**\n * Provides the closest scrollable ancestor.\n * A port of the jQuery UI scrollParent method:\n * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js\n *\n * @param {element} elem - The element to find the scroll parent of.\n * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,\n * default is false.\n * @param {boolean=} [includeSelf=false] - Should the element being passed be\n * included in the scrollable llokup.\n *\n * @returns {element} A HTML element.\n */\n scrollParent: function(elem, includeHidden, includeSelf) {\n elem = this.getRawNode(elem);\n\n var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;\n var documentEl = $document[0].documentElement;\n var elemStyle = $window.getComputedStyle(elem);\n if (includeSelf && overflowRegex.test(elemStyle.overflow + elemStyle.overflowY + elemStyle.overflowX)) {\n return elem;\n }\n var excludeStatic = elemStyle.position === 'absolute';\n var scrollParent = elem.parentElement || documentEl;\n\n if (scrollParent === documentEl || elemStyle.position === 'fixed') {\n return documentEl;\n }\n\n while (scrollParent.parentElement && scrollParent !== documentEl) {\n var spStyle = $window.getComputedStyle(scrollParent);\n if (excludeStatic && spStyle.position !== 'static') {\n excludeStatic = false;\n }\n\n if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {\n break;\n }\n scrollParent = scrollParent.parentElement;\n }\n\n return scrollParent;\n },\n\n /**\n * Provides read-only equivalent of jQuery's position function:\n * http://api.jquery.com/position/ - distance to closest positioned\n * ancestor. Does not account for margins by default like jQuery position.\n *\n * @param {element} elem - The element to caclulate the position on.\n * @param {boolean=} [includeMargins=false] - Should margins be accounted\n * for, default is false.\n *\n * @returns {object} An object with the following properties:\n * \n */\n position: function(elem, includeMagins) {\n elem = this.getRawNode(elem);\n\n var elemOffset = this.offset(elem);\n if (includeMagins) {\n var elemStyle = $window.getComputedStyle(elem);\n elemOffset.top -= this.parseStyle(elemStyle.marginTop);\n elemOffset.left -= this.parseStyle(elemStyle.marginLeft);\n }\n var parent = this.offsetParent(elem);\n var parentOffset = {top: 0, left: 0};\n\n if (parent !== $document[0].documentElement) {\n parentOffset = this.offset(parent);\n parentOffset.top += parent.clientTop - parent.scrollTop;\n parentOffset.left += parent.clientLeft - parent.scrollLeft;\n }\n\n return {\n width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),\n top: Math.round(elemOffset.top - parentOffset.top),\n left: Math.round(elemOffset.left - parentOffset.left)\n };\n },\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * http://api.jquery.com/offset/ - distance to viewport. Does\n * not account for borders, margins, or padding on the body\n * element.\n *\n * @param {element} elem - The element to calculate the offset on.\n *\n * @returns {object} An object with the following properties:\n * \n */\n offset: function(elem) {\n elem = this.getRawNode(elem);\n\n var elemBCR = elem.getBoundingClientRect();\n return {\n width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),\n height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),\n top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),\n left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))\n };\n },\n\n /**\n * Provides offset distance to the closest scrollable ancestor\n * or viewport. Accounts for border and scrollbar width.\n *\n * Right and bottom dimensions represent the distance to the\n * respective edge of the viewport element. If the element\n * edge extends beyond the viewport, a negative value will be\n * reported.\n *\n * @param {element} elem - The element to get the viewport offset for.\n * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead\n * of the first scrollable element, default is false.\n * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element\n * be accounted for, default is true.\n *\n * @returns {object} An object with the following properties:\n * \n */\n viewportOffset: function(elem, useDocument, includePadding) {\n elem = this.getRawNode(elem);\n includePadding = includePadding !== false ? true : false;\n\n var elemBCR = elem.getBoundingClientRect();\n var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};\n\n var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);\n var offsetParentBCR = offsetParent.getBoundingClientRect();\n\n offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;\n offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;\n if (offsetParent === $document[0].documentElement) {\n offsetBCR.top += $window.pageYOffset;\n offsetBCR.left += $window.pageXOffset;\n }\n offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;\n offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;\n\n if (includePadding) {\n var offsetParentStyle = $window.getComputedStyle(offsetParent);\n offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);\n offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);\n offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);\n offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);\n }\n\n return {\n top: Math.round(elemBCR.top - offsetBCR.top),\n bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),\n left: Math.round(elemBCR.left - offsetBCR.left),\n right: Math.round(offsetBCR.right - elemBCR.right)\n };\n },\n\n /**\n * Provides an array of placement values parsed from a placement string.\n * Along with the 'auto' indicator, supported placement strings are:\n * \n * A placement string with an 'auto' indicator is expected to be\n * space separated from the placement, i.e: 'auto bottom-left' If\n * the primary and secondary placement values do not match 'top,\n * bottom, left, right' then 'top' will be the primary placement and\n * 'center' will be the secondary placement. If 'auto' is passed, true\n * will be returned as the 3rd value of the array.\n *\n * @param {string} placement - The placement string to parse.\n *\n * @returns {array} An array with the following values\n * \n */\n parsePlacement: function(placement) {\n var autoPlace = PLACEMENT_REGEX.auto.test(placement);\n if (autoPlace) {\n placement = placement.replace(PLACEMENT_REGEX.auto, '');\n }\n\n placement = placement.split('-');\n\n placement[0] = placement[0] || 'top';\n if (!PLACEMENT_REGEX.primary.test(placement[0])) {\n placement[0] = 'top';\n }\n\n placement[1] = placement[1] || 'center';\n if (!PLACEMENT_REGEX.secondary.test(placement[1])) {\n placement[1] = 'center';\n }\n\n if (autoPlace) {\n placement[2] = true;\n } else {\n placement[2] = false;\n }\n\n return placement;\n },\n\n /**\n * Provides coordinates for an element to be positioned relative to\n * another element. Passing 'auto' as part of the placement parameter\n * will enable smart placement - where the element fits. i.e:\n * 'auto left-top' will check to see if there is enough space to the left\n * of the hostElem to fit the targetElem, if not place right (same for secondary\n * top placement). Available space is calculated using the viewportOffset\n * function.\n *\n * @param {element} hostElem - The element to position against.\n * @param {element} targetElem - The element to position.\n * @param {string=} [placement=top] - The placement for the targetElem,\n * default is 'top'. 'center' is assumed as secondary placement for\n * 'top', 'left', 'right', and 'bottom' placements. Available placements are:\n * \n * @param {boolean=} [appendToBody=false] - Should the top and left values returned\n * be calculated from the body element, default is false.\n *\n * @returns {object} An object with the following properties:\n * \n */\n positionElements: function(hostElem, targetElem, placement, appendToBody) {\n hostElem = this.getRawNode(hostElem);\n targetElem = this.getRawNode(targetElem);\n\n // need to read from prop to support tests.\n var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');\n var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');\n\n placement = this.parsePlacement(placement);\n\n var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);\n var targetElemPos = {top: 0, left: 0, placement: ''};\n\n if (placement[2]) {\n var viewportOffset = this.viewportOffset(hostElem, appendToBody);\n\n var targetElemStyle = $window.getComputedStyle(targetElem);\n var adjustedSize = {\n width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),\n height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))\n };\n\n placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :\n placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :\n placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :\n placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :\n placement[0];\n\n placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :\n placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :\n placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :\n placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :\n placement[1];\n\n if (placement[1] === 'center') {\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n var xOverflow = hostElemPos.width / 2 - targetWidth / 2;\n if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {\n placement[1] = 'left';\n } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {\n placement[1] = 'right';\n }\n } else {\n var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;\n if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {\n placement[1] = 'top';\n } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {\n placement[1] = 'bottom';\n }\n }\n }\n }\n\n switch (placement[0]) {\n case 'top':\n targetElemPos.top = hostElemPos.top - targetHeight;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left - targetWidth;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width;\n break;\n }\n\n switch (placement[1]) {\n case 'top':\n targetElemPos.top = hostElemPos.top;\n break;\n case 'bottom':\n targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;\n break;\n case 'left':\n targetElemPos.left = hostElemPos.left;\n break;\n case 'right':\n targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;\n break;\n case 'center':\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;\n } else {\n targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;\n }\n break;\n }\n\n targetElemPos.top = Math.round(targetElemPos.top);\n targetElemPos.left = Math.round(targetElemPos.left);\n targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];\n\n return targetElemPos;\n },\n\n /**\n * Provides a way to adjust the top positioning after first\n * render to correctly align element to top after content\n * rendering causes resized element height\n *\n * @param {array} placementClasses - The array of strings of classes\n * element should have.\n * @param {object} containerPosition - The object with container\n * position information\n * @param {number} initialHeight - The initial height for the elem.\n * @param {number} currentHeight - The current height for the elem.\n */\n adjustTop: function(placementClasses, containerPosition, initialHeight, currentHeight) {\n if (placementClasses.indexOf('top') !== -1 && initialHeight !== currentHeight) {\n return {\n top: containerPosition.top - currentHeight + 'px'\n };\n }\n },\n\n /**\n * Provides a way for positioning tooltip & dropdown\n * arrows when using placement options beyond the standard\n * left, right, top, or bottom.\n *\n * @param {element} elem - The tooltip/dropdown element.\n * @param {string} placement - The placement for the elem.\n */\n positionArrow: function(elem, placement) {\n elem = this.getRawNode(elem);\n\n var innerElem = elem.querySelector('.tooltip-inner, .popover-inner');\n if (!innerElem) {\n return;\n }\n\n var isTooltip = angular.element(innerElem).hasClass('tooltip-inner');\n\n var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');\n if (!arrowElem) {\n return;\n }\n\n var arrowCss = {\n top: '',\n bottom: '',\n left: '',\n right: ''\n };\n\n placement = this.parsePlacement(placement);\n if (placement[1] === 'center') {\n // no adjustment necessary - just reset styles\n angular.element(arrowElem).css(arrowCss);\n return;\n }\n\n var borderProp = 'border-' + placement[0] + '-width';\n var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];\n\n var borderRadiusProp = 'border-';\n if (PLACEMENT_REGEX.vertical.test(placement[0])) {\n borderRadiusProp += placement[0] + '-' + placement[1];\n } else {\n borderRadiusProp += placement[1] + '-' + placement[0];\n }\n borderRadiusProp += '-radius';\n var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];\n\n switch (placement[0]) {\n case 'top':\n arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'bottom':\n arrowCss.top = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'left':\n arrowCss.right = isTooltip ? '0' : '-' + borderWidth;\n break;\n case 'right':\n arrowCss.left = isTooltip ? '0' : '-' + borderWidth;\n break;\n }\n\n arrowCss[placement[1]] = borderRadius;\n\n angular.element(arrowElem).css(arrowCss);\n }\n };\n }]);\n","require('./stackedMap');\n\nvar MODULE_NAME = 'ui.bootstrap.module.stackedMap';\n\nangular.module(MODULE_NAME, ['ui.bootstrap.stackedMap']);\n\nmodule.exports = MODULE_NAME;\n","angular.module('ui.bootstrap.stackedMap', [])\n/**\n * A helper, internal data structure that acts as a map but also allows getting / removing\n * elements in the LIFO order\n */\n .factory('$$stackedMap', function() {\n return {\n createNew: function() {\n var stack = [];\n\n return {\n add: function(key, value) {\n stack.push({\n key: key,\n value: value\n });\n },\n get: function(key) {\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n return stack[i];\n }\n }\n },\n keys: function() {\n var keys = [];\n for (var i = 0; i < stack.length; i++) {\n keys.push(stack[i].key);\n }\n return keys;\n },\n top: function() {\n return stack[stack.length - 1];\n },\n remove: function(key) {\n var idx = -1;\n for (var i = 0; i < stack.length; i++) {\n if (key === stack[i].key) {\n idx = i;\n break;\n }\n }\n return stack.splice(idx, 1)[0];\n },\n removeTop: function() {\n return stack.pop();\n },\n length: function() {\n return stack.length;\n }\n };\n }\n };\n });","require('../position/index-nocss.js');\nrequire('../stackedMap');\nrequire('../../template/tooltip/tooltip-popup.html.js');\nrequire('../../template/tooltip/tooltip-html-popup.html.js');\nrequire('../../template/tooltip/tooltip-template-popup.html.js');\nrequire('./tooltip');\n\nvar MODULE_NAME = 'ui.bootstrap.module.tooltip';\n\nangular.module(MODULE_NAME, ['ui.bootstrap.tooltip', 'uib/template/tooltip/tooltip-popup.html', 'uib/template/tooltip/tooltip-html-popup.html', 'uib/template/tooltip/tooltip-template-popup.html']);\n\nmodule.exports = MODULE_NAME;\n","require('../position/position.css');\nrequire('./tooltip.css');\nmodule.exports = require('./index-nocss.js');\n","/**\n * The following features are still outstanding: animation as a\n * function, placement as a function, inside, support for more triggers than\n * just mouse enter/leave, html tooltips, and selector delegation.\n */\nangular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])\n\n/**\n * The $tooltip service creates tooltip- and popover-like directives as well as\n * houses global options for them.\n */\n.provider('$uibTooltip', function() {\n // The default options tooltip and popover.\n var defaultOptions = {\n placement: 'top',\n placementClassPrefix: '',\n animation: true,\n popupDelay: 0,\n popupCloseDelay: 0,\n useContentExp: false\n };\n\n // Default hide triggers for each show trigger\n var triggerMap = {\n 'mouseenter': 'mouseleave',\n 'click': 'click',\n 'outsideClick': 'outsideClick',\n 'focus': 'blur',\n 'none': ''\n };\n\n // The options specified to the provider globally.\n var globalOptions = {};\n\n /**\n * `options({})` allows global configuration of all tooltips in the\n * application.\n *\n * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {\n * // place tooltips left instead of top by default\n * $tooltipProvider.options( { placement: 'left' } );\n * });\n */\n\tthis.options = function(value) {\n\t\tangular.extend(globalOptions, value);\n\t};\n\n /**\n * This allows you to extend the set of trigger mappings available. E.g.:\n *\n * $tooltipProvider.setTriggers( { 'openTrigger': 'closeTrigger' } );\n */\n this.setTriggers = function setTriggers(triggers) {\n angular.extend(triggerMap, triggers);\n };\n\n /**\n * This is a helper function for translating camel-case to snake_case.\n */\n function snake_case(name) {\n var regexp = /[A-Z]/g;\n var separator = '-';\n return name.replace(regexp, function(letter, pos) {\n return (pos ? separator : '') + letter.toLowerCase();\n });\n }\n\n /**\n * Returns the actual instance of the $tooltip service.\n * TODO support multiple triggers\n */\n this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {\n var openedTooltips = $$stackedMap.createNew();\n $document.on('keyup', keypressListener);\n\n $rootScope.$on('$destroy', function() {\n $document.off('keyup', keypressListener);\n });\n\n function keypressListener(e) {\n if (e.which === 27) {\n var last = openedTooltips.top();\n if (last) {\n last.value.close();\n last = null;\n }\n }\n }\n\n return function $tooltip(ttType, prefix, defaultTriggerShow, options) {\n options = angular.extend({}, defaultOptions, globalOptions, options);\n\n /**\n * Returns an object of show and hide triggers.\n *\n * If a trigger is supplied,\n * it is used to show the tooltip; otherwise, it will use the `trigger`\n * option passed to the `$tooltipProvider.options` method; else it will\n * default to the trigger supplied to this directive factory.\n *\n * The hide trigger is based on the show trigger. If the `trigger` option\n * was passed to the `$tooltipProvider.options` method, it will use the\n * mapped trigger from `triggerMap` or the passed trigger if the map is\n * undefined; otherwise, it uses the `triggerMap` value of the show\n * trigger; else it will just use the show trigger.\n */\n function getTriggers(trigger) {\n var show = (trigger || options.trigger || defaultTriggerShow).split(' ');\n var hide = show.map(function(trigger) {\n return triggerMap[trigger] || trigger;\n });\n return {\n show: show,\n hide: hide\n };\n }\n\n var directiveName = snake_case(ttType);\n\n var startSym = $interpolate.startSymbol();\n var endSym = $interpolate.endSymbol();\n var template =\n '
' +\n '
';\n\n return {\n compile: function(tElem, tAttrs) {\n var tooltipLinker = $compile(template);\n\n return function link(scope, element, attrs, tooltipCtrl) {\n var tooltip;\n var tooltipLinkedScope;\n var transitionTimeout;\n var showTimeout;\n var hideTimeout;\n var positionTimeout;\n var adjustmentTimeout;\n var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;\n var triggers = getTriggers(undefined);\n var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);\n var ttScope = scope.$new(true);\n var repositionScheduled = false;\n var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;\n var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;\n var observers = [];\n var lastPlacement;\n\n var positionTooltip = function() {\n // check if tooltip exists and is not empty\n if (!tooltip || !tooltip.html()) { return; }\n\n if (!positionTimeout) {\n positionTimeout = $timeout(function() {\n var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);\n var initialHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var elementPos = appendToBody ? $position.offset(element) : $position.position(element);\n tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px' });\n var placementClasses = ttPosition.placement.split('-');\n\n if (!tooltip.hasClass(placementClasses[0])) {\n tooltip.removeClass(lastPlacement.split('-')[0]);\n tooltip.addClass(placementClasses[0]);\n }\n\n if (!tooltip.hasClass(options.placementClassPrefix + ttPosition.placement)) {\n tooltip.removeClass(options.placementClassPrefix + lastPlacement);\n tooltip.addClass(options.placementClassPrefix + ttPosition.placement);\n }\n\n adjustmentTimeout = $timeout(function() {\n var currentHeight = angular.isDefined(tooltip.offsetHeight) ? tooltip.offsetHeight : tooltip.prop('offsetHeight');\n var adjustment = $position.adjustTop(placementClasses, elementPos, initialHeight, currentHeight);\n if (adjustment) {\n tooltip.css(adjustment);\n }\n adjustmentTimeout = null;\n }, 0, false);\n\n // first time through tt element will have the\n // uib-position-measure class or if the placement\n // has changed we need to position the arrow.\n if (tooltip.hasClass('uib-position-measure')) {\n $position.positionArrow(tooltip, ttPosition.placement);\n tooltip.removeClass('uib-position-measure');\n } else if (lastPlacement !== ttPosition.placement) {\n $position.positionArrow(tooltip, ttPosition.placement);\n }\n lastPlacement = ttPosition.placement;\n\n positionTimeout = null;\n }, 0, false);\n }\n };\n\n // Set up the correct scope to allow transclusion later\n ttScope.origScope = scope;\n\n // By default, the tooltip is not open.\n // TODO add ability to start tooltip opened\n ttScope.isOpen = false;\n\n function toggleTooltipBind() {\n if (!ttScope.isOpen) {\n showTooltipBind();\n } else {\n hideTooltipBind();\n }\n }\n\n // Show the tooltip with delay if specified, otherwise show it immediately\n function showTooltipBind() {\n if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {\n return;\n }\n\n cancelHide();\n prepareTooltip();\n\n if (ttScope.popupDelay) {\n // Do nothing if the tooltip was already scheduled to pop-up.\n // This happens if show is triggered multiple times before any hide is triggered.\n if (!showTimeout) {\n showTimeout = $timeout(show, ttScope.popupDelay, false);\n }\n } else {\n show();\n }\n }\n\n function hideTooltipBind() {\n cancelShow();\n\n if (ttScope.popupCloseDelay) {\n if (!hideTimeout) {\n hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);\n }\n } else {\n hide();\n }\n }\n\n // Show the tooltip popup element.\n function show() {\n cancelShow();\n cancelHide();\n\n // Don't show empty tooltips.\n if (!ttScope.content) {\n return angular.noop;\n }\n\n createTooltip();\n\n // And show the tooltip.\n ttScope.$evalAsync(function() {\n ttScope.isOpen = true;\n assignIsOpen(true);\n positionTooltip();\n });\n }\n\n function cancelShow() {\n if (showTimeout) {\n $timeout.cancel(showTimeout);\n showTimeout = null;\n }\n\n if (positionTimeout) {\n $timeout.cancel(positionTimeout);\n positionTimeout = null;\n }\n }\n\n // Hide the tooltip popup element.\n function hide() {\n if (!ttScope) {\n return;\n }\n\n // First things first: we don't show it anymore.\n ttScope.$evalAsync(function() {\n if (ttScope) {\n ttScope.isOpen = false;\n assignIsOpen(false);\n // And now we remove it from the DOM. However, if we have animation, we\n // need to wait for it to expire beforehand.\n // FIXME: this is a placeholder for a port of the transitions library.\n // The fade transition in TWBS is 150ms.\n if (ttScope.animation) {\n if (!transitionTimeout) {\n transitionTimeout = $timeout(removeTooltip, 150, false);\n }\n } else {\n removeTooltip();\n }\n }\n });\n }\n\n function cancelHide() {\n if (hideTimeout) {\n $timeout.cancel(hideTimeout);\n hideTimeout = null;\n }\n\n if (transitionTimeout) {\n $timeout.cancel(transitionTimeout);\n transitionTimeout = null;\n }\n }\n\n function createTooltip() {\n // There can only be one tooltip element per directive shown at once.\n if (tooltip) {\n return;\n }\n\n tooltipLinkedScope = ttScope.$new();\n tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {\n if (appendToBody) {\n $document.find('body').append(tooltip);\n } else {\n element.after(tooltip);\n }\n });\n\n openedTooltips.add(ttScope, {\n close: hide\n });\n\n prepObservers();\n }\n\n function removeTooltip() {\n cancelShow();\n cancelHide();\n unregisterObservers();\n\n if (tooltip) {\n tooltip.remove();\n \n tooltip = null;\n if (adjustmentTimeout) {\n $timeout.cancel(adjustmentTimeout);\n }\n }\n\n openedTooltips.remove(ttScope);\n \n if (tooltipLinkedScope) {\n tooltipLinkedScope.$destroy();\n tooltipLinkedScope = null;\n }\n }\n\n /**\n * Set the initial scope values. Once\n * the tooltip is created, the observers\n * will be added to keep things in sync.\n */\n function prepareTooltip() {\n ttScope.title = attrs[prefix + 'Title'];\n if (contentParse) {\n ttScope.content = contentParse(scope);\n } else {\n ttScope.content = attrs[ttType];\n }\n\n ttScope.popupClass = attrs[prefix + 'Class'];\n ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;\n var placement = $position.parsePlacement(ttScope.placement);\n lastPlacement = placement[1] ? placement[0] + '-' + placement[1] : placement[0];\n\n var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);\n var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);\n ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;\n ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;\n }\n\n function assignIsOpen(isOpen) {\n if (isOpenParse && angular.isFunction(isOpenParse.assign)) {\n isOpenParse.assign(scope, isOpen);\n }\n }\n\n ttScope.contentExp = function() {\n return ttScope.content;\n };\n\n /**\n * Observe the relevant attributes.\n */\n attrs.$observe('disabled', function(val) {\n if (val) {\n cancelShow();\n }\n\n if (val && ttScope.isOpen) {\n hide();\n }\n });\n\n if (isOpenParse) {\n scope.$watch(isOpenParse, function(val) {\n if (ttScope && !val === ttScope.isOpen) {\n toggleTooltipBind();\n }\n });\n }\n\n function prepObservers() {\n observers.length = 0;\n\n if (contentParse) {\n observers.push(\n scope.$watch(contentParse, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n }\n })\n );\n\n observers.push(\n tooltipLinkedScope.$watch(function() {\n if (!repositionScheduled) {\n repositionScheduled = true;\n tooltipLinkedScope.$$postDigest(function() {\n repositionScheduled = false;\n if (ttScope && ttScope.isOpen) {\n positionTooltip();\n }\n });\n }\n })\n );\n } else {\n observers.push(\n attrs.$observe(ttType, function(val) {\n ttScope.content = val;\n if (!val && ttScope.isOpen) {\n hide();\n } else {\n positionTooltip();\n }\n })\n );\n }\n\n observers.push(\n attrs.$observe(prefix + 'Title', function(val) {\n ttScope.title = val;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n\n observers.push(\n attrs.$observe(prefix + 'Placement', function(val) {\n ttScope.placement = val ? val : options.placement;\n if (ttScope.isOpen) {\n positionTooltip();\n }\n })\n );\n }\n\n function unregisterObservers() {\n if (observers.length) {\n angular.forEach(observers, function(observer) {\n observer();\n });\n observers.length = 0;\n }\n }\n\n // hide tooltips/popovers for outsideClick trigger\n function bodyHideTooltipBind(e) {\n if (!ttScope || !ttScope.isOpen || !tooltip) {\n return;\n }\n // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked\n if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {\n hideTooltipBind();\n }\n }\n\n // KeyboardEvent handler to hide the tooltip on Escape key press\n function hideOnEscapeKey(e) {\n if (e.which === 27) {\n hideTooltipBind();\n }\n }\n\n var unregisterTriggers = function() {\n triggers.show.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n element.off('click', toggleTooltipBind);\n } else {\n element.off(trigger, showTooltipBind);\n element.off(trigger, toggleTooltipBind);\n }\n element.off('keypress', hideOnEscapeKey);\n });\n triggers.hide.forEach(function(trigger) {\n if (trigger === 'outsideClick') {\n $document.off('click', bodyHideTooltipBind);\n } else {\n element.off(trigger, hideTooltipBind);\n }\n });\n };\n\n function prepTriggers() {\n var showTriggers = [], hideTriggers = [];\n var val = scope.$eval(attrs[prefix + 'Trigger']);\n unregisterTriggers();\n\n if (angular.isObject(val)) {\n Object.keys(val).forEach(function(key) {\n showTriggers.push(key);\n hideTriggers.push(val[key]);\n });\n triggers = {\n show: showTriggers,\n hide: hideTriggers\n };\n } else {\n triggers = getTriggers(val);\n }\n\n if (triggers.show !== 'none') {\n triggers.show.forEach(function(trigger, idx) {\n if (trigger === 'outsideClick') {\n element.on('click', toggleTooltipBind);\n $document.on('click', bodyHideTooltipBind);\n } else if (trigger === triggers.hide[idx]) {\n element.on(trigger, toggleTooltipBind);\n } else if (trigger) {\n element.on(trigger, showTooltipBind);\n element.on(triggers.hide[idx], hideTooltipBind);\n }\n element.on('keypress', hideOnEscapeKey);\n });\n }\n }\n\n prepTriggers();\n\n var animation = scope.$eval(attrs[prefix + 'Animation']);\n ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;\n\n var appendToBodyVal;\n var appendKey = prefix + 'AppendToBody';\n if (appendKey in attrs && attrs[appendKey] === undefined) {\n appendToBodyVal = true;\n } else {\n appendToBodyVal = scope.$eval(attrs[appendKey]);\n }\n\n appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;\n\n // Make sure tooltip is destroyed and removed.\n scope.$on('$destroy', function onDestroyTooltip() {\n unregisterTriggers();\n removeTooltip();\n ttScope = null;\n });\n };\n }\n };\n };\n }];\n})\n\n// This is mostly ngInclude code but with a custom scope\n.directive('uibTooltipTemplateTransclude', [\n '$animate', '$sce', '$compile', '$templateRequest',\nfunction ($animate, $sce, $compile, $templateRequest) {\n return {\n link: function(scope, elem, attrs) {\n var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);\n\n var changeCounter = 0,\n currentScope,\n previousElement,\n currentElement;\n\n var cleanupLastIncludeContent = function() {\n if (previousElement) {\n previousElement.remove();\n previousElement = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n\n if (currentElement) {\n $animate.leave(currentElement).then(function() {\n previousElement = null;\n });\n previousElement = currentElement;\n currentElement = null;\n }\n };\n\n scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {\n var thisChangeId = ++changeCounter;\n\n if (src) {\n //set the 2nd param to true to ignore the template request error so that the inner\n //contents and scope can be cleaned up.\n $templateRequest(src, true).then(function(response) {\n if (thisChangeId !== changeCounter) { return; }\n var newScope = origScope.$new();\n var template = response;\n\n var clone = $compile(template)(newScope, function(clone) {\n cleanupLastIncludeContent();\n $animate.enter(clone, elem);\n });\n\n currentScope = newScope;\n currentElement = clone;\n\n currentScope.$emit('$includeContentLoaded', src);\n }, function() {\n if (thisChangeId === changeCounter) {\n cleanupLastIncludeContent();\n scope.$emit('$includeContentError', src);\n }\n });\n scope.$emit('$includeContentRequested', src);\n } else {\n cleanupLastIncludeContent();\n }\n });\n\n scope.$on('$destroy', cleanupLastIncludeContent);\n }\n };\n}])\n\n/**\n * Note that it's intentional that these classes are *not* applied through $animate.\n * They must not be animated as they're expected to be present on the tooltip on\n * initialization.\n */\n.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n // need to set the primary position so the\n // arrow has space during position measure.\n // tooltip.positionTooltip()\n if (scope.placement) {\n // // There are no top-left etc... classes\n // // in TWBS, so we need the primary position.\n var position = $uibPosition.parsePlacement(scope.placement);\n element.addClass(position[0]);\n }\n\n if (scope.popupClass) {\n element.addClass(scope.popupClass);\n }\n\n if (scope.animation) {\n element.addClass(attrs.tooltipAnimationClass);\n }\n }\n };\n}])\n\n.directive('uibTooltipPopup', function() {\n return {\n restrict: 'A',\n scope: { content: '@' },\n templateUrl: 'uib/template/tooltip/tooltip-popup.html'\n };\n})\n\n.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');\n}])\n\n.directive('uibTooltipTemplatePopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&', originScope: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'\n };\n})\n\n.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}])\n\n.directive('uibTooltipHtmlPopup', function() {\n return {\n restrict: 'A',\n scope: { contentExp: '&' },\n templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'\n };\n})\n\n.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {\n return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {\n useContentExp: true\n });\n}]);\n","angular.module(\"uib/template/tooltip/tooltip-html-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-html-popup.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n","angular.module(\"uib/template/tooltip/tooltip-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-popup.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n","angular.module(\"uib/template/tooltip/tooltip-template-popup.html\", []).run([\"$templateCache\", function ($templateCache) {\n $templateCache.put(\"uib/template/tooltip/tooltip-template-popup.html\",\n \"
\\n\" +\n \"
\\n\" +\n \"\");\n}]);\n","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","import './styles/carousel.scss';\nimport './carouselNative.js';\nimport carouselService from './services/carouselService.js';\nimport { carouselDirective, carouselImgDirective } from './directives/carouselDirectives.js';\nimport CarouselCtrl from './controllers/carouselController.js';\nconst moduleName = 'carousel';\nangular.module(moduleName, []).directive('carousel', carouselDirective).directive('carouselImg', carouselImgDirective).service('carouselService', carouselService).controller('CarouselCtrl', CarouselCtrl).constant('carouselDefault', {\n isVertical: false,\n scrollCount: 1,\n nav: true,\n dots: false,\n speed: 600,\n auto: false,\n autoPause: 5000,\n indexActive: 0,\n prevIcon: 'icon-left-open-after',\n nextIcon: 'icon-right-open-after',\n prevIconVertical: 'icon-up-open-after',\n nextIconVertical: 'icon-down-open-after',\n prevClass: 'cs-l-1-interactive',\n nextClass: 'cs-l-1-interactive',\n dotsClass: undefined,\n dotsItemClass: 'cs-bg-i-1',\n dotsItemSelectedClass: null,\n dotsItemInnerSelectedClass: null,\n visibleMax: null,\n visibleMin: null,\n itemSelectClass: null,\n carouselClass: null,\n stretch: true,\n navPosition: 'inside',\n //inside or outside\n responsive: null\n});\nexport default moduleName;","(function (window) {\n 'use strict';\n\n var isTouchDevice = ('ontouchstart' in document.documentElement),\n autoStop = false,\n clonesForCreate = {},\n transformName = 'transform',\n transitionDurationName = 'transitionDuration',\n webkitTransitionDuration = 'webkitTransitionDuration',\n Carousel,\n storage = {},\n idIncrement = 0,\n deferList = {},\n isOverScrollX = false,\n isScrolling = false;\n Carousel = function (element, options) {\n var id = element.getAttribute('id') || 'carousel_' + (idIncrement += 1);\n this.list = element;\n this.items = Array.prototype.slice.call(element.children).filter(x => x.classList.contains('js-carousel-clone') === false);\n this.options = options;\n this.responsive = options.responsive;\n this.responsiveOption = this.options.responsive != null ? this.checkResponsive() : null;\n this.propName = this.getPropName(this.getIsVerticalOption());\n this.cache = this.items.slice();\n this.id = id;\n this.dots = [];\n storage[id] = {\n state: {\n callAsNav: false\n },\n obj: this\n };\n this.resolveAsNavForReady(this.id);\n return this;\n };\n Carousel.prototype.addToCache = function (item) {\n this.cache.push(item);\n };\n Carousel.prototype.getFromCache = function (item) {\n var index;\n if (typeof item === 'number') {\n index = item;\n } else {\n index = this.cache.indexOf(item);\n }\n return this.cache[index];\n };\n Carousel.prototype.removeFromCache = function (item) {\n var index;\n if (typeof item === 'number') {\n index = item;\n } else {\n index = this.cache.indexOf(item);\n }\n if (index !== -1) {\n this.cache.splice(index, 1);\n }\n return this.cache[index];\n };\n Carousel.prototype.clearCache = function () {\n this.cache.length = 0;\n };\n Carousel.prototype.getSize = function (totalCount, maxWidth, maxHeight, isVertical, diff) {\n var size = {};\n if (isVertical === false) {\n size['width'] = totalCount * maxWidth - (diff || 0);\n size['height'] = maxHeight;\n } else {\n size['width'] = maxWidth;\n size['height'] = totalCount * maxHeight - (diff || 0);\n }\n return size;\n };\n Carousel.prototype.getPropName = function (isVertical) {\n return isVertical === false ? 'width' : 'height';\n };\n Carousel.prototype.getItemsMaxSizes = function (items) {\n var tempWidth = 0,\n tempHeight = 0,\n maxWidth = 0,\n maxHeigth = 0;\n for (var i = items.length - 1; i >= 0; i--) {\n if (items[i].carouselItemData == null) {\n continue;\n }\n tempWidth = items[i].carouselItemData.originalWidth;\n if (tempWidth > maxWidth) {\n maxWidth = tempWidth;\n }\n tempHeight = items[i].carouselItemData.originalHeight;\n if (tempHeight > maxHeigth) {\n maxHeigth = tempHeight;\n }\n }\n return {\n width: maxWidth,\n height: maxHeigth\n };\n };\n Carousel.prototype.setItemSize = function (item, value) {\n var self = this,\n valueStr = value + 'px';\n item.style[self.propName] = valueStr;\n //item.style['min' + self.propName.charAt(0).toUpperCase() + self.propName.slice(1)] = valueStr;\n item.style['max' + self.propName.charAt(0).toUpperCase() + self.propName.slice(1)] = valueStr;\n item.style['flexBasis'] = valueStr;\n item.style['msFlexPreferredSize'] = valueStr;\n item.style['webkitFlexBasis'] = valueStr;\n };\n Carousel.prototype.processItems = function (items, saveStyleAttribute) {\n var self = this;\n for (var i = 0, len = items.length - 1; i <= len; i++) {\n self.processItem(items[i], i, saveStyleAttribute);\n }\n };\n Carousel.prototype.processItem = function (item, index, saveStyleAttribute) {\n var self = this;\n var itemStylesComputed = getComputedStyle(item),\n itemBorderLeft,\n itemBorderRight,\n itemBorderTop,\n itemBorderBottom;\n itemBorderLeft = parseInt(itemStylesComputed['border-left-width'], 10);\n itemBorderRight = parseInt(itemStylesComputed['border-right-width'], 10);\n itemBorderTop = parseInt(itemStylesComputed['border-top-width'], 10);\n itemBorderBottom = parseInt(itemStylesComputed['border-bottom-width'], 10);\n itemBorderLeft = isNaN(itemBorderLeft) ? 0 : itemBorderLeft;\n itemBorderRight = isNaN(itemBorderRight) ? 0 : itemBorderRight;\n itemBorderTop = isNaN(itemBorderTop) ? 0 : itemBorderTop;\n itemBorderBottom = isNaN(itemBorderBottom) ? 0 : itemBorderBottom;\n\n /*,\r\n itemStylesComputed = getComputedStyle(item),\r\n itemStylesComputed = item.getBoundingClientRect(),\r\n itemPaddingLeft,\r\n itemPaddingRight,\r\n itemPaddingTop,\r\n itemPaddingBottom;*/\n\n /*itemPaddingLeft = parseInt(itemStylesComputed['padding-left'], 10);\r\n itemPaddingRight = parseInt(itemStylesComputed['padding-right'], 10);\r\n itemPaddingTop = parseInt(itemStylesComputed['padding-top'], 10);\r\n itemPaddingBottom = parseInt(itemStylesComputed['padding-bottom'], 10);\r\n itemPaddingLeft = isNaN(itemPaddingLeft) ? 0 : itemPaddingLeft;\r\n itemPaddingRight = isNaN(itemPaddingRight) ? 0 : itemPaddingRight;\r\n itemPaddingTop = isNaN(itemPaddingTop) ? 0 : itemPaddingTop;\r\n itemPaddingBottom = isNaN(itemPaddingBottom) ? 0 : itemPaddingBottom;*/\n\n item.carouselItemData = item.carouselItemData || {};\n item.carouselItemData.originalWidth = item.getBoundingClientRect().width;\n item.carouselItemData.originalHeight = item.getBoundingClientRect().height;\n item.carouselItemData.index = index != null ? index : self.items.length;\n item.carouselItemData.parameters = item.getAttribute('data-parameters') != null ? new Function('return ' + item.getAttribute('data-parameters'))() : null;\n item.carouselItemData.stylesRaw = saveStyleAttribute === true ? item.getAttribute('style') : item.carouselItemData != null ? item.carouselItemData.stylesRaw : null;\n item.classList.add('js-carousel-item');\n item.classList.add('carousel-item');\n return item;\n };\n Carousel.prototype.setSizes = function (wrapSize, innerSize, listSize, itemsSizes) {\n var self = this;\n\n //if (wrapSize != null) {\n // self.wrap.style[self.propName] = wrapSize[self.propName] + 'px';\n //}\n\n if (innerSize != null) {\n self.inner.style[self.propName] = innerSize[self.propName] + 'px';\n }\n if (listSize != null) {\n self.list.style[self.propName] = listSize[self.propName] + 'px';\n }\n if (itemsSizes != null) {\n for (var i = self.items.length - 1; i >= 0; i--) {\n self.setItemSize(self.items[i], itemsSizes[self.propName]);\n }\n }\n };\n Carousel.prototype.calc = function (items, options, responsiveOptions) {\n var self = this;\n var result = responsiveOptions != null ? self.calcResponsive(items, options, responsiveOptions) : self.calcAuto(items, options);\n self.countVisible = result.countVisible;\n self.wrapSize = result.wrapSize;\n self.listSize = result.listSize;\n self.innerSize = result.innerSize;\n self.itemsSize = result.itemsSize;\n self.slidesSize = result.slidesSize;\n return result;\n };\n Carousel.prototype.getCarouselSize = function () {\n var self = this,\n carouselStylesComputed,\n carouselPaddingLeft,\n carouselPaddingRight,\n carouselPaddingTop,\n carouselPaddingBottom;\n carouselStylesComputed = getComputedStyle(self.wrap);\n carouselPaddingLeft = parseInt(carouselStylesComputed['padding-left'], 10);\n carouselPaddingRight = parseInt(carouselStylesComputed['padding-right'], 10);\n carouselPaddingTop = parseInt(carouselStylesComputed['padding-top'], 10);\n carouselPaddingBottom = parseInt(carouselStylesComputed['padding-bottom'], 10);\n carouselPaddingLeft = isNaN(carouselPaddingLeft) ? 0 : carouselPaddingLeft;\n carouselPaddingRight = isNaN(carouselPaddingRight) ? 0 : carouselPaddingRight;\n carouselPaddingTop = isNaN(carouselPaddingTop) ? 0 : carouselPaddingTop;\n carouselPaddingBottom = isNaN(carouselPaddingBottom) ? 0 : carouselPaddingBottom;\n return {\n width: Math.floor(self.wrap.clientWidth - carouselPaddingLeft - carouselPaddingRight),\n height: Math.floor(self.wrap.clientHeight - carouselPaddingTop - carouselPaddingBottom)\n };\n };\n Carousel.prototype.calcAuto = function (items, options) {\n var self = this,\n result = {},\n slidesMaxSize,\n countVisibleDirty,\n carouselSizes,\n countVisible,\n dimension,\n propName,\n slidesSize;\n propName = self.propName;\n carouselSizes = self.getCarouselSize();\n slidesMaxSize = self.getItemsMaxSizes(items);\n countVisibleDirty = carouselSizes[propName] / (slidesMaxSize[propName] || 1);\n countVisible = Math.floor(countVisibleDirty); //Math.round\n\n //dimension число с плавающей точкой\n if (options.visibleMin != null && options.visibleMin > items.length) {\n countVisible = items.length;\n dimension = countVisibleDirty - countVisible;\n } else if (countVisible > items.length) {\n countVisible = items.length;\n dimension = 0;\n } else if (countVisible < 1) {\n countVisible = 1;\n dimension = countVisibleDirty - countVisible;\n } else {\n dimension = countVisibleDirty - countVisible;\n }\n if (options.visibleMax != null && options.visibleMax < countVisible || options.visibleMin != null && options.visibleMin > countVisible) {\n if (options.visibleMax != null && options.visibleMax < countVisible) {\n countVisible = options.visibleMax;\n } else if (options.visibleMin != null && options.visibleMin > countVisible) {\n countVisible = options.visibleMin;\n slidesMaxSize[propName] = carouselSizes.width / countVisible;\n }\n if (options.stretch) {\n slidesMaxSize[propName] = carouselSizes[propName] / countVisible;\n } else {\n //carouselSizes[propName] = carouselSizes[propName] - (slidesMaxSize[propName] * countVisible);\n var sizeSlides = slidesMaxSize[propName] * countVisible;\n carouselSizes[propName] = sizeSlides >= carouselSizes[propName] ? carouselSizes[propName] : carouselSizes[propName] - (carouselSizes[propName] - sizeSlides);\n }\n } else {\n if (isNaN(dimension) == false && dimension !== 0) {\n if (options.stretch) {\n slidesMaxSize[propName] += slidesMaxSize[propName] * dimension / countVisible;\n } else {\n if (dimension > 0) {\n carouselSizes[propName] = carouselSizes[propName] - slidesMaxSize[propName] * dimension;\n } else {\n slidesMaxSize[propName] += slidesMaxSize[propName] * dimension / countVisible;\n if (slidesMaxSize[propName] <= 0) {\n slidesMaxSize[propName] = carouselSizes[propName];\n }\n }\n }\n }\n }\n if (countVisible <= 1) {\n countVisible = 1;\n result = slidesMaxSize[propName];\n } else {\n result = slidesMaxSize[propName];\n }\n var diff = countVisible < items.length ? self.getScrollDiff(result, countVisible) : 0;\n if (options.isVertical === false) {\n slidesSize = {\n width: result - diff,\n height: slidesMaxSize.height\n };\n } else {\n slidesSize = {\n width: slidesMaxSize.width,\n height: result - diff\n };\n }\n return {\n countVisible: countVisible,\n wrapSize: carouselSizes,\n listSize: self.getSize(self.items.length, slidesMaxSize.width, slidesMaxSize.height, options.isVertical, diff * self.items.length),\n innerSize: self.getSize(countVisible, slidesMaxSize.width, slidesMaxSize.height, options.isVertical),\n itemsSize: slidesSize,\n slidesSize: slidesSize\n };\n };\n Carousel.prototype.calcResponsive = function (items, options, responsiveOptions) {\n var self = this,\n propName = self.propName,\n carouselSizes,\n slidesSize,\n slidesMaxSize,\n countVisible;\n if (responsiveOptions.slidesToShow != undefined) {\n countVisible = responsiveOptions.slidesToShow;\n } else {\n throw new Error('Count sliders to show is not set');\n }\n carouselSizes = self.getCarouselSize();\n slidesMaxSize = self.getItemsMaxSizes(items);\n if (options.visibleMin != null && options.visibleMin > items.length) {\n countVisible = items.length;\n } else if (countVisible > items.length) {\n countVisible = items.length;\n }\n if (options.stretch) {\n slidesMaxSize[propName] = carouselSizes[propName] / countVisible;\n } else {\n //carouselSizes[propName] = carouselSizes[propName] - (slidesMaxSize[propName] * countVisible);\n var sizeSlides = slidesMaxSize[propName] * countVisible;\n carouselSizes[propName] = sizeSlides >= carouselSizes[propName] ? carouselSizes[propName] : carouselSizes[propName] - (carouselSizes[propName] - sizeSlides);\n }\n slidesMaxSize = {\n width: carouselSizes.width / countVisible,\n height: carouselSizes.height / countVisible\n };\n var isVertical = self.getIsVerticalOption();\n var diff = self.getScrollDiff(slidesMaxSize[self.getPropName(isVertical)], countVisible);\n if (isVertical === false) {\n slidesSize = {\n width: slidesMaxSize.width - diff\n //height: slidesMaxSize.height\n };\n } else {\n slidesSize = {\n //width: slidesMaxSize.width,\n height: slidesMaxSize.height - diff\n };\n }\n return {\n countVisible: countVisible,\n wrapSize: carouselSizes,\n listSize: self.getSize(self.items.length, slidesMaxSize.width, slidesMaxSize.height, isVertical, diff * self.items.length),\n innerSize: self.getSize(countVisible, slidesMaxSize.width, slidesMaxSize.height, isVertical),\n itemsSize: slidesSize,\n slidesSize: slidesSize\n };\n };\n Carousel.prototype.checkDots = function () {\n var self = this;\n var need;\n if (self.options.dots === true) {\n need = self.items.length !== 1 && self.countVisible !== self.items.length;\n if (need === false) {\n if (self.dotsContainer != null && self.dotsContainer.parentNode != null) {\n self.dotsContainer.parentNode.removeChild(self.dotsContainer);\n }\n self.dotsContainer = null;\n self.dots.length = 0;\n } else {\n self.renderDots();\n self.selectDots(self.options.indexActive);\n }\n }\n };\n Carousel.prototype.renderDots = function () {\n var self = this,\n newCount,\n dot,\n isRenderContaner = false,\n dim,\n dimAbs,\n itemTemp;\n if (self.dotsContainer == null) {\n self.dotsContainer = self.wrap.querySelector('.carousel-dots');\n if (self.dotsContainer != null) {\n Array.prototype.forEach.call(self.dotsContainer.children, function (el) {\n self.dots.push(el);\n });\n } else {\n self.dotsContainer = createComponent('ul');\n self.dotsContainer.className = 'carousel-dots ' + (self.options.dotsClass || '');\n isRenderContaner = true;\n }\n }\n newCount = self.items.length / self.options.scrollCount;\n dim = self.dots.length - newCount;\n dimAbs = Math.abs(dim);\n if (dim < 0) {\n for (var d = 0, len = dimAbs; d < len; d++) {\n dot = createComponent('li');\n dot.classList.add('carousel-dots-item');\n dot.innerHTML = '';\n self.dotsContainer.appendChild(dot);\n self.dots.push(dot);\n }\n self.dots.forEach(function (el, index) {\n el.setAttribute('data-index', index);\n });\n if (isRenderContaner === true) {\n self.wrap.appendChild(self.dotsContainer);\n }\n } else {\n for (var r = dimAbs - 1; r >= 0; r--) {\n itemTemp = self.dots.pop();\n itemTemp.parentNode.removeChild(itemTemp);\n }\n }\n };\n Carousel.prototype.renderNav = function () {\n var self = this,\n nav = self.wrap.querySelector('.carousel-nav'),\n navPrev,\n navNext,\n needRenderNav,\n needRenderPrev,\n needRenderNext;\n\n //#region nav find or create\n if (nav == null || nav.parentNode !== self.wrap) {\n nav = createComponent('div');\n needRenderNav = true;\n }\n nav.className = 'carousel-nav ' + ('carousel-nav-' + self.options.navPosition);\n self.nav = nav;\n //#endregion\n\n //#region prev find or create\n navPrev = nav.querySelector('.carousel-nav-prev');\n if (navPrev == null) {\n navPrev = createComponent('button');\n needRenderPrev = true;\n }\n self.navPrev = navPrev;\n\n //var isVertical = self.getIsVerticalOption();\n\n //navPrev.className = 'carousel-nav-prev ' + (isVertical ? self.options.prevIconVertical : self.options.prevIcon);\n\n //if (self.options.prevClass) {\n // self.options.prevClass.split(' ').forEach(function (item) {\n // navPrev.classList.add(item);\n // });\n //}\n\n self.navPrev = navPrev;\n //#endregion\n\n //#region next find or create\n navNext = nav.querySelector('.carousel-nav-next');\n if (navNext == null) {\n navNext = createComponent('button');\n needRenderNext = true;\n }\n self.navNext = navNext;\n self.addDirectionClassFromNav();\n\n //navNext.className = 'carousel-nav-next ' + (isVertical ? self.options.nextIconVertical : self.options.nextIcon);\n //if (self.options.nextClass) {\n // self.options.nextClass.split(' ').forEach(function (item) {\n // navNext.classList.add(item);\n // });\n //}\n\n //#endregion\n\n if (needRenderPrev === true) {\n nav.appendChild(navPrev);\n }\n if (needRenderNext === true) {\n nav.appendChild(navNext);\n }\n if (needRenderNav === true) {\n self.wrap.appendChild(nav);\n }\n };\n Carousel.prototype.removeDirectionClassFromNav = function () {\n var isVertical = this.getIsVerticalOption();\n var self = this;\n self.navNext.className = isVertical ? self.options.nextIconVertical : self.options.nextIcon;\n if (self.options.nextClass) {\n self.options.nextClass.split(' ').forEach(function (item) {\n self.navNext.classList.remove(item);\n });\n }\n self.navPrev.className = isVertical ? self.options.prevIconVertical : self.options.prevIcon;\n if (self.options.prevClass) {\n self.options.prevClass.split(' ').forEach(function (item) {\n self.navPrev.classList.remove(item);\n });\n }\n };\n Carousel.prototype.addDirectionClassFromNav = function () {\n var isVertical = this.getIsVerticalOption();\n var self = this;\n self.navNext.className = 'carousel-nav-next ' + (isVertical ? self.options.nextIconVertical : self.options.nextIcon);\n if (self.options.nextClass) {\n self.options.nextClass.split(' ').forEach(function (item) {\n self.navNext.classList.add(item);\n });\n }\n self.navPrev.className = 'carousel-nav-prev ' + (isVertical ? self.options.prevIconVertical : self.options.prevIcon);\n if (self.options.prevClass) {\n self.options.prevClass.split(' ').forEach(function (item) {\n self.navPrev.classList.add(item);\n });\n }\n };\n Carousel.prototype.generate = function (element) {\n var self = this,\n wrap,\n inner,\n needRenderInner,\n needRenderWrap;\n element.classList.add('carousel-list');\n if (self.options.itemActiveClass != null && self.options.itemActiveClass.length > 0) {\n self.options.itemActiveClass.split(' ').forEach(function (classNameValue) {\n self.items[self.options.indexActive].classList.add(classNameValue);\n });\n }\n if (self.options.itemSelectClass != null && self.options.itemSelectClass.length > 0) {\n self.options.itemSelectClass.split(' ').forEach(function (classNameValue) {\n self.items[self.options.indexActive].classList.add(classNameValue);\n });\n }\n\n //#region inner find or create\n if (self.list.parentNode != null && self.list.parentNode.classList.contains('carousel-inner') === true) {\n inner = self.list.parentNode;\n } else {\n inner = createComponent('div');\n needRenderInner = true;\n }\n inner.classList.add('carousel-inner');\n self.inner = inner;\n //#endregion\n\n //#region wrap find or create\n if (self.inner.parentNode != null && self.inner.parentNode.classList.contains('carousel') === true) {\n wrap = self.inner.parentNode;\n } else {\n wrap = createComponent('div');\n needRenderWrap = true;\n }\n var isVertical = self.getIsVerticalOption();\n wrap.classList.add('carousel');\n wrap.classList.add('carousel-' + (isVertical ? 'vertical' : 'horizontal'));\n wrap.classList.add('carousel-wrap-nav-' + self.options.navPosition);\n if (self.options.carouselClass != null && self.options.carouselClass.length > 0) {\n self.options.carouselClass.split(' ').filter(item => item.length > 0).forEach(function (item) {\n wrap.classList.add(item);\n });\n }\n if (self.options.scrollNav === true) {\n wrap.classList.add('carousel-scroll-nav');\n }\n self.wrap = wrap;\n //#endregion\n\n //TODO подумать, можно ли оптимизировать рендеринг\n if (needRenderInner) {\n wrap.appendChild(inner);\n }\n if (needRenderWrap) {\n //element.parentNode.appendChild(wrap);\n element.insertAdjacentElement('beforebegin', wrap);\n }\n if (needRenderInner) {\n inner.appendChild(element);\n }\n };\n Carousel.prototype.selectDots = function (index) {\n var self = this;\n if (self.dots == null || self.dotActive === self.dots[index]) {\n return;\n }\n if (self.dotActive != null) {\n self.dotActive.classList.remove('carousel-dots-selected');\n if (self.options.dotsItemSelectedClass != null && self.options.dotsItemSelectedClass.length > 0) {\n self.options.dotsItemSelectedClass.split(' ').forEach(function (classNameValue) {\n self.dotActive.classList.remove(classNameValue);\n });\n }\n if (self.options.dotsItemInnerSelectedClass != null && self.options.dotsItemInnerSelectedClass.length > 0) {\n self.options.dotsItemInnerSelectedClass.split(' ').forEach(function (classNameValue) {\n self.dotActive.children[0].classList.remove(classNameValue);\n });\n }\n }\n var dotSelectedIndex = self.dots.find(x => parseFloat(x.dataset.index) + self.options.scrollCount - 1 >= index);\n if (dotSelectedIndex != null) {\n self.dotActive = dotSelectedIndex;\n dotSelectedIndex.classList.add('carousel-dots-selected');\n if (self.options.dotsItemSelectedClass != null && self.options.dotsItemSelectedClass.length > 0) {\n self.options.dotsItemSelectedClass.split(' ').forEach(function (classNameValue) {\n dotSelectedIndex.classList.add(classNameValue);\n });\n }\n if (self.options.dotsItemInnerSelectedClass != null && self.options.dotsItemInnerSelectedClass.length > 0) {\n self.options.dotsItemInnerSelectedClass.split(' ').forEach(function (classNameValue) {\n dotSelectedIndex.children[0].classList.add(classNameValue);\n });\n }\n }\n };\n Carousel.prototype.doClone = function () {\n var self = this,\n oldClones,\n itemsDuplicate,\n itemsClonePrev,\n itemsCloneNext,\n fragmentPrev,\n fragmentNext,\n clonePrev,\n cloneNext,\n marginLeftValue;\n var clonesNext = [];\n var clonesPrev = [];\n\n //#region find and delete old clones\n\n oldClones = self.list.querySelectorAll('.js-carousel-clone');\n for (var c = oldClones.length - 1; c >= 0; c--) {\n oldClones[c].parentNode.removeChild(oldClones[c]);\n }\n for (var i = self.items.length - 1; i >= 0; i--) {\n delete self.items[i].carouselItemData.clone;\n }\n self.list.style.marginLeft = '0px';\n\n //#endregion\n\n if (self.countVisible >= self.items.length) {\n return null;\n }\n itemsDuplicate = self.items.slice();\n itemsClonePrev = Array.prototype.slice.call(itemsDuplicate.reverse(), 0, self.countVisible).reverse();\n itemsCloneNext = Array.prototype.slice.call(itemsDuplicate.reverse(), 0, self.countVisible);\n fragmentPrev = document.createDocumentFragment();\n fragmentNext = document.createDocumentFragment();\n for (var p = 0, len = itemsClonePrev.length; p < len; p++) {\n clonePrev = (itemsClonePrev[p].carouselItemData.originalClone || itemsClonePrev[p]).cloneNode(true);\n clonePrev.classList.add('js-carousel-clone');\n self.setItemSize(clonePrev, self.slidesSize[self.propName]);\n fragmentPrev.appendChild(clonePrev);\n clonesPrev.push(clonePrev);\n itemsClonePrev[p].carouselItemData.clone = clonePrev;\n }\n for (var n = 0, l = itemsCloneNext.length; n < l; n++) {\n cloneNext = (itemsCloneNext[n].carouselItemData.originalClone || itemsCloneNext[n]).cloneNode(true);\n cloneNext.classList.add('js-carousel-clone');\n self.setItemSize(cloneNext, self.slidesSize[self.propName]);\n fragmentNext.appendChild(cloneNext);\n clonesNext.push(cloneNext);\n itemsCloneNext[n].carouselItemData.clone = cloneNext;\n }\n\n //insert for prev\n self.list.insertBefore(fragmentPrev, self.items[0]);\n\n //insert for next\n self.list.appendChild(fragmentNext);\n marginLeftValue = -itemsClonePrev.length * self.slidesSize[self.propName];\n self.list.style.marginLeft = marginLeftValue + 'px';\n self.hasClones = true;\n self.countClone = itemsClonePrev.length + itemsCloneNext.length;\n self.clonesInOneDirection = (itemsClonePrev.length + itemsCloneNext.length) / 2;\n var result = {\n clonesNext: clonesNext,\n clonesPrev: clonesPrev,\n clonesNextCount: itemsCloneNext.length,\n clonesPrevCount: itemsClonePrev.length,\n marginLeftValue: marginLeftValue\n };\n if (self.options.onDoClone != null) {\n self.options.onDoClone(result);\n }\n return result;\n };\n Carousel.prototype.getMoveData = function (index) {\n var self = this,\n result;\n if (self.items.length > self.countVisible) {\n result = Math.abs(index) * self.slidesSize[self.propName] * (index < 0 ? 1 : -1);\n } else {\n result = 0;\n }\n return result;\n };\n Carousel.prototype.move = function (transformValue, useAnimate) {\n useAnimate = useAnimate != null ? useAnimate : true;\n var self = this,\n transformObj = {},\n transformStyle;\n var isVertical = self.getIsVerticalOption();\n transformObj[isVertical ? 'top' : 'left'] = transformValue;\n if (self.options.scrollNav === false) {\n //elStyle.webkitTransitionDuration = duration;\n //elStyle.transitionDuration = duration;\n\n self.list.style[transitionDurationName] = useAnimate === false ? '0ms' : self.options.speed / 1000 + 's';\n self.list.style[webkitTransitionDuration] = useAnimate === false ? '0ms' : self.options.speed / 1000 + 's';\n transformStyle = ['translate3d(', transformObj.left || 0, 'px,', ' ', transformObj.top || 0, 'px, 0px)'].join('');\n self.list.style[transformName] = transformStyle;\n } else {\n var scrollValue = Math.floor(isVertical ? self.inner.scrollTop : self.inner.scrollLeft);\n var scrollValueEnd = Math.floor(Math.abs((isVertical ? transformObj.top : transformObj.left) || 0));\n smoothScroll(self.inner, scrollValue, scrollValueEnd, isVertical);\n }\n self.transformValue = transformValue;\n };\n Carousel.prototype.moveAuto = function () {\n var self = this;\n if (autoStop === true) {\n return;\n }\n clearTimeout(self.timerAuto);\n self.timerAuto = setTimeout(function () {\n if (autoStop === true) {\n return;\n }\n self.next();\n self.moveAuto();\n }, self.options.autoPause);\n };\n Carousel.prototype.stopAuto = function () {\n autoStop = true;\n if (self.timerAuto != null) {\n clearTimeout(self.timerAuto);\n }\n };\n Carousel.prototype.startAuto = function () {\n var self = this;\n autoStop = false;\n self.moveAuto();\n };\n Carousel.prototype.checkNav = function () {\n var self = this,\n itemsCount = self.items.length;\n self.isPrevDisabled = self.options.auto === false && 0 === self.options.indexActive || self.countVisible >= itemsCount;\n self.isNextDisabled = self.options.auto === false && self.options.indexActive + self.countVisible === self.items.length || self.countVisible >= itemsCount;\n self.isNavNotShow = itemsCount <= self.countVisible;\n self.isPrevDisabled ? self.navPrev.setAttribute('disabled', 'disabled') : self.navPrev.removeAttribute('disabled');\n self.isNextDisabled ? self.navNext.setAttribute('disabled', 'disabled') : self.navNext.removeAttribute('disabled');\n self.wrap.classList[self.isNavNotShow === true ? 'add' : 'remove']('carousel-nav-not-show');\n };\n Carousel.prototype.prev = function () {\n var self = this,\n newIndex;\n var carouselAsNavFor = self.getCarouselAsNav();\n if (self.isPrevDisabled === true || self.animationLoop === true) {\n return;\n }\n newIndex = self.options.indexActive - self.options.scrollCount;\n\n //go to last item\n if (self.options.auto === true && newIndex < 0) {\n self.animationLoop = true;\n var returnFn = function () {\n self.list.removeEventListener('transitionend', returnFn);\n setTimeout(function () {\n self.animationLoop = false;\n self.goto(self.items.length - 1, false);\n if (carouselAsNavFor != null) {\n carouselAsNavFor.goto(self.items.length - 1, false);\n }\n }, 0);\n };\n self.list.addEventListener('transitionend', returnFn);\n }\n self.goto(newIndex, true, 'backwards');\n if (carouselAsNavFor != null) {\n carouselAsNavFor.goto(newIndex, true, 'backwards');\n }\n };\n Carousel.prototype.next = function () {\n var self = this,\n newIndex;\n var carouselAsNavFor = self.getCarouselAsNav();\n if (self.isNextDisabled === true || self.animationLoop === true) {\n return;\n }\n newIndex = self.options.indexActive + self.options.scrollCount;\n //go to first item\n\n if (self.options.auto === true && newIndex > self.items.length) {\n self.goto(0, false);\n newIndex = self.options.scrollCount;\n setTimeout(function () {\n self.goto(newIndex, true, 'forward');\n }, 0);\n return;\n }\n if (self.options.auto === true && newIndex === self.items.length) {\n // newIndex > self.items.length - self.countVisible\n\n self.animationLoop = true;\n var returnFn = function () {\n self.list.removeEventListener('transitionend', returnFn);\n setTimeout(function () {\n self.animationLoop = false;\n self.goto(0, false);\n if (carouselAsNavFor != null) {\n carouselAsNavFor.goto(0, false);\n }\n }, 0);\n };\n self.list.addEventListener('transitionend', returnFn);\n }\n self.goto(newIndex, true, 'forward');\n if (carouselAsNavFor != null) {\n carouselAsNavFor.goto(newIndex, true, 'forward');\n }\n };\n Carousel.prototype.loadImg = function (objForLoad, preload) {\n var self = this;\n var list, img;\n if (objForLoad != null) {\n list = Array.prototype.slice.call(objForLoad instanceof NodeList ? objForLoad : [objForLoad]);\n let dataSetKey;\n for (let i = 0, len = list.length; i < len; i++) {\n img = list[i];\n dataSetKey = img.dataset.src != null ? 'src' : img.dataset.srcset ? 'srcset' : null;\n if (img.dataset.carouselImg != null) {\n if (self.options.onLazyLoad != null) {\n img.addEventListener('load', function () {\n this.classList.remove('carousel-placeholder');\n });\n self.options.onLazyLoad(img, img);\n }\n } else if (dataSetKey != null && img.classList.contains('loaded') === false && img.dataset[dataSetKey].indexOf('{{') === -1) {\n // {{ - выражение ангуляра\n\n img.addEventListener('load', function () {\n this.classList.remove('carousel-placeholder');\n });\n img[dataSetKey] = img.dataset[dataSetKey];\n img.classList.add('loaded');\n if (preload === true) {\n let fakeImg = new Image();\n fakeImg[dataSetKey] = img.dataset[dataSetKey];\n }\n }\n }\n }\n };\n Carousel.prototype.loadImgInsideItems = function (start, end) {\n var self = this;\n var list = [];\n if (self.options.auto === true) {\n start = start < 0 ? 0 : start;\n list = list.concat(self.cloneResult.clonesPrev.slice());\n list = list.concat(self.items, self.cloneResult != null ? self.cloneResult.clonesNext : []);\n } else {\n list = list.concat(self.items);\n }\n for (var i = start; i < end; i++) {\n self.loadImg(list[i].querySelectorAll('img'));\n }\n };\n Carousel.prototype.goto = function (index, isAnimate, direction) {\n var self = this;\n var carouselAsNavFor = self.getCarouselAsNav();\n if (self.options.itemActiveClass != null && self.options.itemActiveClass.length > 0) {\n self.options.itemActiveClass.split(' ').forEach(function (classNameValue) {\n self.items[self.options.indexActive].classList.remove(classNameValue);\n self.items[index].classList.add(classNameValue);\n });\n }\n if (self.countVisible === 1) {\n if (self.options.itemSelectClass != null && self.options.itemSelectClass.length > 0) {\n self.options.itemSelectClass.split(' ').forEach(function (classNameValue) {\n self.items[self.options.indexActive].classList.remove(classNameValue);\n self.items[index].classList.add(classNameValue);\n });\n }\n if (carouselAsNavFor != null) {\n self.callFnCarouselAsNavFor(self.setItemSelect, [index]);\n }\n }\n self.options.indexActive = index;\n var maxIndex;\n if (self.items.length < self.countVisible) {\n maxIndex = 0;\n } else {\n maxIndex = self.items.length - self.countVisible + (self.options.auto === true ? self.countVisible : 0);\n }\n var minIndex = 0 - (self.options.auto === true ? self.countVisible : 0);\n if (self.options.auto === false) {\n if (index < minIndex) {\n index = minIndex;\n self.options.indexActive = minIndex;\n } else if (index > maxIndex) {\n index = maxIndex;\n self.options.indexActive = maxIndex;\n }\n }\n isAnimate = isAnimate != null ? isAnimate : true;\n var transform = self.getMoveData(self.options.indexActive);\n self.move(transform, isAnimate);\n if (self.options.nav === true) {\n self.checkNav();\n }\n if (self.options.dots) {\n var dotsIndex = self.options.indexActive;\n if (self.options.auto === true && self.options.indexActive === self.items.length) {\n dotsIndex = 0;\n } else if (self.options.auto === true && self.options.indexActive < 0) {\n dotsIndex = self.items.length - -self.options.indexActive;\n }\n self.selectDots(dotsIndex);\n }\n };\n Carousel.prototype.removeItem = function (child, keepInCache) {\n var self = this,\n index,\n clone;\n index = self.items.indexOf(child);\n if (index < 0) {\n return;\n }\n keepInCache = keepInCache != null ? keepInCache : true;\n if (child != null && child.parentNode != null) {\n if (self.options.auto === true && child.carouselItemData.clone != null) {\n clone = child.carouselItemData.clone;\n clone.parentNode.removeChild(clone);\n }\n child.parentNode.removeChild(child);\n self.items.splice(index, 1);\n }\n if (keepInCache === false) {\n self.removeFromCache(child);\n }\n\n //else {\n // self.addToCache(child);\n //}\n\n self.checkDots();\n return child;\n };\n Carousel.prototype.addItem = function (item, positonIndex) {\n var self = this,\n index = self.cache.indexOf(item),\n indexSibling = index - 1;\n if (index == -1 || self.items.length === 0 || self.items[indexSibling] == null || self.items[indexSibling].carouselItemData == null) {\n indexSibling = null;\n }\n if (indexSibling == null && positonIndex == null) {\n self.items.push(item);\n self.list.insertAdjacentElement('beforeend', item);\n } else {\n self.items.splice(positonIndex != null ? positonIndex : indexSibling + 1, 0, item);\n self.items[positonIndex != null ? positonIndex - 1 : indexSibling].insertAdjacentElement('afterend', item);\n }\n if (item.carouselItemData == null) {\n self.processItem(item);\n }\n return item;\n };\n Carousel.prototype.updateItems = function (newItems, keepInCache) {\n var self = this;\n var insertContent = document.createDocumentFragment();\n self.items.length = 0;\n keepInCache = keepInCache != null ? keepInCache : true;\n if (keepInCache === false) {\n self.clearCache();\n }\n for (var i = 0, len = newItems.length; i < len; i++) {\n insertContent.appendChild(newItems[i]);\n if (i < self.countVisible) {\n self.loadImg(newItems[i].querySelectorAll('img'), true);\n }\n }\n self.list.innerHTML = '';\n self.list.appendChild(insertContent);\n self.processItems(newItems, true);\n return newItems;\n };\n Carousel.prototype.getItems = function () {\n return this.items;\n };\n Carousel.prototype.filterItems = function (filterFunction) {\n var self = this,\n arrayAll = self.cache,\n itemsForVisible;\n var carouselAsNavFor = self.getCarouselAsNav();\n if (self.options.filterFn) {\n filterFunction = self.options.filterFn;\n }\n itemsForVisible = arrayAll.filter(filterFunction);\n for (var i = 0, len = arrayAll.length - 1; i <= len; i++) {\n if (self.observer != null) {\n if (arrayAll[i] != null) {\n var img = arrayAll[i].querySelector('img');\n if (img != null) {\n img.classList.remove('loaded');\n self.observer.unobserve(img);\n }\n }\n }\n }\n self.items = self.updateItems(itemsForVisible, true);\n for (var j = 0; itemsForVisible.length > j; j++) {\n if (self.observer != null) {\n if (itemsForVisible[j] != null) {\n var img = itemsForVisible[j].querySelector('img');\n if (img != null) {\n self.observer.observe(img);\n }\n }\n }\n }\n self.options.indexActive = 0;\n self.update();\n if (carouselAsNavFor != null) {\n self.callFnCarouselAsNavFor(self.filterItems, [filterFunction]);\n }\n return self.items;\n };\n Carousel.prototype.clearFilterItems = function () {\n var self = this;\n self.filterItems(function () {\n return true;\n });\n };\n Carousel.prototype.getActiveItem = function () {\n return this.items[this.options.indexActive];\n };\n Carousel.prototype.getSelectedItem = function () {\n return this.itemSelected;\n };\n Carousel.prototype.setItemSelect = function (item) {\n var self = this;\n var itemIndex;\n var carouselAsNavFor = self.getCarouselAsNav();\n if (item == null) {\n return;\n }\n self.itemSelected = null;\n if (typeof item === 'number') {\n itemIndex = item;\n item = self.items[item];\n if (item == null) {\n return;\n }\n } else {\n itemIndex = self.items.indexOf(item);\n }\n for (var j = self.items.length - 1; j >= 0; j--) {\n if (self.options.itemSelectClass != null) {\n self.options.itemSelectClass.split(' ').forEach(function (classNameValue) {\n self.items[j].classList.remove(classNameValue);\n });\n }\n if (self.items[j].carouselItemData != null) {\n self.items[j].carouselItemData.isSelect = false;\n }\n }\n if (self.options.itemSelectClass != null) {\n self.options.itemSelectClass.split(' ').forEach(function (cssClass) {\n item.classList.add(cssClass);\n if (self.options.auto === true && item.carouselItemData != null && item.carouselItemData.clone != null) {\n item.carouselItemData.clone.classList.add(cssClass);\n }\n });\n }\n if (item.carouselItemData != null) {\n item.carouselItemData.isSelect = true;\n self.itemSelected = item;\n }\n if (carouselAsNavFor != null) {\n self.callFnCarouselAsNavFor(self.setItemSelect, [itemIndex]);\n }\n };\n Carousel.prototype.dotClick = function (event) {\n var self = this,\n currentDot,\n index;\n if (event.target.tagName.toLowerCase() === 'i') {\n currentDot = event.target.parentNode;\n } else if (event.target.tagName.toLowerCase() === 'li') {\n currentDot = event.target;\n } else {\n return;\n }\n index = parseInt(currentDot.getAttribute('data-index'));\n self.goto(index === 0 ? 0 : index + self.options.scrollCount - 1);\n };\n Carousel.prototype.itemClick = function (item) {\n var self = this;\n var itemIndex;\n var itemObj;\n var carouselAsNavFor = self.getCarouselAsNav();\n if (typeof item === 'number') {\n itemIndex = item;\n itemObj = self.items[itemIndex];\n } else {\n itemIndex = self.items.indexOf(item);\n itemObj = item;\n }\n self.setItemSelect(itemObj);\n if (self.options.itemSelect != null) {\n self.options.itemSelect(self, itemObj, itemIndex);\n }\n if (carouselAsNavFor != null) {\n if (carouselAsNavFor.isVisibleItem(itemIndex) === false) {\n carouselAsNavFor.goto(itemIndex, true);\n }\n self.callFnCarouselAsNavFor(self.itemClick, [itemIndex]);\n }\n };\n Carousel.prototype.touch = function () {\n var self = this;\n var startCoords, movedCoords;\n function touchStart(event) {\n event.stopPropagation();\n startCoords = self.getCoordinates(event);\n movedCoords = startCoords;\n if (self.options.auto === true) {\n self.stopAuto();\n }\n self.list.addEventListener('touchmove', touchMove, {\n passive: true\n });\n self.list.addEventListener('touchend', touchEnd, {\n passive: true\n });\n }\n function touchStartScroll() {\n var scrollEvent = debounce(function () {\n self.inner.removeEventListener('scroll', scrollEvent);\n self.inner.removeEventListener('touchend', scrollEvent);\n var isVertical = self.getIsVerticalOption();\n var newIndex = Math.ceil(self.inner.scrollLeft / self.itemsSize[self.getPropName(isVertical)]);\n self.goto(newIndex, true);\n }, 700);\n self.inner.addEventListener('scroll', scrollEvent, {\n passive: true\n });\n self.inner.addEventListener('touchend', scrollEvent, {\n passive: true\n });\n }\n function touchMove(event) {\n var validSwipe;\n var coords = self.getCoordinates(event);\n var dim = coords.main - movedCoords.main;\n var dimAllTime = movedCoords.main - startCoords.main;\n isOverScrollX = self.listSize.width + Math.abs(dimAllTime) - self.slidesSize.width > self.listSize.width;\n if (self.options.auto === true) {\n self.goToFirstInMobile();\n }\n if (!isScrolling) {\n validSwipe = self.validSwipe(startCoords, coords, dim >= 0 ? 1 : -1);\n if (validSwipe === true) {\n isScrolling = true;\n } else {\n isScrolling = false;\n }\n }\n if (isScrolling) {\n event.stopPropagation();\n self.move((self.transformValue || 0) + dim, false);\n movedCoords = coords;\n } else {\n if (self.options.scrollNav === false) {\n self.list.removeEventListener('touchmove', touchMove);\n }\n self.list.removeEventListener('touchend', touchEnd);\n if (self.options.auto === true) {\n self.startAuto();\n }\n }\n }\n function touchEnd(event) {\n self.list.removeEventListener('touchmove', touchMove);\n self.list.removeEventListener('touchend', touchEnd);\n var dim = movedCoords.main - startCoords.main;\n if (isScrolling) {\n gotoByTouhMove(dim);\n }\n if (self.options.auto === true) {\n self.startAuto();\n }\n isScrolling = false;\n }\n function gotoByTouhMove(dim) {\n var dimAllTime = movedCoords.main - startCoords.main;\n var maxIndex = self.items.length - self.countVisible + (self.options.auto === true ? self.countVisible - 1 : 0);\n var minIndex = 0 - (self.options.auto === true ? self.countVisible - 1 : 0);\n var isVertical = self.getIsVerticalOption();\n var touchMoveItemsCount = Math.abs(Math.round(dimAllTime / self.slidesSize[self.getPropName(isVertical)])) || 1;\n var index = dimAllTime < 0 ? self.options.indexActive + touchMoveItemsCount : self.options.indexActive - touchMoveItemsCount;\n var carouselAsNavFor = self.getCarouselAsNav();\n var direction = dim >= 0 ? 'forward' : 'backward';\n if (self.options.auto === false && index > maxIndex) {\n index = maxIndex;\n } else if (self.options.auto === false && index < minIndex) {\n index = minIndex;\n }\n if (self.options.auto === true && isOverScrollX && direction === 'backward') {\n index = self.items.length - self.countVisible + self.clonesInOneDirection;\n } else if (self.options.auto === true && isOverScrollX && direction === 'forward') {\n index = 0 - self.countVisible;\n }\n if (carouselAsNavFor != null && carouselAsNavFor.isVisibleItem(index) === false) {\n carouselAsNavFor.goto(index, true);\n }\n self.goto(index, true);\n isOverScrollX = false;\n }\n self.list.addEventListener('touchstart', self.options.scrollNav === false ? touchStart : touchStartScroll, {\n passive: true\n });\n };\n Carousel.prototype.getCoordinates = function (event) {\n var self = this;\n var originalEvent = event.originalEvent || event;\n var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];\n var e = originalEvent.changedTouches && originalEvent.changedTouches[0] || touches[0];\n var result;\n var isVertical = self.getIsVerticalOption();\n if (isVertical) {\n result = {\n main: e.clientY,\n alt: e.clientX\n };\n } else {\n result = {\n main: e.clientX,\n alt: e.clientY\n };\n }\n return result;\n };\n Carousel.prototype.validSwipe = function (startCoords, coords) {\n var deltaAlt = Math.abs(coords.alt - startCoords.alt);\n var deltaMain = Math.abs(coords.main - startCoords.main);\n var self = this;\n var touchAngle = Math.atan2(Math.abs(deltaAlt), Math.abs(deltaMain)) * 180 / Math.PI;\n var isVertical = self.getIsVerticalOption();\n if (isVertical === false && touchAngle > 45) {\n return false;\n }\n if (isVertical === false && touchAngle <= 45) {\n return true;\n }\n if (isVertical === true && 90 - touchAngle > 45) {\n return true;\n } else {\n return false;\n }\n };\n Carousel.prototype.bindIt = function () {\n var self = this,\n options = self.options;\n if (isTouchDevice === true) {\n self.touch();\n window.addEventListener('orientationchange', self.update.bind(self));\n } else {\n window.addEventListener('resize', function () {\n self.update();\n });\n }\n if (options.auto === true && isTouchDevice === false) {\n //self.wrap.removeEventListener('mouseenter', self.stopAuto);\n self.wrap.addEventListener('mouseenter', function () {\n self.stopAuto();\n });\n\n //self.wrap.removeEventListener('mouseleave', self.startAuto);\n self.wrap.addEventListener('mouseleave', function () {\n self.startAuto();\n });\n }\n self.wrap.addEventListener('click', function (event) {\n var itemClicked;\n if (options.nav === true) {\n if (event.target === self.navNext) {\n self.next();\n return;\n } else if (event.target === self.navPrev) {\n self.prev();\n return;\n }\n }\n if (options.dots === true && closest(event.target, self.dotsContainer) !== null) {\n self.dotClick(event);\n return;\n }\n itemClicked = closest(event.target, '.js-carousel-item');\n if (itemClicked !== null) {\n self.itemClick(itemClicked);\n }\n });\n if (self.options.responsive != null) {\n Object.keys(self.options.responsive).forEach(function (mqRule) {\n var mq = getMediaQuery(mqRule);\n mq.addListener(function (event) {\n if (event.matches === true) {\n self.update();\n }\n });\n });\n }\n if (self.options.auto) {\n document.addEventListener('visibilitychange', function () {\n if (document.visibilityState === 'visible') {\n self.startAuto();\n } else {\n self.stopAuto();\n }\n });\n }\n };\n Carousel.prototype.init = function () {\n var self = this,\n sizes;\n\n //self.cache.length = 0;\n\n self.processItems(self.items, true);\n self.generate(self.list);\n self.sizes = self.calc(self.items, self.options, self.options.responsive != null ? self.responsiveOption : null); //self.wrap, self.inner, self.list,\n\n self.setSizes(self.sizes.wrapSize, self.sizes.innerSize, self.sizes.listSize, self.sizes.itemsSize);\n self.checkDots();\n if (self.options.nav === true) {\n self.renderNav();\n }\n if (self.options.auto === true && self.countVisible < self.items.length) {\n self.cloneResult = self.doClone();\n self.sizes.listSize[self.propName] += Math.abs(self.cloneResult.marginLeftValue) * 2; //2 - с обеих сторон ширина клонированных слайдов\n\n self.setSizes(self.sizes.wrapSize, self.sizes.innerSize, self.sizes.listSize, self.sizes.itemsSize);\n self.goto(self.options.indexActive, false);\n }\n if (self.options.nav === true) {\n self.checkNav();\n }\n if (self.options.auto === true) {\n self.startAuto();\n }\n if (self.dots != null) {\n self.selectDots(self.options.indexActive);\n }\n if (self.options.initFn != null) {\n self.options.initFn(self);\n }\n self.bindIt();\n self.setIntersectionObserver();\n self.initilized = true;\n self.wrap.classList.add('carousel-initilized');\n self.addDirectionCarouselClass();\n return self;\n };\n Carousel.prototype.resetSizes = function (callback) {\n var self = this;\n var isVertical = self.getIsVerticalOption();\n self.wrap.style[self.propName] = isVertical ? '100%' : 'auto';\n self.inner.style[self.propName] = isVertical ? '100%' : 'auto';\n self.list.style[self.propName] = isVertical ? '100%' : 'auto';\n self.list.style.marginLeft = '0';\n self.removeDirectionCarouselClass();\n if (self.navPref != null && self.navNext != null) {\n self.removeDirectionClassFromNav();\n }\n var oldClones = self.list.querySelectorAll('.js-carousel-clone');\n for (var c = oldClones.length - 1; c >= 0; c--) {\n clearStyleSlide(oldClones[c], self);\n }\n for (var i = self.items.length - 1; i >= 0; i--) {\n clearStyleSlide(self.items[i], self);\n self.items[i].setAttribute('style', self.items[i].carouselItemData.stylesRaw || '');\n }\n setTimeout(function () {\n callback();\n }, 500);\n };\n function clearStyleSlide(slide, carousel) {\n slide.style[carousel.propName] = 'auto';\n slide.style['flex-basis'] = 'auto';\n slide.style['msFlexPreferredSize'] = 'auto';\n slide.style['webkitFlexBasis'] = 'auto';\n if (self.propName === 'width') {\n slide.style.maxWidth = 'none';\n } else {\n slide.style.maxHeight = 'none';\n }\n }\n Carousel.prototype.update = function () {\n var self = this,\n sizes;\n self.wrap.classList.remove('carousel-nav-not-show');\n self.wrap.classList.add('carousel-update');\n self.resetSizes(function () {\n if (self.list.children != null && self.list.children.length > 0) {\n var childrenWithoutClone = Array.prototype.filter.call(self.list.children, function (child) {\n return child.classList.contains('js-carousel-clone') === false;\n });\n } else {\n return;\n }\n self.responsiveOption = self.options.responsive != null ? self.checkResponsive() : null;\n var isVertical = self.getIsVerticalOption();\n self.addDirectionCarouselClass();\n if (self.navPref != null && self.navNext != null) {\n self.addDirectionClassFromNav();\n }\n self.propName = self.getPropName(isVertical);\n self.items = Array.prototype.slice.call(childrenWithoutClone);\n self.processItems(self.items);\n sizes = self.calc(self.items, self.options, self.responsiveOption);\n self.setSizes(sizes.wrapSize, sizes.innerSize, sizes.listSize, sizes.itemsSize);\n if (self.options.auto === true) {\n self.cloneResult = self.doClone();\n if (self.cloneResult != null) {\n sizes.listSize[self.propName] += Math.abs(self.cloneResult.marginLeftValue) * 2; //2 - с обеих сторон ширина клонированных слайдов\n }\n\n self.setSizes(sizes.wrapSize, sizes.innerSize, sizes.listSize, sizes.itemsSize);\n\n //self.options.indexActive = 0;\n } else {\n if (self.options.nav === true) {\n self.checkNav();\n }\n }\n self.goto(self.options.indexActive, false);\n if (self.options.dots === true) {\n self.checkDots();\n self.selectDots(self.options.indexActive);\n }\n self.wrap.classList.remove('carousel-update');\n if (self.options.onUpdate != null) {\n self.options.onUpdate();\n }\n });\n };\n Carousel.prototype.checkResponsive = function () {\n var self = this;\n var mq;\n var mqOptions;\n var mqRules = Object.keys(this.options.responsive);\n for (var i = mqRules.length - 1; i >= 0; i--) {\n mq = getMediaQuery(mqRules[i]);\n mqOptions = self.options.responsive[mqRules[i]];\n if (mq.matches === true) {\n break;\n }\n }\n return mqOptions;\n };\n Carousel.prototype.getCarouselAsNav = function () {\n return storage[this.options.asNavFor] && storage[this.options.asNavFor].obj;\n };\n Carousel.prototype.callFnCarouselAsNavFor = function (fn, params) {\n var self = this;\n if (self.options.asNavFor != null && self.options.asNavFor.length > 0 && storage[self.options.asNavFor] && storage[self.options.asNavFor].state.callAsNav !== true) {\n storage[self.options.asNavFor].state.callAsNav = true;\n fn.apply(storage[self.options.asNavFor].obj, params);\n storage[self.options.asNavFor].state.callAsNav = false;\n }\n };\n Carousel.prototype.whenAsNavForReady = function (idAsNavFor, callback) {\n if (storage[idAsNavFor] != null) {\n callback(storage[idAsNavFor]);\n } else {\n deferList[idAsNavFor] = callback;\n }\n };\n Carousel.prototype.resolveAsNavForReady = function (idAsNavFor) {\n if (deferList[idAsNavFor] != null) {\n deferList[idAsNavFor](storage[idAsNavFor]);\n }\n };\n Carousel.prototype.isVisibleItem = function (item) {\n var self = this;\n var itemObj = typeof item === 'number' ? self.items[item] : item;\n var itemIndex = itemObj.carouselItemData.index;\n var isVertical = self.getIsVerticalOption();\n var minIndex = (self.options.scrollNav === true ? self.inner.scrollLeft : Math.abs(self.transformValue)) / self.slidesSize[self.getPropName(isVertical)];\n var maxIndex = minIndex + self.countVisible;\n return minIndex < itemIndex && maxIndex > itemIndex;\n };\n Carousel.prototype.getScrollDiff = function (itemSize, countVisible) {\n return this.options.scrollNav === true ? Math.ceil(itemSize / 2 / countVisible) : 0;\n };\n Carousel.prototype.goToFirstInMobile = function () {\n var self = this;\n if (self.options.indexActive >= self.items.length + self.clonesInOneDirection - self.countVisible) {\n self.goto(0, false);\n } else if (self.options.indexActive <= 0 - self.clonesInOneDirection) {\n self.goto(self.items.length - self.countVisible, false);\n }\n };\n Carousel.prototype.setIntersectionObserver = function (objOptions, funcCallback, classElement) {\n var self = this;\n var targetArr = self.inner.querySelectorAll(classElement || 'img');\n if (targetArr != null && targetArr.length > 0) {\n var isVertical = self.getIsVerticalOption();\n var options = objOptions || {\n root: self.inner,\n rootMargin: (isVertical ? self.innerSize.height : self.innerSize.width) + 'px',\n threshold: 0\n };\n var callback = funcCallback || function (entries, observer) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting) {\n var img = entry.target;\n self.loadImg(img);\n self.observer.unobserve(img);\n }\n });\n };\n if (window.IntersectionObserver) {\n self.observer = new IntersectionObserver(callback, options);\n for (var i = 0; i < targetArr.length; i++) {\n self.observer.observe(targetArr[i]);\n }\n } else {\n for (var i = 0; i < targetArr.length; i++) {\n var img = targetArr[i];\n self.loadImg(img);\n }\n }\n }\n };\n Carousel.prototype.getIsVerticalOption = function () {\n var self = this;\n return self.responsiveOption != null && self.responsiveOption.isVertical != null ? self.responsiveOption.isVertical : self.options.isVertical;\n };\n Carousel.prototype.removeDirectionCarouselClass = function () {\n this.wrap.classList.remove('carousel-vertical');\n this.wrap.classList.remove('carousel-horizontal');\n };\n Carousel.prototype.addDirectionCarouselClass = function () {\n var isVertical = this.getIsVerticalOption();\n this.wrap.classList.add(isVertical ? 'carousel-vertical' : 'carousel-horizontal');\n };\n window.Carousel = Carousel;\n function createComponent(tagName) {\n if (clonesForCreate[tagName] == null) {\n clonesForCreate[tagName] = document.createElement(tagName);\n }\n return clonesForCreate[tagName].cloneNode();\n }\n function closest(element, selector) {\n var parent = element,\n matchesSelector;\n if (parent == null) {\n return null;\n }\n matchesSelector = parent.matches || parent.webkitMatchesSelector || parent.mozMatchesSelector || parent.msMatchesSelector;\n while (parent != document.body && parent != document && parent != null) {\n if (typeof selector === 'string') {\n if (matchesSelector.bind(parent)(selector) === true) {\n return parent;\n }\n } else {\n if (parent == selector) {\n return parent;\n }\n }\n parent = parent.parentNode;\n }\n return null;\n }\n function getMediaQuery(value) {\n return window.matchMedia('(min-width:' + value + 'px)');\n }\n function smoothScroll(element, scrollValue, scrollEnd, isVertical) {\n var timeLapsed = 0,\n start,\n speed = 700,\n percentage,\n position;\n var distance = scrollEnd - scrollValue;\n function go(timestamp) {\n var finish = true;\n if (!start) {\n start = timestamp;\n }\n timeLapsed += timestamp - start;\n percentage = speed === 0 ? 0 : timeLapsed / speed;\n percentage = percentage > 1 ? 1 : percentage;\n position = Math.floor(scrollValue + distance * animateValue(percentage));\n if (position != scrollEnd) {\n finish = false;\n start = timestamp;\n }\n element.scrollTo(!isVertical && position, isVertical && position);\n if (finish === false) {\n window.requestAnimationFrame(go, element);\n }\n }\n window.requestAnimationFrame(go, element);\n }\n function debounce(func, ms) {\n var timer;\n return function () {\n if (timer != null) {\n clearTimeout(timer);\n }\n var vm = this;\n var args = arguments;\n timer = setTimeout(function () {\n func.apply(vm, args);\n }, ms);\n };\n }\n\n //easeInOutCubic\n function animateValue(time) {\n return time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1;\n }\n})(window);","var CarouselCtrl = function ($element, $scope, $q, carouselService, $timeout) {\n var ctrl = this;\n var carouselImgList = {};\n var deferList = [];\n ctrl.init = function () {\n var element = $element[0];\n return carouselService.waitLoadImages(element.querySelectorAll('img'), ctrl.carouselOptions).then(function () {\n setTimeout(function () {\n var carouselEl = element;\n if (ctrl.initilazeTo != null) {\n carouselEl = carouselEl.querySelector(ctrl.initilazeTo);\n }\n ctrl.carouselNative = new Carousel(carouselEl, ctrl.carouselOptions).init();\n if (deferList.length > 0) {\n deferList.forEach(function (item) {\n item.resolve(ctrl);\n });\n }\n $scope.$digest();\n }, 0);\n });\n };\n ctrl.addCarouselImg = function (carouselImg) {\n var id = ctrl.generateCarouselImgId();\n carouselImgList[id] = carouselImg;\n return id;\n };\n ctrl.callFnFromCarouselImg = function (img, carouselItem) {\n var id = img.dataset.carouselImgId;\n if (carouselImgList[id] != null) {\n carouselImgList[id].callback();\n }\n };\n ctrl.generateCarouselImgId = function () {\n return 'carouselImgId_' + Math.random();\n };\n ctrl.whenCarouselInit = function () {\n var defer = $q.defer();\n if (ctrl.carouselNative == null) {\n deferList.push(defer);\n } else {\n defer.resolve(ctrl);\n }\n return defer.promise;\n };\n};\nCarouselCtrl.$inject = ['$element', '$scope', '$q', 'carouselService', '$timeout'];\nexport default CarouselCtrl;","carouselImgDirective.$inject = [\"$parse\"];\ncarouselDirective.$inject = [\"$compile\", \"$document\", \"$window\", \"carouselDefault\"];\n/* @ngInject */\nfunction carouselDirective($compile, $document, $window, carouselDefault) {\n return {\n restrict: 'A',\n scope: {\n isVertical: '&',\n scrollCount: '&',\n nav: '&',\n dots: '&',\n speed: '&',\n auto: '&',\n autoPause: '&',\n indexActive: '=?',\n prevIcon: '@',\n nextIcon: '@',\n filterFn: '&',\n prevIconVertical: '@',\n nextIconVertical: '@',\n prevClass: '@',\n nextClass: '@',\n dotsClass: '@',\n dotsItemClass: '@',\n dotsItemSelectedClass: '@',\n dotsItemInnerSelectedClass: '@',\n visibleMax: '&',\n visibleMin: '&',\n itemSelectClass: '@',\n itemActiveClass: '@',\n carouselClass: '@',\n stretch: '&',\n navPosition: '@',\n initOnLoad: ' 0) {\n if (children.length === 1 && children[0].classList.contains('carousel-inner')) {\n children = children[0].children;\n }\n if (children != null) {\n for (var i = 0, len = children.length; i < len; i++) {\n children[i].carouselItemData = children[i].carouselItemData || {};\n children[i].carouselItemData.originalClone = children[i].cloneNode(true);\n }\n }\n }\n }\n memoryItemsAsClone();\n if ($document[0].readyState !== 'complete') {\n $window.addEventListener('load', function () {\n _initWrap();\n });\n } else {\n _initWrap();\n }\n }\n };\n}\n\n/* @ngInject */\nfunction carouselImgDirective($parse) {\n return {\n require: '^?carousel',\n link: function (scope, element, attrs, carouselCtrl) {\n if (carouselCtrl != null) {\n var callbackParsed = $parse(attrs.carouselImg);\n var callback = function (img, carouselItem) {\n return callbackParsed(scope, {\n img: img,\n carouselItem: carouselItem\n });\n };\n var carouselImgId = carouselCtrl.addCarouselImg({\n callback: callback\n });\n attrs.$set('dataCarouselImgId', carouselImgId);\n }\n }\n };\n}\nexport { carouselDirective, carouselImgDirective };","var carouselService = function ($q) {\n var service = this;\n var imageLoad = function (imageSrc) {\n var deferItem = $q.defer(),\n imageFake = new Image();\n imageFake.addEventListener('load', function () {\n deferItem.resolve(true);\n });\n imageFake.addEventListener('error', function () {\n deferItem.resolve();\n });\n imageFake.src = imageSrc;\n return deferItem.promise;\n };\n var checkNeedLoad = function (image) {\n return !image.complete || typeof image.naturalWidth === 'undefined' || image.naturalWidth === 0;\n };\n service.waitLoadImages = function (images, carouselOptions) {\n var deferMain = $q.defer(),\n promises = [];\n var countLoadImageInit = carouselOptions.visibleMax;\n var countLoadImage;\n if (countLoadImageInit != null) {\n countLoadImage = images.length - 1 <= countLoadImageInit ? images.length - 1 : countLoadImageInit;\n } else {\n countLoadImage = images.length - 1;\n }\n for (var i = 0; i <= countLoadImage; i++) {\n if (checkNeedLoad(images[i]) === true) {\n promises.push(imageLoad(images[i].src || images[i].dataset.src));\n }\n if ((images[i].src == null || images[i].src.length === 0) && images[i].dataset.src != null && images[i].dataset.src.length > 0) {\n images[i].src = images[i].dataset.src;\n }\n }\n if (carouselOptions.auto === true && countLoadImageInit != null) {\n for (var k = images.length - 1; k >= images.length - countLoadImageInit; k--) {\n if (checkNeedLoad(images[k]) === true) {\n promises.push(imageLoad(images[k].src || images[k].dataset.src));\n }\n if ((images[k].src == null || images[k].src.length === 0) && images[k].dataset.src != null && images[k].dataset.src.length > 0) {\n images[k].src = images[k].dataset.src;\n }\n }\n }\n if (promises.length === 0) {\n promises.push(deferMain.promise);\n deferMain.resolve();\n }\n return $q.all(promises);\n };\n};\ncarouselService.$inject = ['$q'];\nexport default carouselService;","iframeResponsiveCtrl.$inject = [\"$sce\", \"iframeResponsiveService\", \"$scope\", \"$timeout\"];\n/*@ngInject*/\nfunction iframeResponsiveCtrl($sce, iframeResponsiveService, $scope, $timeout) {\n var ctrl = this,\n stateChangeFlag = true;\n ctrl.showContent = function () {\n ctrl.isShowContent = true;\n if (ctrl.deviceMobile && ctrl.asBackground) {\n if (ctrl.useVimeo) {\n var vimeoVideoId = iframeResponsiveService.getVideoIdFromVimeo(ctrl.src);\n iframeResponsiveService.getVimeoCover(vimeoVideoId).then(function (response) {\n if (response.data != null) {\n ctrl.coverVideoPath = response.data.thumbnail_url;\n }\n });\n } else if (ctrl.useYouTube) {\n var YTVideoId = iframeResponsiveService.getVideoIdFromYouTube(ctrl.src);\n ctrl.coverVideoPath = iframeResponsiveService.getYTCover(YTVideoId);\n }\n } else {\n if (ctrl.isPlayerCode) {\n ctrl.playerCode = ctrl.src;\n } else {\n ctrl.src = iframeResponsiveService.getSrc(ctrl.src);\n }\n if (ctrl.inModal === true) {\n ctrl.pasteVideoForModal(ctrl.src);\n } else {\n //$timeout(function () {\n ctrl.pasteVideo(ctrl.src, ctrl.autoplay, ctrl.loop);\n //}, 0);\n }\n }\n };\n\n ctrl.pasteVideoForModal = function (src) {\n ctrl.stopOthersVideo();\n ctrl.showVideo();\n ctrl.hideCover();\n if (ctrl.useYouTube) {\n src = iframeResponsiveService.getYouTubeCode(src, true);\n }\n if (ctrl.useVimeo) {\n src = iframeResponsiveService.getVimeoCode(src, true);\n }\n ctrl.iframeSrc = $sce.trustAsResourceUrl(src);\n };\n ctrl.onPlayerReady = function (event) {\n if (ctrl.autoplay) {\n ctrl.player.mute();\n ctrl.player.playVideo();\n }\n if (stateChangeFlag) {\n stateChangeFlag = false;\n }\n };\n ctrl.onPlayerStateChange = function (event) {\n ctrl.videoLoaded = true;\n if (event.data === -1) {\n ctrl.muteOn = true; // autoplay\n\n $timeout(function () {\n ctrl.hideCover();\n }, 100);\n } else if (event.data === 1) {\n if (!ctrl.disabledStop) {\n iframeResponsiveService.run(ctrl, 'youtube');\n }\n }\n };\n ctrl.showVideo = function () {\n ctrl.visibleVideo = true;\n };\n ctrl.hideVideo = function () {\n ctrl.visibleVideo = false;\n };\n ctrl.showCover = function () {\n ctrl.visibleCover = true;\n };\n ctrl.hideCover = function () {\n ctrl.visibleCover = false;\n };\n ctrl.stopOthersVideo = function () {\n if (!ctrl.disabledStop) {\n iframeResponsiveService.run(ctrl, 'vimeo');\n iframeResponsiveService.run(ctrl, 'youtube');\n }\n };\n ctrl.pasteYTIframeSrc = function (src, playerId, autoplay, loop) {\n var YTVideoId = iframeResponsiveService.getVideoIdFromYouTube(src);\n ctrl.coverVideoPath = iframeResponsiveService.getYTCover(YTVideoId);\n $timeout(function () {\n if (!iframeResponsiveService.checkInitYouTubeIframeAPI()) {\n iframeResponsiveService.addOnYouTubeIframeAPIReady().then(function () {\n ctrl.player = iframeResponsiveService.getYTPlayerAPI(playerId, YTVideoId, {\n onReady: ctrl.onPlayerReady,\n onStateChange: ctrl.onPlayerStateChange\n }, autoplay, loop);\n }).catch(function (error) {\n console.error(error);\n });\n } else {\n ctrl.player = iframeResponsiveService.getYTPlayerAPI(ctrl.playerId, YTVideoId, {\n onReady: ctrl.onPlayerReady,\n onStateChange: ctrl.onPlayerStateChange\n }, autoplay, loop);\n }\n });\n var YTCode = iframeResponsiveService.getYouTubeCode(src, autoplay, YTVideoId, loop);\n ctrl.iframeSrc = $sce.trustAsResourceUrl(YTCode);\n };\n ctrl.pasteVimeoIframeSrc = function (src, playerId, autoplay, loop) {\n var vimeoVideoId = iframeResponsiveService.getVideoIdFromVimeo(src);\n iframeResponsiveService.getVimeoCover(vimeoVideoId).then(function (response) {\n if (response.data != null) {\n ctrl.coverVideoPath = response.data.thumbnail_url;\n }\n });\n $timeout(function () {\n if (!iframeResponsiveService.checkInitVimeoIframeAPI()) {\n iframeResponsiveService.addVimeoIframeAPI().then(function () {\n ctrl.player = iframeResponsiveService.getVimeoPlayerAPI(playerId, vimeoVideoId, autoplay, loop);\n ctrl.player.on('play', function () {\n ctrl.stopOthersVideo();\n iframeResponsiveService.run(ctrl, 'vimeo');\n ctrl.hideCover();\n $scope.$digest();\n });\n }).catch(function (error) {\n console.error(error);\n });\n } else {\n ctrl.player = iframeResponsiveService.getVimeoPlayerAPI(playerId, vimeoVideoId, autoplay, loop);\n }\n });\n };\n ctrl.pasteVideo = function (src, autoplay, loop) {\n ctrl.playerId = iframeResponsiveService.getPlayerId();\n if (ctrl.useYouTube) {\n ctrl.pasteYTIframeSrc(src, ctrl.playerId, autoplay, loop);\n }\n if (ctrl.useVimeo) {\n ctrl.pasteVimeoIframeSrc(src, ctrl.playerId, autoplay, loop);\n }\n };\n}\nexport default iframeResponsiveCtrl;","iframeResponsiveDirective.$inject = [\"iframeResponsiveService\", \"$templateRequest\", \"$compile\", \"urlHelper\"];\nimport * as tpls from '../templates/iframeResponsiveTemplates.js';\n\n/*@ngInject*/\nexport default function iframeResponsiveDirective(iframeResponsiveService, $templateRequest, $compile, urlHelper) {\n return {\n controller: 'IframeResponsiveCtrl',\n controllerAs: '$ctrl',\n bindToController: true,\n priority: 100,\n scope: {\n src: '@',\n videoWidth: '@',\n videoHeight: '@',\n autoplay: '
'\n };\n}\n;","import lozadAdvModule from '../lozad-adv/lozadAdv.module.js';\nimport './styles/iframe-responsive.scss';\nimport iframeResponsiveCtrl from './controllers/iframeResponsiveController.js';\nimport iframeResponsiveDirective from './directives/iframeResponsiveDirective.js';\nimport iframeResponsiveService from './services/iframeResponsiveService.js';\nconst moduleName = 'iframeResponsive';\nangular.module(moduleName, [lozadAdvModule]).directive('iframeResponsive', iframeResponsiveDirective).service('iframeResponsiveService', iframeResponsiveService).controller('IframeResponsiveCtrl', iframeResponsiveCtrl);\nexport default moduleName;","export default function iframeResponsiveService($q, $window, $http) {\n var service = this,\n initializedYTList = [],\n initializedVimeoList = [],\n playerId = 0,\n // regExpIdVideo = /^.*(youtu.be\\/|v\\/|e\\/|u\\/\\w+\\/|embed\\/|v=)([^#\\&\\?]*).*/,\n regExpIdVideo = /(youtu.*be.*)\\/(watch\\?v=|embed\\/|v|shorts|)(.*?((?=[&#?])|$))/,\n regExpIframe = new RegExp('(?:])'),\n regExpGetUrlFromSrc = new RegExp('(?:src=\").*?(?=[?\"])'),\n urlRegex = /(http[s]?:)?(\\/\\/)?(www\\.)?[a-zA-Z0-9]+\\.[^\\s]{2,}/,\n loadedYouTubeIframeAPI = false,\n loadedVimeoIframeAPI = false,\n activeItem;\n service.checkInitYouTubeIframeAPI = function () {\n return loadedYouTubeIframeAPI;\n };\n service.checkInitVimeoIframeAPI = function () {\n return loadedVimeoIframeAPI;\n };\n service.addYouTubeIframeAPI = function () {\n var tag = document.createElement('script');\n tag.src = 'https://www.youtube.com/iframe_api';\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n };\n service.addVimeoIframeAPI = function () {\n var defer = $q.defer();\n initializedVimeoList.push(defer);\n var tag = document.createElement('script');\n tag.src = 'https://www.youtube.com/iframe_api';\n tag.onload = function () {\n initializedVimeoList.forEach(function (defer) {\n defer.resolve();\n });\n loadedVimeoIframeAPI = true;\n };\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n return defer.promise;\n };\n service.addOnYouTubeIframeAPIReady = function () {\n window.onYouTubeIframeAPIReady = function () {\n initializedYTList.forEach(function (defer) {\n defer.resolve();\n });\n loadedYouTubeIframeAPI = true;\n };\n var defer = $q.defer();\n initializedYTList.push(defer);\n if (!service.checkInitYouTubeIframeAPI()) {\n service.addYouTubeIframeAPI();\n }\n return defer.promise;\n };\n service.getPlayerId = function () {\n return 'player' + (playerId += 1);\n };\n service.getVideoIdFromYouTube = function (url) {\n // return url.match(regExpIdVideo)[2];\n return url.match(regExpIdVideo)[3];\n };\n service.getVideoIdFromVimeo = function (url) {\n var regexp = /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|video\\/|)(\\d+)(?:[a-zA-Z0-9_\\-]+)?/i;\n return url.match(regexp)[1];\n };\n service.getYTPlayerAPI = function (elId, videoId, callbacks, autoplay, loop) {\n return new YT.Player(elId, {\n videoId: videoId,\n playerVars: {\n // 'rel': 0,\n enablejsapi: 1,\n // // 'modestbranding': 1,\n html5: 1,\n fmt: 1,\n showinfo: 0\n // 'iv_load_policy': 3,\n // 'origin': location.origin.toString(),\n // 'autoplay': autoplay ? 1 : 0,\n // 'controls': loop ? 0 : 1,\n // 'loop': loop ? 1 : 0,\n // 'playlist': videoId,\n // 'mute': loop ? 1 : 0\n },\n\n events: callbacks\n });\n };\n service.getVimeoPlayerAPI = function (elId, videoId, autoplay, loop) {\n return new Vimeo.Player(elId, {\n id: videoId,\n autoplay: autoplay != null ? autoplay : false,\n muted: autoplay != null ? autoplay : false,\n loop: loop === true\n });\n };\n service.run = function (obj, type) {\n if (activeItem != null && activeItem.obj !== obj && activeItem.obj.player != null) {\n if (activeItem.type === 'youtube') {\n activeItem.obj.player.pauseVideo();\n } else if (activeItem.type === 'vimeo') {\n activeItem.obj.player.pause();\n }\n }\n activeItem = {\n obj: obj,\n type: type\n };\n };\n service.checkUrlFromIframe = function (url) {\n return url.match(regExpIframe);\n };\n service.getSrc = function (url) {\n if (service.checkUrlFromIframe(url)) {\n return url.match(regExpGetUrlFromSrc)[0].match(urlRegex)[0];\n }\n return url;\n };\n service.isPlayerCode = function (url) {\n return url.match(urlRegex) == null;\n };\n service.getYouTubeCode = function (link, autoplay, videoId, loop) {\n link = link.indexOf('https://') === -1 ? 'https://' + link : link;\n link = link.indexOf('www') === -1 ? 'https://www.' + link.split('https://')[1] : link;\n return link.replace('youtu.be', 'youtube.com/embed/').replace('watch?v=', 'embed/').replace('shorts', 'embed').split('&')[0] + '?rel=0&enablejsapi=1&showinfo=0' + (autoplay || loop ? '&autoplay=1&mute=1&' : '') + (loop ? 'loop=1&controls=0&wmode=transparent&playlist=' + videoId + '' : '');\n };\n service.getVimeoCode = function (link, autoplay, loop) {\n return 'https://player.vimeo.com/video' + link.split('vimeo.com')[link.split('vimeo.com').length - 1] + '?title=0&byline=0&portrait=0' + (autoplay ? '&autoplay=1&muted=1' : '') + (loop ? '&loop=1' : '');\n };\n service.getYTCover = function (YTVideoId) {\n return 'https://i.ytimg.com/vi/' + YTVideoId + '/maxresdefault.jpg';\n };\n service.getVimeoCover = function (vimeoId) {\n return $http.get('https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/' + vimeoId, {\n format: 'json',\n width: '1280'\n }).then(function (response) {\n return response;\n }).catch(function (error) {\n console.error(error);\n });\n };\n}\niframeResponsiveService.$inject = ['$q', '$window', '$http'];","import iframeResponsiveInModalTemplate from './iframeResponsiveInModal.html';\nimport iframeResponsivePlayerCodeTemplate from './iframeResponsivePlayerCode.html';\nimport iframeResponsiveUploadTemplate from './iframeResponsiveUpload.html';\nimport iframeResponsiveUploadModalTemplate from './iframeResponsiveUploadModal.html';\nimport iframeResponsiveVideoTemplate from './iframeResponsiveVideo.html';\nimport iframeResponsiveVideoBackgroundTemplate from './iframeResponsiveVideoBackground.html';\nexport { iframeResponsiveInModalTemplate, iframeResponsivePlayerCodeTemplate, iframeResponsiveUploadTemplate, iframeResponsiveUploadModalTemplate, iframeResponsiveVideoTemplate, iframeResponsiveVideoBackgroundTemplate };","const lozadAdvConstants = {\n rootMargin: '0px',\n threshold: 0,\n afterWindowLoaded: true,\n load: function load(element) {\n if (element.dataset.src) {\n element.src = element.dataset.src;\n }\n if (element.dataset.srcset) {\n element.srcset = element.dataset.srcset;\n }\n if (element.dataset.backgroundImage) {\n element.style.backgroundImage = 'url(' + element.dataset.backgroundImage + ')';\n }\n }\n};\nexport default lozadAdvConstants;","LozadAdvCtrl.$inject = [\"$window\", \"$scope\", \"$element\", \"$parse\", \"$attrs\", \"$document\", \"lozadAdvDefault\"];\nimport debounceFn from 'debounce-fn';\n\n/*@ngInject*/\nexport default function LozadAdvCtrl($window, $scope, $element, $parse, $attrs, $document, lozadAdvDefault) {\n const ctrl = this;\n let observer = void 0,\n elementNative,\n options,\n lozadAdv,\n eventReinit;\n ctrl.$postLink = function () {\n elementNative = $element[0];\n options = angular.extend({}, lozadAdvDefault, $parse($attrs.lozadAdvOptions)($scope));\n lozadAdv = $parse($attrs.lozadAdv);\n eventReinit = $parse($attrs.lozadAdvEventReinit)($scope);\n if (options.afterWindowLoaded === true && $document[0].readyState !== 'complete') {\n $window.addEventListener('load', ctrl.loadFn);\n } else {\n ctrl.lozad(elementNative);\n }\n };\n ctrl.onIntersection = function onIntersection(load) {\n return function (entries, observer) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting || ctrl.isElementInViewport(entry.target, entry)) {\n debounceFn(ctrl.scroll.bind(ctrl, entry, observer, load), {\n wait: 500\n })();\n }\n });\n };\n };\n ctrl.scroll = function (entry, observer, load) {\n if (ctrl.isElementInViewport(entry.target, entry) === true) {\n observer.unobserve(entry.target);\n load(entry.target);\n lozadAdv($scope);\n $scope.$digest();\n }\n };\n ctrl.isElementInViewport = function isElementInViewport(el, entry) {\n var rect = entry.boundingClientRect;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n // http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap\n var vertInView = rect.top <= windowHeight && rect.top + rect.height >= 0;\n return vertInView;\n };\n ctrl.lozad = function lozad(element) {\n if ($window.IntersectionObserver) {\n observer = new IntersectionObserver(ctrl.onIntersection(options.load), options);\n }\n if (observer) {\n observer.observe(element);\n }\n if (eventReinit != null) {\n $scope.$on(eventReinit, function () {\n ctrl.reinit();\n });\n }\n };\n ctrl.loadFn = function loadFn() {\n $window.removeEventListener('load', ctrl.loadFn);\n ctrl.lozad(elementNative);\n };\n ctrl.reinit = function reinit() {\n if (observer) {\n observer.unobserve(elementNative);\n }\n ctrl.lozad(elementNative);\n };\n}","export default function lozadAdv() {\n return {\n controller: 'LozadAdvCtrl',\n bindToController: true,\n controllerAs: 'lozadAdv',\n scope: true\n };\n}","import LozadAdvCtrl from './lozadAdv.ctrl.js';\nimport lozadAdvConstants from './lozadAdv.constants.js';\nimport LozadAdv from './lozadAdv.directive.js';\nconst moduleName = \"lozadAdv\";\nangular.module(moduleName, []).constant(\"lozadAdvDefault\", lozadAdvConstants).controller(\"LozadAdvCtrl\", LozadAdvCtrl).directive(\"lozadAdv\", LozadAdv);\nexport default moduleName;","RatingCtrl.$inject = [\"$http\", \"$q\"];\n/* @ngInject */\nfunction RatingCtrl($http, $q) {\n var ctrl = this;\n ctrl.items = [];\n ctrl.select = function (val) {\n if (ctrl.readonly === false) {\n ctrl.current = val;\n for (var i = 0; i < val; i++) {\n ctrl.items[i].isSelected = true;\n }\n if (ctrl.url) {\n return $http.post(ctrl.url, {\n objId: ctrl.objId,\n rating: ctrl.current\n }).then(function (response) {\n return ctrl.current = response.data;\n });\n } else {\n return $q.resolve(ctrl.current);\n }\n }\n };\n}\n;\nexport default RatingCtrl;","function ratingDirective() {\n return {\n require: ['rating', '?ngModel'],\n restrict: 'A',\n scope: true,\n controller: 'RatingCtrl',\n controllerAs: 'rating',\n bindToController: true,\n link: function (scope, element, attrs, ctrls) {\n const rating = ctrls[0];\n const ngModel = ctrls[1];\n const childs = element[0].children;\n rating.max = parseInt(attrs.max) || 5;\n rating.readonly = attrs.readonly != null ? attrs.readonly === 'true' : false;\n if (rating.readonly) {\n element[0].classList.add(\"rating-readonly\");\n }\n rating.current = parseInt(attrs.current);\n rating.url = attrs.url;\n rating.objId = attrs.objId;\n rating.rateBinding = attrs.rateBinding;\n for (var i = 0; i <= childs.length - 1; i++) {\n childs[i].setAttribute(\"data-index\", childs.length - i);\n rating.items[i] = {\n isSelected: rating.current - 1 < i\n };\n }\n if (ngModel != null) {\n if (isNaN(ngModel.$modelValue) && isNaN(rating.current) === false && rating.current > 0) {\n ngModel.$setViewValue(rating.current);\n }\n ngModel.$render = () => {\n if (isNaN(ngModel.$modelValue) === false) {\n rating.current = ngModel.$modelValue;\n }\n };\n }\n if (rating.readonly === false) {\n element[0].addEventListener('click', function (event) {\n const item = event.target.closest('.rating-item');\n if (item != null) {\n if (ngModel != null) {\n ngModel.$setViewValue(parseInt(item.getAttribute('data-index')));\n }\n const promise = rating.select(parseInt(item.getAttribute('data-index')));\n if (promise) {\n promise.then(() => {\n element[0].classList.add(\"rating-readonly\");\n });\n } else {\n scope.$apply();\n }\n }\n });\n }\n }\n };\n}\nexport { ratingDirective };","import './styles/rating.scss';\nimport { ratingDirective } from './directives/ratingDirectives.js';\nimport RatingCtrl from './controllers/ratingController.js';\nconst moduleName = 'rating';\nangular.module(moduleName, []).controller('RatingCtrl', RatingCtrl).directive('rating', ratingDirective);\nexport default moduleName;",";\n(function (ng) {\n 'use strict';\n\n var SpinboxCtrl = /* @ngInject */function ($element, $timeout, spinboxKeyCodeAllow, spinboxTooltipTextType, $translate) {\n var ctrl = this,\n timeoutTooltip = null,\n TOOLTIP_TIMER = 3000,\n callbackTimerId;\n\n //ctrl.min = ctrl.min() || 0;\n //ctrl.max = ctrl.max() || Number.POSITIVE_INFINITY;\n //ctrl.step = ctrl.step() || 1;\n\n var callbackCall = function (value) {\n if (callbackTimerId != null) {\n $timeout.cancel(callbackTimerId);\n }\n callbackTimerId = $timeout(function () {\n // && ctrl.form.$valid\n if (ctrl.updateFn != null) {\n ctrl.updateFn({\n value: value,\n proxy: ctrl.proxy\n });\n }\n }, 700);\n };\n ctrl.$onInit = function () {\n ctrl.max = ctrl.getNearValue(ctrl.max);\n ctrl.min = ctrl.getNearValue(ctrl.min);\n ctrl.checkButtons(ctrl.value);\n ctrl.tooltipText = null;\n };\n ctrl.less = function () {\n var newValue = ctrl.value - ctrl.step;\n newValue = ctrl.checkRange(newValue) === true ? newValue : ctrl.min != null ? ctrl.min : newValue;\n ctrl.value = ctrl.numberRound(newValue);\n ctrl.checkButtons(ctrl.value);\n callbackCall(ctrl.value);\n };\n ctrl.more = function () {\n var newValue = ctrl.value + ctrl.step;\n\n // if(isNaN(newValue)) {\n // newValue = ctrl.min != null ? ctrl.min : 1;\n // } else {\n newValue = ctrl.checkRange(newValue) === true ? newValue : ctrl.max != null ? ctrl.max : newValue;\n // }\n\n ctrl.value = ctrl.numberRound(newValue);\n ctrl.checkButtons(ctrl.value);\n callbackCall(ctrl.value);\n };\n ctrl.checkRange = function (newValue) {\n return newValue <= ctrl.max && newValue >= ctrl.min;\n };\n ctrl.checkRegex = function (char) {\n return /\\d/g.test(char);\n };\n ctrl.keydown = function (event) {\n var symbol;\n if (event.altKey || event.ctrlKey || event.shiftKey) {\n event.preventDefault();\n return;\n }\n var code = ctrl.prepareNumpad(event.keyCode);\n if (!ctrl.isExistKeyCodeAllow(code)) {\n symbol = Number(String.fromCharCode(code));\n if (isNaN(symbol) === true) {\n event.preventDefault();\n }\n } else {\n switch (code) {\n case 40:\n // down arrow\n ctrl.less();\n event.preventDefault();\n break;\n case 38:\n // up arrow\n ctrl.more();\n event.preventDefault();\n break;\n }\n }\n };\n ctrl.keyup = function (event) {\n var code = ctrl.prepareNumpad(event.keyCode),\n symbol = Number(String.fromCharCode(code));\n // ctrl.value = parseFloat($element[0].querySelector('.spinbox-input').value);\n //update if number \n\n // callbackCall(ctrl.value);\n // if (isNaN(symbol) === false) {\n // \n // \n // // if(ctrl.form.$valid){\n // // callbackCall(ctrl.value);\n // // }\n // } else if ([8, 49, 110, 188].indexOf(event.keyCode) !== -1 && ctrl.value > 0) {\n // //'backspace': 8,\n // //'delete': 46,\n // //'decimalPoint': 110,\n // //'comma': 188,\n // callbackCall(ctrl.value);\n // }\n };\n\n ctrl.prepareNumpad = function (keycode) {\n return keycode > 95 && keycode < 106 ? keycode - 48 : keycode;\n };\n ctrl.isExistKeyCodeAllow = function (keycode) {\n var result = false;\n for (var key in spinboxKeyCodeAllow) {\n if (spinboxKeyCodeAllow[key] == keycode) {\n result = true;\n break;\n }\n }\n return result;\n };\n ctrl.checkButtons = function (newValue) {\n ctrl.lessBtnDisabled = newValue === ctrl.min;\n ctrl.moreBtnDisabled = newValue === ctrl.max;\n };\n ctrl.valueFoldStep = function () {\n // if(ctrl.value == null || isNaN(ctrl.value)) return\n const value = parseFloat($element[0].querySelector('.spinbox-input').value);\n if (value > ctrl.max) {\n ctrl.value = ctrl.max;\n ctrl.tooltipText = ctrl.getTooltipText(spinboxTooltipTextType.max);\n } else if (isNaN(value) || value < ctrl.min) {\n ctrl.value = ctrl.min;\n ctrl.tooltipText = ctrl.getTooltipText(spinboxTooltipTextType.min);\n } else {\n ctrl.value = value;\n }\n var whole, newValue;\n if (!ctrl.isShareWhole(ctrl.value, ctrl.step) || ctrl.value === 0) {\n whole = ctrl.value - ctrl.getRemainder(ctrl.value, ctrl.step);\n newValue = whole + ctrl.step;\n newValue = ctrl.checkRange(newValue) === true ? newValue : ctrl.max != null ? ctrl.max : newValue;\n ctrl.value = ctrl.numberRound(newValue);\n ctrl.checkButtons(ctrl.value);\n ctrl.tooltipText = ctrl.getTooltipText(spinboxTooltipTextType.multiplicity);\n }\n if (ctrl.tooltipText != null) {\n if (timeoutTooltip) {\n ctrl.hideTooltip();\n $timeout.cancel(timeoutTooltip);\n }\n ctrl.showTooltip();\n timeoutTooltip = $timeout(() => {\n ctrl.tooltipText = null;\n }, TOOLTIP_TIMER);\n }\n callbackCall(ctrl.value);\n };\n ctrl.getLengthAfterSemicolon = value => {\n var _value$toString$split;\n return ((_value$toString$split = value.toString().split(\".\")[1]) !== null && _value$toString$split !== void 0 ? _value$toString$split : \"\").length;\n };\n ctrl.numberRound = function (newValue) {\n //http://0.30000000000000004.com/\n //http://stackoverflow.com/questions/588004/is-floating-point-math-broken/588014#588014\n return parseFloat(newValue.toPrecision(12));\n };\n ctrl.getRemainder = (num1, num2) => {\n return ctrl.numberRound(num1 % num2);\n };\n ctrl.isShareWhole = (num1, num2) => {\n const maxLengthAfterSemicolon = Math.max(ctrl.getLengthAfterSemicolon(num1), ctrl.getLengthAfterSemicolon(num2));\n const multiple = Math.pow(10, maxLengthAfterSemicolon || 1);\n const _num1 = multiple * num1;\n const _num2 = multiple * num2;\n const remainder = ctrl.getRemainder(_num1, _num2);\n if (remainder == 0) return true;\n return false;\n };\n ctrl.getNearestLessMultiple = function (number, multiple) {\n return Math.floor(number / multiple) * multiple;\n };\n ctrl.getNearestMoreMultiple = function (number, multiple) {\n return Math.ceil(number / multiple) * multiple;\n };\n ctrl.getNearValue = function (value) {\n if (value >= ctrl.max) {\n return ctrl.isShareWhole(ctrl.max, ctrl.step) ? ctrl.max : ctrl.numberRound(ctrl.getNearestLessMultiple(ctrl.max, ctrl.step));\n } else if (ctrl.min >= value) {\n return ctrl.isShareWhole(ctrl.min, ctrl.step) ? ctrl.min : ctrl.numberRound(ctrl.getNearestMoreMultiple(ctrl.min, ctrl.step));\n }\n return value;\n };\n ctrl.showTooltip = function () {\n ctrl.isOpenTooltip = true;\n };\n ctrl.hideTooltip = function () {\n ctrl.isOpenTooltip = false;\n };\n ctrl.getTooltipText = function (type) {\n if (type === spinboxTooltipTextType.min) {\n return \"\".concat($translate.instant('Js.Spinbox.MinTextNote'), \" \").concat(ctrl.min);\n }\n if (type === spinboxTooltipTextType.max) {\n return \"\".concat($translate.instant('Js.Spinbox.MaxTextNote'), \" \").concat(ctrl.max);\n }\n if (type === spinboxTooltipTextType.multiplicity) {\n return \"\".concat($translate.instant('Js.Spinbox.MultiplicityTextNote'), \" \").concat(ctrl.step);\n }\n };\n };\n SpinboxCtrl.$inject = [\"$element\", \"$timeout\", \"spinboxKeyCodeAllow\", \"spinboxTooltipTextType\", \"$translate\"];\n angular.module('spinbox').controller('SpinboxCtrl', SpinboxCtrl);\n})(window.angular);","import spinboxTemplate from '../templates/spinbox.html';\n;\n(function (ng) {\n 'use strict';\n\n angular.module('spinbox').directive('spinbox', ['$filter', function ($filter) {\n return {\n restrict: 'A',\n scope: {\n value: '=',\n proxy: '=?',\n min: ' 0) {\n ctrl.headerTab = panes[tabId].headerTab;\n }\n if (tabObj != null && tabObj.pane != null && tabObj.pane.selected === false) {\n ctrl.change(tabObj.pane, true);\n }\n }\n };\n ctrl.select = function (tabHeader) {\n var keys = Object.keys(panes);\n if (ctrl.tabsOnSelect != null) {\n ctrl.tabsOnSelect($scope, {\n tabHeader: tabHeader\n });\n }\n if (ctrl.isToggle === false) {\n for (var i = 0, len = keys.length; i < len; i++) {\n panes[keys[i]].selected = false;\n }\n tabHeader.selected = true;\n tabSelected = tabHeader;\n } else {\n tabHeader.selected = !tabHeader.selected;\n tabSelected = tabHeader.selected === false ? null : tabHeader;\n }\n };\n ctrl.addHeader = function (tabHeader) {\n var defer = $q.defer(),\n searchTabId = tabsService.getTabIdFromUrl();\n panes[tabHeader.id] = tabHeader;\n if (queueHeader[tabHeader.id] != null) {\n queueHeader[tabHeader.id].resolve(tabHeader);\n queueHeader[tabHeader.id].promise.then(function () {\n tabHeader.isRender = tabContent.isRender;\n if (tabHeader.isRender === true && (tabHeader.id == searchTabId || tabSelected == null)) {\n ctrl.select(tabHeader);\n } else {\n tabHeader.selected = false;\n }\n });\n } else {\n if (tabHeader.content == null) {\n queueContent[tabHeader.id] = defer;\n } else {\n defer.resolve(header);\n }\n defer.promise.then(function (tabContent) {\n tabHeader.content = tabContent;\n tabHeader.isRender = tabContent.isRender;\n if (tabHeader.isRender === true && (tabHeader.id == searchTabId || tabSelected == null)) {\n ctrl.select(tabHeader);\n } else {\n tabHeader.selected = false;\n }\n return tabContent;\n });\n }\n };\n ctrl.addContent = function (tabContent) {\n var header = panes[tabContent.headerId],\n defer = $q.defer();\n\n //если заголовок ещё не проинициализовался\n if (header == null) {\n queueHeader[tabContent.headerId] = defer;\n } else {\n defer.resolve(header);\n }\n defer.promise.then(function (header) {\n tabContent.header = header;\n return header;\n });\n\n //проверяем если обещания на получения контента\n if (queueContent[tabContent.headerId] != null) {\n queueContent[tabContent.headerId].resolve(tabContent);\n }\n };\n ctrl.change = function (tabHeader, ignoreUrl) {\n if (ctrl.allowHideAll === true && tabHeader.selected === true) {\n tabHeader.selected = false;\n } else {\n ctrl.select(tabHeader);\n if (tabHeader.headerTab != null && tabHeader.headerTab.length > 0) {\n ctrl.headerTab = tabHeader.headerTab;\n }\n if (angular.isDefined(tabHeader.id) && !ignoreUrl) {\n tabsService.changeUrl(tabHeader.id);\n }\n }\n };\n}\n;\nexport default TabsCtrl;","tabsGotoDirective.$inject = [\"$window\", \"tabsService\"];\ntabsDirective.$inject = [\"tabsService\", \"$parse\", \"urlHelper\"];\n/* @ngInject */\nfunction tabsDirective(tabsService, $parse, urlHelper) {\n return {\n restrict: 'A',\n scope: true,\n controller: 'TabsCtrl',\n controllerAs: 'tabs',\n bindToController: true,\n compile: function (cElement, cAttrs) {\n var onSelect;\n if (cAttrs.type == null) {\n cAttrs.$set('type', 'horizontal');\n }\n if (cAttrs.classesTabActive == null) {\n cAttrs.$set('classesTabActive', 'tabs-header-active cs-br-1');\n }\n if (cAttrs.classesLinkActive == null) {\n cAttrs.$set('classesLinkActive', 'cs-l-2 link-dotted-invert link-dotted-none');\n }\n if (cAttrs.classesLink == null) {\n cAttrs.$set('classesLink', 'link-dotted-invert');\n }\n if (cAttrs.tabsOnSelect) {\n onSelect = $parse(cAttrs.tabsOnSelect);\n }\n return function (scope, element, attrs, ctrl) {\n ctrl.tabsOnSelect = onSelect;\n ctrl.type = attrs.type;\n ctrl.classesTabActive = attrs.classesTabActive;\n ctrl.classesTab = attrs.classesTab;\n ctrl.classesLinkActive = attrs.classesLinkActive;\n ctrl.classesLink = attrs.classesLink;\n ctrl.allowHideAll = attrs.allowHideAll != null && attrs.allowHideAll === 'true' ? true : false;\n ctrl.isToggle = attrs.isToggle != null && attrs.isToggle === 'true' ? true : false;\n tabsService.addInStorage(ctrl, attrs.id);\n element.on('$destroy', function () {\n urlHelper.setLocationQueryParams('tab', null);\n });\n };\n }\n };\n}\n;\nfunction tabHeaderDirective() {\n return {\n require: ['tabHeader', '^tabs'],\n restrict: 'A',\n scope: true,\n controller: 'TabHeaderCtrl',\n controllerAs: 'tabHeader',\n bindToController: true,\n link: function (scope, element, attrs, ctrls) {\n ctrls[0].id = attrs.id;\n ctrls[1].addHeader(ctrls[0]);\n ctrls[0].headerTab = attrs.tabHeader;\n }\n };\n}\n;\nfunction tabContentDirective() {\n return {\n require: ['tabContent', '^tabs'],\n restrict: 'A',\n scope: true,\n controller: 'TabContentCtrl',\n controllerAs: 'tabContent',\n bindToController: true,\n link: function (scope, element, attrs, ctrls) {\n ctrls[0].isRender = element.html().replace(//gi, '').trim().length > 0;\n ctrls[0].headerId = attrs.tabContent;\n ctrls[1].addContent(ctrls[0]);\n }\n };\n}\n;\n/* @ngInject */\nfunction tabsGotoDirective($window, tabsService) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs, ctrl) {\n element.on('click', function (event) {\n event.stopPropagation();\n event.preventDefault();\n var tab = document.getElementById(attrs.tabsGoto);\n if (tab != null) {\n tabsService.change(attrs.tabsGoto);\n tab.scrollIntoView();\n scope.$apply();\n }\n });\n }\n };\n}\n;\nexport { tabsDirective, tabHeaderDirective, tabContentDirective, tabsGotoDirective };","tabsService.$inject = [\"$location\"];\n/* @ngInject */\nfunction tabsService($location) {\n var service = this,\n countInStorage = -1,\n storage = {},\n hashStart = \"tab=\";\n service.addInStorage = function (tabs, id) {\n storage[id || (countInStorage += +1)] = tabs;\n };\n service.change = function (id) {\n var data = service.findTabByid(id);\n if (data != null) {\n data.tabs.change(data.pane);\n }\n };\n service.findTabByid = function (id) {\n var tabs, pane;\n for (var key in storage) {\n if (pane != null) {\n break;\n }\n tabs = storage[key];\n if (storage.hasOwnProperty(key)) {\n pane = tabs.panes[id];\n break;\n }\n }\n return pane != null ? {\n tabs: tabs,\n pane: pane\n } : null;\n };\n service.getTabIdFromUrl = function () {\n return $location.hash().replace(hashStart, '');\n };\n service.changeUrl = function (tabId) {\n $location.hash(hashStart + tabId);\n };\n}\n;\nexport default tabsService;","import './styles/tabs.scss';\nimport tabsService from './services/tabsService.js';\nimport { tabsDirective, tabHeaderDirective, tabContentDirective, tabsGotoDirective } from './directives/tabsDirectives.js';\nimport TabsCtrl from './controllers/tabsController.js';\nimport TabHeaderCtrl from './controllers/tabHeaderController.js';\nimport TabContentCtrl from './controllers/tabContentController.js';\nconst moduleName = 'tabs';\nangular.module('tabs', []).service('tabsService', tabsService).controller('TabsCtrl', TabsCtrl).controller('TabHeaderCtrl', TabHeaderCtrl).controller('TabContentCtrl', TabContentCtrl).directive('tabs', tabsDirective).directive('tabHeader', tabHeaderDirective).directive('tabContent', tabContentDirective).directive('tabsGoto', tabsGotoDirective);\nexport default moduleName;",";\n(function (ng) {\n 'use strict';\n\n //TODO: вынести работу с DOMом\n var isTouchDevice = ('ontouchstart' in document.documentElement);\n var TransformerCtrl = function ($window, $element, $scope, transformerService, $attrs, $document) {\n var ctrl = this,\n container,\n containerStartRect,\n elBoxIndents,\n elWrapBoxIndents,\n containerElementBoxIndents,\n elementStartRect,\n mutableItems = [],\n currentDirectionVerticalScroll = null,\n directionVerticalScroll = null,\n pageYOffsetPrev = 0;\n ctrl._element = $element;\n ctrl.styles = {};\n ctrl.isTouchDevice = isTouchDevice;\n ctrl.init = function (containerElement) {\n transformerService.addInStorage(ctrl);\n ctrl.addContainer(containerElement);\n ctrl.calc();\n if (ctrl.onInit != null) {\n ctrl.onInit($scope, {\n transformer: ctrl\n });\n }\n };\n ctrl.addContainer = function (containerElement) {\n var temp, tempEl;\n container = containerElement;\n temp = container.getBoundingClientRect();\n tempEl = $element[0].getBoundingClientRect();\n elBoxIndents = {\n paddingLeft: parseFloat($($element[0]).css('padding-left')),\n paddingRight: parseFloat($($element[0]).css('padding-right')),\n paddingTop: parseFloat($($element[0]).css('padding-top')),\n paddingBottom: parseFloat($($element[0]).css('padding-bottom')),\n marginLeft: parseFloat($($element[0]).css('margin-left')),\n marginRight: parseFloat($($element[0]).css('margin-right')),\n marginTop: parseFloat($($element[0]).css('margin-Top')),\n marginBottom: parseFloat($($element[0]).css('margin-bottom'))\n };\n elWrapBoxIndents = {\n paddingLeft: parseFloat($element.parent().css('padding-left')),\n marginLeft: parseFloat($element.parent().css('margin-left')),\n paddingTop: parseFloat($element.parent().css('padding-top')),\n paddingBottom: parseFloat($element.parent().css('padding-bottom')),\n marginBottom: parseFloat($element.parent().css('margin-bottom'))\n };\n containerElementBoxIndents = {\n paddingLeft: parseFloat($(containerElement).css('padding-left')),\n marginLeft: parseFloat($(containerElement).css('margin-left')),\n paddingTop: parseFloat($(containerElement).css('padding-top')),\n paddingBottom: parseFloat($(containerElement).css('padding-bottom')),\n marginBottom: parseFloat($(containerElement).css('margin-bottom'))\n };\n elementStartRect = {\n top: tempEl.top,\n topWithScroll: tempEl.top + $window.pageYOffset,\n //используется в scrooltoblock.service.js\n bottom: tempEl.bottom,\n bottomWithScroll: tempEl.bottom + $window.pageYOffset,\n //используется в scrooltoblock.service.js\n height: tempEl.height\n };\n containerStartRect = {\n top: temp.top + $window.pageYOffset,\n bottom: temp.bottom + $window.pageYOffset,\n right: temp.right + $window.pageXOffset,\n left: temp.left + $window.pageXOffset\n };\n ctrl._elementStartRect = elementStartRect;\n };\n ctrl.resetClassesElement = function ($element) {\n $element[0].classList.remove('transformer-scroll-over');\n $element[0].classList.remove('transformer-scroll-over--top');\n $element[0].classList.remove('transformer-scroll-over--bottom');\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.remove('transformer-scroll-over--bottom');\n $element[0].style.bottom = 'auto';\n $element[0].style.top = 'auto';\n };\n ctrl.calc = function () {\n var freezeNew,\n containerComputedStyle = $window.getComputedStyle(container),\n containerRect = container.getBoundingClientRect(),\n elementRect = $element[0].getBoundingClientRect(),\n offsetByParents = transformerService.getOffsetByParents(ctrl),\n scrollOverNew = $window.pageYOffset + ctrl.offsetTop + offsetByParents > containerStartRect[ctrl.stickyPosition];\n var containerPaddingLeft = parseFloat(containerComputedStyle['padding-left']);\n var containerPaddingRight = parseFloat(containerComputedStyle['padding-right']);\n ctrl.styles.width = containerRect.width - containerPaddingLeft - containerPaddingRight;\n currentDirectionVerticalScroll = $window.pageYOffset >= pageYOffsetPrev ? 'bottom' : 'top';\n var scrollSize = $window.pageYOffset - pageYOffsetPrev;\n var isHaveScroll = document.documentElement.scrollWidth > document.documentElement.clientWidth;\n if (ctrl.limitVisibleScroll === true) {\n if ($window.pageYOffset < 0) {\n //когда в Safari overscroll top\n return;\n }\n if (elementRect.height + ctrl.offsetTop > $window.innerHeight) {\n /*Если в Safari есть overscroll bottom*/\n $element[0].classList.remove('transformer-sticky');\n var scrollHeight = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight);\n if ($window.pageYOffset > scrollHeight - window.innerHeight + ctrl.scrollWidth) {\n $element[0].classList.remove('transformer-scroll-over');\n $element[0].classList.add('transformer-freeze');\n $element[0].style.top = elementRect.top + $window.pageYOffset - elementStartRect.topWithScroll + 'px';\n $element[0].style.bottom = 'auto';\n $element[0].style.transform = 'translate3d(0px, 0px, 0)';\n return;\n }\n if (ctrl.isResetClasses) {\n ctrl.resetClassesElement($element);\n }\n if (directionVerticalScroll == null) {\n //когда первая загрузка идет со скроллом\n if (elementRect.bottom + $window.pageYOffset + (isHaveScroll ? ctrl.scrollWidth : 0) < $window.innerHeight + $window.pageYOffset) {\n // может быть 0 если переходить из тача в desktop и считаваться неправильно\n\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].style.top = 'auto';\n $element[0].style.bottom = 0 - elBoxIndents.marginBottom + 'px';\n } else if (elementRect.top - ctrl.offsetTop - elementStartRect.topWithScroll + $window.pageYOffset > $window.pageYOffset) {\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].style.bottom = 'auto';\n $element[0].style.top = 0 + 'px';\n }\n } else {\n if (currentDirectionVerticalScroll !== directionVerticalScroll) {\n $element[0].classList.remove('transformer-scroll-over');\n $element[0].classList.add('transformer-freeze');\n $element[0].style.top = elementRect.top + $window.pageYOffset - elementStartRect.topWithScroll + 'px';\n $element[0].style.bottom = 'auto';\n if (elementRect.bottom + $window.pageYOffset + (isHaveScroll ? ctrl.scrollWidth : 0) + Math.abs(scrollSize) < $window.innerHeight + $window.pageYOffset) {\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].style.top = 'auto';\n $element[0].style.bottom = 0 - elBoxIndents.marginBottom + 'px';\n } else if (currentDirectionVerticalScroll === 'top' && elementStartRect.topWithScroll >= elementRect.top + $window.pageYOffset) {\n ctrl.resetClassesElement($element);\n return;\n } else if (elementRect.top - ctrl.offsetTop + $window.pageYOffset - Math.abs(scrollSize) > $window.pageYOffset) {\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].style.bottom = 'auto';\n $element[0].style.top = 0 + ctrl.offsetTop + 'px';\n }\n } else {\n if (elementRect.bottom + $window.pageYOffset + (isHaveScroll ? ctrl.scrollWidth : 0) < $window.innerHeight + $window.pageYOffset) {\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].style.top = 'auto';\n $element[0].style.bottom = 0 - elBoxIndents.marginBottom + 'px';\n } else if (currentDirectionVerticalScroll === 'top' && elementStartRect.topWithScroll >= elementRect.top + $window.pageYOffset) {\n ctrl.resetClassesElement($element);\n return;\n } else if (elementRect.top - (currentDirectionVerticalScroll === 'bottom' ? elementStartRect.topWithScroll : ctrl.offsetTop) + $window.pageYOffset > $window.pageYOffset) {\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].style.bottom = 'auto';\n $element[0].style.top = 0 + ctrl.offsetTop + 'px';\n }\n }\n }\n ctrl.isResetClasses = false;\n pageYOffsetPrev = $window.pageYOffset;\n directionVerticalScroll = currentDirectionVerticalScroll;\n } else {\n $element[0].classList.remove('transformer-freeze');\n $element[0].classList.remove('transformer-scroll-over--bottom');\n $element[0].style.bottom = 'auto';\n $element[0].classList.add('transformer-sticky');\n $element[0].style.top = ctrl.offsetTop + elBoxIndents.marginTop + elWrapBoxIndents.paddingTop + 'px';\n $element[0].style[ctrl.stickyHorizontalPosition] = 0;\n ctrl.isResetClasses = true;\n }\n\n /*установление translate3d при горизонтальном скролле*/\n if ($element[0].classList.contains('transformer-scroll-over')) {\n $element[0].style.transform = 'translate3d(' + ($window.pageXOffset <= 0 ? Math.abs($window.pageXOffset) : -$window.pageXOffset) + 'px, 0px, 0)';\n } else {\n $element[0].style.transform = 'translate3d(0px, 0px, 0)';\n }\n } else {\n if (ctrl.limitPos === true) {\n if (scrollOverNew === false) {\n //default state\n freezeNew = false;\n ctrl.styles.transform = 'translate3d(0, 0, 0)';\n ctrl.styles[ctrl.stickyPosition] = 'auto';\n ctrl.expandMutableItems();\n } else {\n if (containerRect.height + containerStartRect.top <= elementRect.height + window.pageYOffset + ctrl.offsetTop + offsetByParents) {\n //bottom sticky\n freezeNew = true;\n ctrl.styles.transform = 'translate3d(0, ' + (containerRect.height - elementRect.height) + 'px, 0)';\n ctrl.styles[ctrl.stickyPosition] = 'auto';\n } else {\n //fixed\n freezeNew = false;\n ctrl.styles.transform = 'translate3d(0, 0, 0)';\n ctrl.styles[ctrl.stickyPosition] = ctrl.offsetTop + offsetByParents + (ctrl.stickyPosition === 'top' ? elWrapBoxIndents.paddingTop : elWrapBoxIndents.paddingBottom) + 'px';\n var indentContainer = containerElementBoxIndents.paddingLeft + containerElementBoxIndents.marginLeft;\n ctrl.styles.left = containerRect.left + indentContainer;\n if (elementRect.height + ctrl.offsetTop > $window.innerHeight) {\n ctrl.collapseMutableItems(elementRect.height + containerStartRect.top - $window.innerHeight);\n } else if (ctrl.offsetTop + elementStartRect.height < $window.innerHeight) {\n ctrl.expandMutableItems();\n }\n }\n }\n } else {\n ctrl.styles[ctrl.stickyPosition] = offsetByParents || 0;\n }\n if (freezeNew === true) {\n ctrl.scrollOver = false;\n } else {\n ctrl.scrollOver = scrollOverNew;\n }\n ctrl.freeze = freezeNew;\n if (ctrl.scrollOver === true) {\n $element[0].classList.remove('transformer-scroll-default');\n $element[0].classList.add('transformer-scroll-over');\n $element[0].classList.add('transformer-scroll-over--' + ctrl.stickyPosition);\n } else if (ctrl.scrollOver === false) {\n $element[0].classList.remove('transformer-scroll-over');\n $element[0].classList.add('transformer-scroll-default');\n ctrl.styles.backgroundColor = null;\n ctrl.styles[ctrl.stickyPosition] = 'auto';\n }\n if (ctrl.freeze) {\n $element[0].classList.add('transformer-freeze');\n } else {\n $element[0].classList.remove('transformer-freeze');\n }\n $element.css(ctrl.styles);\n }\n };\n ctrl.windowScroll = function () {\n if (ctrl.initialize !== true) {\n ctrl.wait === true;\n return;\n }\n ctrl.calc();\n $scope.$digest();\n };\n ctrl.addMutableItem = function (element) {\n mutableItems.push({\n el: element,\n height: element.offsetHeight\n });\n };\n ctrl.collapseMutableItems = function (dim) {\n var sumMutable = 0;\n for (var i = 0, len = mutableItems.length; i < len; i++) {\n if (sumMutable < dim) {\n sumMutable += mutableItems[i].height;\n mutableItems[i].el.classList.add('transformer-hidden');\n } else {\n break;\n }\n }\n };\n ctrl.expandMutableItems = function () {\n for (var i = 0, len = mutableItems.length; i < len; i++) {\n mutableItems[i].el.classList.remove('transformer-hidden');\n }\n };\n ctrl.getBottomPoint = function () {\n return ctrl.offsetTop + transformerService.getOffsetByParents(ctrl) + $element[0].offsetHeight;\n };\n ctrl.getHeightElement = function () {\n return ctrl.offsetTop + $element[0].offsetHeight;\n };\n ctrl.start = function () {\n ctrl.isDestroyed = false;\n ctrl.elStartRect = $element[0].getBoundingClientRect();\n var containerLimit = document.getElementById($attrs.containerLimit) || document.body,\n parent = $element.parent();\n if (parent.length > 0) {\n ctrl.backupStylesParentString = parent[0].style.cssText;\n }\n\n //parent.css('minHeight', parent.height());\n parent.css('minHeight', $element.height()); //ставлю высоту элемента так как ui grid и canvas сжимается позже при ресайзе = неверная высота \n //parent.css('minWidth', parent.width());\n\n $element.addClass(ctrl.isTouchDevice === true ? 'transformer-touch' : 'transformer-notouch');\n ctrl.init(containerLimit);\n ctrl.initialize = true;\n if (ctrl.wait === true) {\n ctrl.calc();\n scope.$digest();\n }\n var windowScrollFunc = function (event) {\n if (event.type === 'resize') {\n ctrl.destroyAndLoad();\n //setTimeout(ctrl.windowScroll.bind(ctrl), 0);\n } else {\n ctrl.windowScroll();\n }\n };\n $window.addEventListener('scroll', windowScrollFunc, {\n passive: true\n });\n $window.addEventListener('resize', windowScrollFunc);\n return function () {\n ctrl.isDestroyed = true;\n transformerService.deleteFromStorageDestroyedCtrl(ctrl);\n $window.removeEventListener('scroll', windowScrollFunc);\n $window.removeEventListener('resize', windowScrollFunc);\n parent.css('minHeight', 'auto');\n parent.css('minWidth', 'auto');\n pageYOffsetPrev = 0;\n currentDirectionVerticalScroll = null;\n directionVerticalScroll = null;\n $element[0].style.cssText = ctrl.backupStylesElementString;\n if (parent.length > 0) {\n parent[0].style.cssText = ctrl.backupStylesParentString;\n }\n $element.removeClass(ctrl.isTouchDevice === true ? 'transformer-touch' : 'transformer-notouch');\n $element.removeClass('transformer-scroll-default');\n $element.removeClass('transformer-scroll-over');\n $element.removeClass('transformer-scroll-over--' + ctrl.stickyPosition);\n $element.removeClass('transformer-freeze');\n };\n };\n ctrl.destroy = function () {\n ctrl.destroyFn();\n };\n ctrl.toggleDestroyOrLoad = function (state) {\n setTimeout(function () {\n //нужен для того если меняются стили чтобы они успевали проинициализироваться\n if (state) {\n ctrl.destroyFn = ctrl.start();\n } else {\n ctrl.destroy();\n }\n }, 0);\n };\n ctrl.destroyAndLoad = function () {\n ctrl.destroy();\n setTimeout(() => {\n ctrl.destroyFn = ctrl.start();\n }, 0);\n\n //ctrl.load();\n };\n\n ctrl.checkLoadDocument = function () {\n return $document[0].readyState === 'complete';\n };\n ctrl.getStateDestroy = function () {\n return ctrl.isDestroyed;\n };\n };\n angular.module('transformer').controller('TransformerCtrl', TransformerCtrl);\n TransformerCtrl.$inject = ['$window', '$element', '$scope', 'transformerService', '$attrs', '$document'];\n})(window.angular);",";\n(function (ng) {\n 'use strict';\n\n ng.module('transformer').directive('transformer', ['$window', '$parse', 'transformerService', function ($window, $parse, transformerService) {\n return {\n restrict: 'A',\n controller: 'TransformerCtrl',\n controllerAs: 'transformer',\n bindToController: true,\n scope: true,\n link: function (scope, element, attrs, ctrl) {\n //options\n ctrl.responsiveOptions = $parse(attrs.responsiveOptions)(scope);\n ctrl.limitPos = attrs.limitPos != null;\n ctrl.offsetTop = attrs.offsetTop != null ? parseFloat(attrs.offsetTop) : 0;\n ctrl.sortOrder = attrs.sortOrder != null ? parseFloat(attrs.sortOrder) : null;\n ctrl.limitVisibleScroll = attrs.limitVisibleScroll != null; /* сначала блок прижимается к низу а потом к верху в зависимоти от скролла*/\n\n ctrl.onInit = attrs.onInit != null ? $parse(attrs.onInit) : null;\n //init media query\n ctrl.responsiveMediaQuery = ctrl.responsiveOptions != null ? $window.matchMedia(ctrl.responsiveOptions) : null;\n ctrl.stickyPosition = attrs.stickyPosition != null ? $parse(attrs.stickyPosition)(scope) : 'top'; //variants: top, bottom\n ctrl.stickyHorizontalPosition = attrs.stickyHorizontalPosition != null ? $parse(attrs.stickyHorizontalPosition)(scope) : 'left';\n ctrl.backupStylesElementString = element[0].style.cssText;\n if (attrs.watchEnabled != null) {\n ctrl.watch = scope.$watch(attrs.watchEnabled, function (newValue, oldValue) {\n var isFirstCall = newValue === oldValue;\n if (isFirstCall && newValue === true) {\n if (ctrl.checkLoadDocument()) {\n ctrl.destroyFn = ctrl.start();\n } else {\n $window.addEventListener('load', function () {\n ctrl.destroyFn = ctrl.start();\n });\n }\n } else if (isFirstCall === false) {\n ctrl.toggleDestroyOrLoad(newValue);\n }\n });\n } else {\n if (ctrl.responsiveMediaQuery != null) {\n ctrl.responsiveMediaQuery.addListener(function (obj) {\n if (obj.matches === true) {\n if (ctrl.destroyFn != null) {\n ctrl.destroyFn();\n }\n ctrl.destroyFn = ctrl.start();\n } else if (ctrl.destroyFn != null) {\n ctrl.destroyFn();\n }\n });\n if (ctrl.responsiveMediaQuery.matches === true) {\n ctrl.destroyFn = ctrl.start();\n } else if (ctrl.destroyFn != null) {\n ctrl.destroyFn();\n }\n } else {\n if (ctrl.checkLoadDocument()) {\n ctrl.destroyFn = ctrl.start();\n } else {\n $window.addEventListener('load', function () {\n ctrl.destroyFn = ctrl.start();\n });\n }\n }\n }\n ctrl.scrollWidth = transformerService.getWidthScroll(); //при включении адаптивного дизайна при ресайзе могут быть коллизии так как в таче и дескотопе разные скроллы в ширину\n }\n };\n }]).directive('transformerMutable', ['$window', function () {\n return {\n require: '^transformer',\n restrict: 'A',\n link: function (scope, element, attrs, transformerCtrl) {\n transformerCtrl.addMutableItem(element[0]);\n }\n };\n }]);\n})(window.angular);",";\n(function (ng) {\n 'use strict';\n\n var transformerService = function () {\n var service = this;\n var scrollWidth;\n var storage = [];\n service.getTransformersStorage = function () {\n return storage;\n };\n service.addInStorage = function (transformer) {\n var sortOrder = transformer.sortOrder || 0;\n var isPasted = false;\n if (storage.length > 0) {\n for (var i = 0, len = storage.length; i < len; i++) {\n if (sortOrder > storage[i].sortOrder) {\n storage.splice(i, 0, transformer);\n isPasted = true;\n break;\n }\n }\n }\n if (isPasted === false) {\n storage.push(transformer);\n }\n };\n service.getOffsetByParents = function (self) {\n var result = 0;\n for (var i = 0, len = storage.length; i < len; i++) {\n if (storage[i] === self) {\n break;\n } else if (storage[i].scrollOver === true || storage[i].freeze === true) {\n result += storage[i].getBottomPoint();\n }\n }\n return result;\n };\n service.getSummHeightTransformers = function (self) {\n var result = 0;\n for (var i = 0, len = storage.length; i < len; i++) {\n if (storage[i] === self) {\n break;\n } else if (storage[i].scrollOver === true || storage[i].freeze === true) {\n result += storage[i].getHeightElement();\n }\n }\n return result;\n };\n service.getWidthScroll = function () {\n var div = document.createElement('div');\n div.style.overflowY = 'scroll';\n div.style.width = '50px';\n div.style.height = '50px';\n document.body.append(div);\n scrollWidth = div.offsetWidth - div.clientWidth;\n div.remove();\n return scrollWidth;\n };\n service.deleteFromStorageDestroyedCtrl = function (ctrl) {\n storage = storage.filter(function (it) {\n return it !== ctrl;\n });\n };\n };\n angular.module('transformer').service('transformerService', transformerService);\n transformerService.$inject = [];\n})(window.angular);",";\n(function (ng) {\n 'use strict';\n\n angular.module('transformer', []);\n})(window.angular);","import './styles/transformer.scss';\nimport './transformer.js';\nimport './controllers/transformerController.js';\nimport './directives/transformerDirectives.js';\nimport './services/transformerService.js';","import './full-height-mobile.scss';\nconst moduleName = 'fullHeightMobile';\nangular.module(moduleName, []).directive('fullHeightMobile', ['$window', '$document', function ($window, $document) {\n return {\n controller: function FullHeightMobileCtrl() {\n var ctrl = this;\n var root = $document[0].querySelector(':root');\n ctrl.onOrientationChangeHandler = function () {\n const value = $window.innerHeight;\n root.style.setProperty('--min-full-height-native', \"100vh\");\n root.style.setProperty('--min-full-height', \"var(--min-full-height-native, \".concat(value, \"px)\"));\n root.style.setProperty('--min-full-height-raw', value);\n };\n },\n link: function (scope, element, attrs, fullHeightMobileCtrl) {\n fullHeightMobileCtrl.onOrientationChangeHandler();\n $window.addEventListener(\"resize\", fullHeightMobileCtrl.onOrientationChangeHandler);\n }\n };\n}]);\nexport default moduleName;","import './styles/colors-viewer.scss';\nimport ColorsViewerCtrl from './controllers/colorsViewerController.js';\nimport { colorsViewerDirective, colorsViewerItemBeforeComponent } from './directives/colorsViewerDirectives.js';\nconst moduleName = 'colorsViewer';\nangular.module(moduleName, []).controller('ColorsViewerCtrl', ColorsViewerCtrl).directive('colorsViewer', colorsViewerDirective).directive('colorsViewerItemBefore', colorsViewerItemBeforeComponent);\nexport default moduleName;","ColorsViewerCtrl.$inject = [\"$element\", \"$scope\", \"$transclude\"];\n/* @ngInject */\nfunction ColorsViewerCtrl($element, $scope, $transclude) {\n var ctrl = this,\n stopLoop = false,\n isFindedByStart = false,\n findedStartColorById,\n findedStartColorByIdAndMain;\n ctrl.$onInit = function () {\n ctrl.dirty = false;\n ctrl.multiselect = ctrl.multiselect === true;\n if (ctrl.multiselect === true) {\n ctrl.colorSelected = [];\n if (ctrl.colors != null && ctrl.colors.length > 0) {\n for (var i = 0, len = ctrl.colors.length; i < len; i++) {\n if (ctrl.colors[i].Selected === true) {\n ctrl.colorSelected.push(ctrl.colors[i]);\n }\n }\n }\n ctrl.colorSelectedNamesList = ctrl.colorSelected.join(',');\n } else {\n if (ctrl.startSelectedColors != null && ctrl.startSelectedColors.length > 0) {\n for (var s = 0, lenS = ctrl.startSelectedColors.length; s < lenS; s++) {\n for (var c = 0, lenC = ctrl.colors.length; c < lenC; c++) {\n if (ctrl.colors[c].ColorId === ctrl.startSelectedColors[s]) {\n if (ctrl.colors[c].Main === 1) {\n findedStartColorByIdAndMain = ctrl.colors[c];\n stopLoop = true;\n } else if (findedStartColorById == null) {\n findedStartColorById = ctrl.colors[c];\n }\n isFindedByStart = true;\n }\n }\n if (stopLoop === true) {\n stopLoop = false;\n break;\n }\n }\n }\n if (isFindedByStart === false) {\n for (var m = 0, l = ctrl.colors.length; m < l; m++) {\n if (ctrl.colors[m].Main == true) {\n ctrl.colorSelected = ctrl.colors[m];\n break;\n }\n }\n if (ctrl.colorSelected == null) {\n ctrl.colorSelected = ctrl.colors[0];\n }\n } else {\n ctrl.colorSelected = findedStartColorByIdAndMain || findedStartColorById;\n }\n }\n if (ctrl.initColors != null) {\n ctrl.initColors({\n colorsViewer: ctrl\n });\n }\n };\n ctrl.$postLink = function () {\n if (ctrl.carousel != null) {\n var colorSelectedFirst = ctrl.multiselect ? ctrl.colorSelected[0] : ctrl.colorSelected;\n var colorSelectedFirstIndex = ctrl.colors.indexOf(colorSelectedFirst);\n ctrl.carousel.load = true;\n ctrl.carousel.whenCarouselInit().then(function (carousel) {\n carousel.carouselNative.setItemSelect(colorSelectedFirstIndex);\n carousel.carouselNative.goto(colorSelectedFirstIndex, false);\n });\n }\n };\n ctrl.getImagePath = function (photoName) {\n return photoName.indexOf('://') != -1 ? photoName : 'pictures/color/' + ctrl.imageType.toLowerCase() + '/' + photoName;\n };\n ctrl.selectColor = function (event, color) {\n var indexInSelectedArray;\n if (ctrl.multiselect === true) {\n indexInSelectedArray = ctrl.colorSelected.indexOf(color);\n if (indexInSelectedArray > -1) {\n ctrl.colorSelected.splice(indexInSelectedArray, 1);\n //свойство используется в фильтрах\n color.Selected = false;\n } else {\n ctrl.colorSelected.push(color);\n //свойство используется в фильтрах\n color.Selected = true;\n }\n ctrl.colorSelectedNamesList = ctrl.colorSelected.join(',');\n } else {\n ctrl.colorSelected = color;\n }\n ctrl.dirty = true;\n ctrl.changeColor({\n event: event,\n color: color\n });\n };\n ctrl.selectColorById = function (colorId) {\n var color = ctrl.colors.filter(function (x) {\n return x.ColorId == colorId;\n });\n if (color != null && color.length > 0) {\n ctrl.selectColor(null, color[0]);\n }\n };\n ctrl.getDirtyState = function () {\n return ctrl.dirty;\n };\n}\n;\nexport default ColorsViewerCtrl;","import colorsTemplate from \"/scripts/_partials/colors-viewer/templates/colors.html\";\nfunction colorsViewerDirective() {\n return {\n require: {\n carousel: '?^carousel'\n },\n restrict: 'A',\n replace: true,\n templateUrl: colorsTemplate,\n controller: 'ColorsViewerCtrl',\n controllerAs: 'colorsViewer',\n bindToController: true,\n transclude: {\n colorsViewerItemBefore: '?colorsViewerItemBefore'\n },\n scope: {\n colors: '=',\n colorSelected: '=?',\n startSelectedColors: ' {\n return {\n controllerAs: 'colorsViewerItemBefore',\n controller: /* @ngInject */[\"$scope\", function ($scope) {\n const ctrl = this;\n ctrl.$onInit = function () {\n $scope.$itemScope = findPropertyInScope($scope, \"color\");\n };\n }]\n };\n};\nexport { colorsViewerDirective, colorsViewerItemBeforeComponent };\nconst findPropertyInScope = (scope, propertyName) => {\n let result;\n let item = scope;\n while (item != null) {\n if (item[propertyName] != null) {\n result = item;\n break;\n } else {\n item = item.$parent;\n }\n }\n return result;\n};","CustomOptionsCtrl.$inject = [\"customOptionsService\"];\n/* @ngInject */\nfunction CustomOptionsCtrl(customOptionsService) {\n var ctrl = this,\n timeoutId;\n ctrl.$onInit = function () {\n customOptionsService.getData(ctrl.productId).then(function (customOptions) {\n ctrl.items = customOptions;\n var query = customOptionsService.convertToQuery(ctrl.items);\n customOptionsService.get(ctrl.productId, query).then(function (data) {\n ctrl.xml = data.xml;\n ctrl.jsonHash = data.jsonHash;\n if (ctrl.initFn != null) {\n ctrl.initFn({\n customOptions: ctrl\n });\n }\n });\n });\n };\n ctrl.eventDebounce = function (item) {\n if (timeoutId != null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(ctrl.change.bind(ctrl, item), 300);\n };\n ctrl.change = function (item) {\n var query = customOptionsService.convertToQuery(ctrl.items);\n customOptionsService.get(ctrl.productId, query).then(function (data) {\n ctrl.xml = data.xml;\n ctrl.jsonHash = data.jsonHash;\n ctrl.changeFn({\n item: item\n });\n });\n };\n}\nexport default CustomOptionsCtrl;","import './styles/customOptions.scss';\nimport CustomOptionsCtrl from './controllers/customOptionsController.js';\nimport { customOptionsDirective } from './directives/customOptionsDirectives.js';\nimport customOptionsService from './services/customOptionsService.js';\nconst moduleName = 'customOptions';\nangular.module(moduleName, []).controller('CustomOptionsCtrl', CustomOptionsCtrl).directive('customOptions', customOptionsDirective).service('customOptionsService', customOptionsService);\nexport default moduleName;","customOptionsDirective.$inject = [\"urlHelper\"];\nimport customOptionsTemplate from '/scripts/_partials/custom-options/templates/customOptions.html';\n\n/* @ngInject */\nfunction customOptionsDirective(urlHelper) {\n return {\n scope: {\n productId: '<',\n initFn: '&',\n changeFn: '&'\n },\n replace: true,\n templateUrl: customOptionsTemplate,\n controller: 'CustomOptionsCtrl',\n controllerAs: 'customOptions',\n bindToController: true\n };\n}\nexport { customOptionsDirective };","customOptionsService.$inject = [\"$http\", \"urlHelper\"];\n/* @ngInject */\nfunction customOptionsService($http, urlHelper) {\n var service = this;\n service.getData = function (productId) {\n return $http.get(urlHelper.getAbsUrl('productExt/getcustomoptions', true), {\n params: {\n productId: productId\n }\n }).then(function (response) {\n return response.data;\n });\n };\n service.get = function (productId, selectedOptions) {\n return $http.get(urlHelper.getAbsUrl('productExt/customoptions', true), {\n params: {\n productId: productId,\n selectedOptions: selectedOptions\n }\n }).then(function (response) {\n return response.data;\n });\n };\n service.convertToQuery = function (customOptions) {\n var arrayTemp = [],\n item,\n val;\n for (var i = customOptions.length - 1; i >= 0; i--) {\n val = null;\n item = customOptions[i];\n if (item.SelectedOptions != null) {\n //DropDownList = 0,\n //RadioButton = 1,\n //CheckBox = 2,\n //TextBoxSingleLine = 3,\n //TextBoxMultiLine = 4\n\n switch (item.InputType) {\n case 0:\n case 1:\n val = item.SelectedOptions.ID;\n break;\n case 2:\n val = !item.SelectedOptions ? '0' : '1'; //item.SelectedOptions может содержать объект или true\n break;\n case 3:\n case 4:\n val = item.SelectedOptions.OptionText;\n break;\n default:\n throw Error('Not found InputType for custom options: ' + item.InputType);\n break;\n }\n if (val != null) {\n arrayTemp.push(i + '_' + val);\n }\n }\n }\n return arrayTemp.join(';');\n };\n}\nexport default customOptionsService;","function SizesViewerCtrl() {\n var ctrl = this;\n ctrl.$onInit = function () {\n if (ctrl.startSelectedSizes != null && ctrl.startSelectedSizes.length > 0) {\n for (var s = 0, lenS = ctrl.startSelectedSizes.length; s < lenS; s++) {\n for (var c = 0, lenC = ctrl.sizes.length; c < lenC; c++) {\n if (ctrl.sizes[c].SizeId === ctrl.startSelectedSizes[s]) {\n ctrl.sizeSelected = ctrl.sizes[c];\n break;\n }\n }\n }\n }\n ctrl.initSizes({\n sizesViewer: ctrl\n });\n };\n}\n;\nexport default SizesViewerCtrl;","import sizesTemplate from \"/scripts/_partials/sizes-viewer/templates/sizes.html\";\nfunction sizesViewerDirective() {\n return {\n restrict: 'A',\n replace: true,\n templateUrl: sizesTemplate,\n controller: 'SizesViewerCtrl',\n controllerAs: 'sizesViewer',\n bindToController: true,\n scope: {\n sizes: ' 0 || entry.isIntersecting) {\n observer.unobserve(entry.target);\n if (!isLoaded(entry.target)) {\n load(entry.target);\n markAsLoaded(entry.target);\n loaded(entry.target);\n }\n }\n });\n };\n };\n var getElements = function getElements(selector) {\n var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n if (selector instanceof Element) {\n return [selector];\n }\n if (selector instanceof NodeList) {\n return selector;\n }\n return root.querySelectorAll(selector);\n };\n function lozad() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.lozad';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _Object$assign = Object.assign({}, defaultConfig, options),\n root = _Object$assign.root,\n rootMargin = _Object$assign.rootMargin,\n threshold = _Object$assign.threshold,\n load = _Object$assign.load,\n loaded = _Object$assign.loaded,\n //custom callback\n onObserve = _Object$assign.onObserve;\n var observer = void 0;\n if (typeof window !== 'undefined' && window.IntersectionObserver) {\n observer = new IntersectionObserver(onIntersection(load, loaded), {\n root: root,\n rootMargin: rootMargin,\n threshold: threshold\n });\n }\n var elements = getElements(selector, root);\n for (var i = 0; i < elements.length; i++) {\n preLoad(elements[i]);\n }\n return {\n observe: function observe() {\n var elements = getElements(selector, root);\n for (var _i = 0; _i < elements.length; _i++) {\n if (isLoaded(elements[_i])) {\n continue;\n }\n if (observer) {\n observer.observe(elements[_i]);\n //custom callback\n if (onObserve != null) {\n onObserve(elements[i]);\n }\n continue;\n }\n load(elements[_i]);\n markAsLoaded(elements[_i]);\n loaded(elements[_i]);\n }\n },\n triggerLoad: function triggerLoad(element) {\n if (isLoaded(element)) {\n return;\n }\n load(element);\n markAsLoaded(element);\n loaded(element);\n },\n observer: observer\n };\n }\n return lozad;\n});",";\n(function (window) {\n 'use strict';\n\n var qazy = new window.Qazy();\n var elements = [];\n //start\n (function spy() {\n if (document.readyState !== 'complete') {\n elements = elements.concat(qazy.searchImages());\n setTimeout(spy, 100);\n }\n })();\n window.addEventListener('load', function () {\n setTimeout(function () {\n //qazy.observe(elements);\n var images = document.querySelectorAll('[data-qazy]:not(.js-qazy-loaded), [data-qazy-container]:not([data-inplace-rich]) img:not(.js-qazy-loaded):not([data-inplace-image])');\n // сделал так чтоб при перерисовки DOM были актуальные ссылки на img\n images = Array.prototype.slice.call(images, 0);\n qazy.observe(images);\n }, 200);\n });\n})(window);","import '../lozad/lozad.custom.js';\nvar Qazy = function () {\n this.placeholderSVG = this.defaults.placeholderSVG;\n this.placeholder = 'data:image/svg+xml;utf8,' + this.placeholderSVG;\n this.storage = [];\n return this;\n};\nQazy.prototype.defaults = {\n selectorSearch: '[data-qazy]:not(.js-qazy-loading):not(.js-qazy-loaded), [data-qazy-container]:not([data-inplace-rich]) img:not(.js-qazy-loading):not(.js-qazy-loaded):not([data-inplace-image])',\n placeholderSVG: encodeURIComponent('')\n};\nQazy.prototype.imgOK = function (img) {\n var isLoad = img.complete && img.src != null && img.src.length > 0 || img.naturalWidth !== 'undefined' && img.naturalWidth > 0;\n var isVisible = img.offsetHeight > 0;\n return isLoad && isVisible;\n};\nQazy.prototype.searchImages = function (selectorSearch) {\n var self = this;\n selectorSearch = selectorSearch || Qazy.prototype.defaults.selectorSearch;\n var list = Array.prototype.slice.call(typeof selectorSearch === 'string' ? document.querySelectorAll(selectorSearch) : selectorSearch).filter(searchFilter);\n list.forEach(function (element) {\n if (self.imgOK(element) === false && isElementInViewport(element) === false && element.classList.contains('js-qazy-loading') === false) {\n element.classList.add('js-qazy-loading');\n element.setAttribute('data-qazy-image', element.src || element.dataset.src);\n element.src = self.placeholder;\n } else {\n element.classList.add('js-qazy-loaded');\n }\n });\n return list;\n};\nQazy.prototype.observe = function (selectorObserver) {\n var result;\n if (selectorObserver == null || selectorObserver instanceof Array && selectorObserver.length === 0) {\n return null;\n }\n if (selectorObserver instanceof Array) {\n result = [];\n selectorObserver.forEach(function (item) {\n result.push(observer(item));\n });\n } else {\n result = observer(selectorObserver);\n }\n return result;\n};\nwindow.Qazy = Qazy;\nfunction observer(selectorObserver) {\n var customOptions = null;\n if (selectorObserver.tagName === 'IMG') {\n customOptions = {\n load: function (element) {\n var qazyImage = element.getAttribute('data-qazy-image');\n if (qazyImage != null && qazyImage.length > 0 && qazyImage !== element.src) {\n element.src = qazyImage;\n element.classList.remove('js-qazy-loading');\n element.classList.add('js-qazy-loaded');\n }\n },\n loaded: function (target) {\n if (window.angular != null) {\n var ngQazyData = angular.element(target).data('ngQazy');\n if (target != null) {\n target.classList.remove('js-qazy-loading');\n target.classList.add('js-qazy-loaded');\n }\n if (ngQazyData != null && ngQazyData.onLoaded != null) {\n ngQazyData.onLoaded();\n }\n }\n }\n };\n }\n var lozadResult = lozad(selectorObserver, customOptions);\n lozadResult.observe();\n return lozadResult;\n}\nfunction searchFilter(element) {\n return element.getAttribute('data-background-image') === null && parent(element, '[data-inplace-rich]') === null;\n}\nfunction matches(element, selector) {\n var fn = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector;\n return fn.call(element, selector);\n}\nfunction closest(element, selector) {\n var result = null;\n if (element != null) {\n if (matches(element, selector) === true) {\n result = element;\n } else if (element.parentElement != null) {\n result = closest(element.parentElement, selector);\n }\n }\n return result;\n}\nfunction parent(element, selector) {\n return element != null && element.parentElement != null ? closest(element.parentElement, selector) : null;\n}\nfunction isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /* or $(window).height() */\n rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */;\n}","import mimicFn from 'mimic-fn';\n\nconst debounceFn = (inputFunction, options = {}) => {\n\tif (typeof inputFunction !== 'function') {\n\t\tthrow new TypeError(`Expected the first argument to be a function, got \\`${typeof inputFunction}\\``);\n\t}\n\n\tconst {\n\t\twait = 0,\n\t\tmaxWait = Number.POSITIVE_INFINITY,\n\t\tbefore = false,\n\t\tafter = true,\n\t} = options;\n\n\tif (!before && !after) {\n\t\tthrow new Error('Both `before` and `after` are false, function wouldn\\'t be called.');\n\t}\n\n\tlet timeout;\n\tlet maxTimeout;\n\tlet result;\n\n\tconst debouncedFunction = function (...arguments_) {\n\t\tconst context = this; // eslint-disable-line unicorn/no-this-assignment\n\n\t\tconst later = () => {\n\t\t\ttimeout = undefined;\n\n\t\t\tif (maxTimeout) {\n\t\t\t\tclearTimeout(maxTimeout);\n\t\t\t\tmaxTimeout = undefined;\n\t\t\t}\n\n\t\t\tif (after) {\n\t\t\t\tresult = inputFunction.apply(context, arguments_);\n\t\t\t}\n\t\t};\n\n\t\tconst maxLater = () => {\n\t\t\tmaxTimeout = undefined;\n\n\t\t\tif (timeout) {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\ttimeout = undefined;\n\t\t\t}\n\n\t\t\tif (after) {\n\t\t\t\tresult = inputFunction.apply(context, arguments_);\n\t\t\t}\n\t\t};\n\n\t\tconst shouldCallNow = before && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\n\t\tif (maxWait > 0 && maxWait !== Number.POSITIVE_INFINITY && !maxTimeout) {\n\t\t\tmaxTimeout = setTimeout(maxLater, maxWait);\n\t\t}\n\n\t\tif (shouldCallNow) {\n\t\t\tresult = inputFunction.apply(context, arguments_);\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tmimicFn(debouncedFunction, inputFunction);\n\n\tdebouncedFunction.cancel = () => {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = undefined;\n\t\t}\n\n\t\tif (maxTimeout) {\n\t\t\tclearTimeout(maxTimeout);\n\t\t\tmaxTimeout = undefined;\n\t\t}\n\t};\n\n\treturn debouncedFunction;\n};\n\nexport default debounceFn;\n","const copyProperty = (to, from, property, ignoreNonConfigurable) => {\n\t// `Function#length` should reflect the parameters of `to` not `from` since we keep its body.\n\t// `Function#prototype` is non-writable and non-configurable so can never be modified.\n\tif (property === 'length' || property === 'prototype') {\n\t\treturn;\n\t}\n\n\t// `Function#arguments` and `Function#caller` should not be copied. They were reported to be present in `Reflect.ownKeys` for some devices in React Native (#41), so we explicitly ignore them here.\n\tif (property === 'arguments' || property === 'caller') {\n\t\treturn;\n\t}\n\n\tconst toDescriptor = Object.getOwnPropertyDescriptor(to, property);\n\tconst fromDescriptor = Object.getOwnPropertyDescriptor(from, property);\n\n\tif (!canCopyProperty(toDescriptor, fromDescriptor) && ignoreNonConfigurable) {\n\t\treturn;\n\t}\n\n\tObject.defineProperty(to, property, fromDescriptor);\n};\n\n// `Object.defineProperty()` throws if the property exists, is not configurable and either:\n// - one its descriptors is changed\n// - it is non-writable and its value is changed\nconst canCopyProperty = function (toDescriptor, fromDescriptor) {\n\treturn toDescriptor === undefined || toDescriptor.configurable || (\n\t\ttoDescriptor.writable === fromDescriptor.writable &&\n\t\ttoDescriptor.enumerable === fromDescriptor.enumerable &&\n\t\ttoDescriptor.configurable === fromDescriptor.configurable &&\n\t\t(toDescriptor.writable || toDescriptor.value === fromDescriptor.value)\n\t);\n};\n\nconst changePrototype = (to, from) => {\n\tconst fromPrototype = Object.getPrototypeOf(from);\n\tif (fromPrototype === Object.getPrototypeOf(to)) {\n\t\treturn;\n\t}\n\n\tObject.setPrototypeOf(to, fromPrototype);\n};\n\nconst wrappedToString = (withName, fromBody) => `/* Wrapped ${withName}*/\\n${fromBody}`;\n\nconst toStringDescriptor = Object.getOwnPropertyDescriptor(Function.prototype, 'toString');\nconst toStringName = Object.getOwnPropertyDescriptor(Function.prototype.toString, 'name');\n\n// We call `from.toString()` early (not lazily) to ensure `from` can be garbage collected.\n// We use `bind()` instead of a closure for the same reason.\n// Calling `from.toString()` early also allows caching it in case `to.toString()` is called several times.\nconst changeToString = (to, from, name) => {\n\tconst withName = name === '' ? '' : `with ${name.trim()}() `;\n\tconst newToString = wrappedToString.bind(null, withName, from.toString());\n\t// Ensure `to.toString.toString` is non-enumerable and has the same `same`\n\tObject.defineProperty(newToString, 'name', toStringName);\n\tObject.defineProperty(to, 'toString', {...toStringDescriptor, value: newToString});\n};\n\nexport default function mimicFunction(to, from, {ignoreNonConfigurable = false} = {}) {\n\tconst {name} = to;\n\n\tfor (const property of Reflect.ownKeys(from)) {\n\t\tcopyProperty(to, from, property, ignoreNonConfigurable);\n\t}\n\n\tchangePrototype(to, from);\n\tchangeToString(to, from, name);\n\n\treturn to;\n}\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](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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};","__webpack_require__.p = \"Areas/Landing/dist/\";","import appDependency from \"../../../scripts/appDependency.js\";\nimport '../../../styles/common/icons.scss';\nimport '../../../fonts/fonts.funnel.css';\nimport 'normalize.css';\nimport 'flexboxgrid';\nimport '../frontend/_common/flexboxgrid.ext.scss';\nimport '../../../styles/common/custom-input.scss';\nimport '../../../styles/views/product.scss';\nimport '../../../styles/common/connector.scss';\nimport tabsModule from '../../../scripts/_common/tabs/tabs.module.js';\nappDependency.addItem(tabsModule);\nimport carouselModule from '../../../scripts/_common/carousel/carousel.module.js';\nappDependency.addItem(carouselModule);\nimport ratingModule from '../../../scripts/_common/rating/rating.module.js';\nappDependency.addItem(ratingModule);\nimport '../../../scripts/_common/spinbox/spinbox.module.js';\nappDependency.addItem('spinbox');\nimport '../../../scripts/_common/transformer/transformer.module.js';\nappDependency.addItem('transformer');\nimport iframeResponsiveModule from '../../../scripts/_common/iframe-responsive/iframeResponsive.module.js';\nappDependency.addItem(iframeResponsiveModule);\nimport colorsViewerModule from '../../../scripts/_partials/colors-viewer/colorsViewer.module.js';\nappDependency.addItem(colorsViewerModule);\nimport customOptionsModule from '../../../scripts/_partials/custom-options/customOptions.module.js';\nappDependency.addItem(customOptionsModule);\nimport sizesViewerModule from '../../../scripts/_partials/sizes-viewer/sizesViewer.module.js';\nappDependency.addItem(sizesViewerModule);\nimport fullHeightMobileModule from '../../../scripts/_mobile/full-height-mobile/full-height-mobile.module.js';\nappDependency.addItem(fullHeightMobileModule);\nimport '../../../node_modules/slick-carousel/slick/slick.scss';\nimport '../../../node_modules/slick-carousel/slick/slick-theme.scss';\nimport '../frontend/vendors/slick/slick-theme.scss';\nimport '../frontend/_common/lp-head.scss';\nimport '../frontend/_common/responsive.scss';\nimport '../frontend/_common/text-align-adaptive.scss';\nimport '../frontend/_common/buttons/buttons.scss';\nimport '../frontend/_common/general.scss';\nimport '../frontend/_common/lp-table.scss';\nimport '../frontend/_common/lp-input.scss';\nimport '../frontend/_common/lp-form/styles/lp-form.scss';\nimport '../frontend/_common/lp-link.scss';\nimport '../frontend/_common/error.scss';\nimport '../frontend/_common/scroll-to-block/style/style.scss';\nimport '../frontend/_common/lp-accordion/lp-accordion.scss';\nimport '../frontend/_common/carousel.scss';\nimport '../frontend/blocks/lp-header/lp-header.scss';\nimport '../frontend/blocks/menu-header/menu-header.scss';\nimport '../frontend/blocks/covers/styles/covers.scss';\nimport '../frontend/blocks/booking/styles/booking.scss';\nimport '../frontend/blocks/columns/columns.scss';\nimport '../frontend/blocks/image/image.scss';\nimport '../frontend/blocks/text/text.scss';\nimport '../frontend/blocks/countdown/styles/countdown.scss';\nimport '../frontend/blocks/video/video.scss';\nimport '../frontend/blocks/form/form.scss';\nimport '../frontend/blocks/footer/styles/footer.scss';\nimport '../frontend/blocks/partners-logo/partners-logo.scss';\nimport '../frontend/blocks/reviews/styles/reviews.scss';\nimport '../frontend/blocks/reviews-singleton/styles/reviews-singleton.scss';\nimport '../frontend/blocks/products-view/styles/products-view.scss';\nimport '../frontend/blocks/products-by-category/product-by-category.scss';\nimport '../frontend/blocks/properties/properties.scss';\nimport '../frontend/blocks/social/social.scss';\nimport '../frontend/blocks/price/price.scss';\nimport '../frontend/blocks/products-view/styles/products-view.scss';\nimport '../frontend/blocks/contacts/contacts.scss';\nimport '../frontend/blocks/delimiter/delimiter.scss';\nimport '../frontend/blocks/services/services.scss';\nimport '../frontend/blocks/team/team.scss';\nimport '../frontend/blocks/characteristics/characteristics.scss';\nimport '../frontend/blocks/gallery/styles/gallery.scss';\nimport '../frontend/blocks/schedule/styles/schedule.scss';\nimport '../frontend/blocks/progressbar/progressbar.scss';\nimport '../frontend/blocks/lp-cart/lp-cart.scss';\nimport '../frontend/blocks/news/news.scss';\nimport '../frontend/blocks/exit/exit.scss';\nimport '../frontend/blocks/user/user.scss';\nimport '../../../Areas/Mobile/scripts/_common/tableResponsive/styles/tableResponsive.scss';\nimport '../../../vendors/lozad/lozad.custom.js';\nimport '../../../vendors/qazy/qazyOpt.js';\nimport '../../../vendors/qazy/qazyOpt.head.js';"],"names":[],"sourceRoot":""}