{"version":3,"file":"app-3a54c246.981ca8458d389c9a476a.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AAGA;AAGA;;AAIA;AACA;;AAGA;AACA;AAYA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAUA;AAfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;AC7DA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAIA;AAHA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;;AAEA;AACA;;AAGA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;ACtFA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAKA;AAJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAKA;AACA;;AAEA;AACA;;AAGA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;AC5FA;;AAEA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;AC/CA;;AAEA;AACA;;AAEA;AACA;;AAKA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;ACnGA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AANA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAKA;AALA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAMA;AANA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChFA;;AAEA;AACA;AAGA;AAGA;AAGA;;AAKA;AACA;AACA;AACA;AACA;AAMA;AALA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AACA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AClFA;;AAEA;AACA;AACA;AACA;;AAGA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAIA;AAHA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;;AAEA;AACA;AAGA;AACA;AACA;;AAEA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;;;;;;;;;;;;;ACxFA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAGA;AAFA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAGA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AAGA;AAGA;;AAIA;AACA;AACA;AAAA;AACA;AACA;AACA;;AAGA;AACA;AAYA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAYA;AAlBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;AC/DA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAGA;AAFA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACjCA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AAMA;AAPA;AAAA;AAGA;AAAA;AACA;AAIA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAEA;;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAzDA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AAAA;;AAGA;AACA;AAWA;AAAA;AAMA;AAPA;AAAA;AAGA;AAAA;AACA;AAWA;AACA;AACA;AACA;AACA;AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhHA;AAAA;;;;;;;;;;;;;;;;;;;;;;;AC1CA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAKA;AAPA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;AACA;;AAGA;AACA;AACA;AAEA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACpBA;;AAEA;AACA;;AAGA;AACA;AAGA;AAAA;AACA;AAAA;AAJA;AAEA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;;AAKA;AACA;AACA;AACA;AAIA;;AAIA;AACA;;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAmBA;AArBA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAGA;AAIA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA/SA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;AC1DA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAGA;AAAA;AACA;AAAA;AACA;AAAA;AALA;AAEA;AAAA;AAAA;AAAA;AAAA;AAMA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAGA;AACA;AAGA;AAAA;AACA;AAAA;AAJA;AAEA;AAAA;AAAA;AAAA;AAKA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;ACXA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;ACHA;AACA;AACA;AACA","sources":["webpack://latinera/./sources/components/private/task-activity-item.js","webpack://latinera/./sources/components/private/task-activity-item/add-analysis-activity-from-activities-to-task-activity.js","webpack://latinera/./sources/components/private/task-activity-item/add-analysis-activity-from-task-activity-to-task-activity.js","webpack://latinera/./sources/components/private/task-activity-item/delete-task-activity.js","webpack://latinera/./sources/components/private/task-activity-item/delete-task-analysis-activity.js","webpack://latinera/./sources/components/private/task-activity-item/initialize-analysis-activities-list-sortable.js","webpack://latinera/./sources/components/private/task-activity-item/move-activity.js","webpack://latinera/./sources/components/private/task-activity-item/move-analysis-activity-within-task-activity.js","webpack://latinera/./sources/components/private/task-activity-item/remove-analysis-activity-from-task-activity.js","webpack://latinera/./sources/components/private/task-activity.js","webpack://latinera/./sources/components/private/task-activity/initialize-analysis-activities-list-sortable.js","webpack://latinera/./sources/components/private/user-credit.js","webpack://latinera/./sources/components/private/user-dropdown.js","webpack://latinera/./sources/components/private/verb-inflection-item.js","webpack://latinera/./sources/components/private/verb-inflector-item.js","webpack://latinera/./sources/components/private/verb-lemma-form.js","webpack://latinera/./sources/components/private/verb-lemma-item.js","webpack://latinera/./sources/components/private/verb-properties.js","webpack://latinera/./sources/components/private/task-activity-item.html","webpack://latinera/./sources/components/private/task-activity.html","webpack://latinera/./sources/components/private/user-credit.html","webpack://latinera/./sources/components/private/user-dropdown.html","webpack://latinera/./sources/components/private/verb-inflection-item.html","webpack://latinera/./sources/components/private/verb-inflector-item.html","webpack://latinera/./sources/components/private/verb-lemma-form.html","webpack://latinera/./sources/components/private/verb-lemma-item.html","webpack://latinera/./sources/components/private/verb-properties.html"],"sourcesContent":["// Define the view-model for the \"task-activity-item\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { Router } from \"aurelia-router\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { typeOf } from \"utilities/etc\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { \n visibleMetaDataField as defaultVisibleMetaDataField\n} from \"parameters/activity\";\n\n// Import service modules\nimport ActivityService from \"services/activity\";\nimport EventService from \"services/event\";\nimport IndexService from \"services/index\";\nimport NotificationService from \"services/notification\";\nimport UserService from \"services/user\";\n\n// Import dialog modules\nimport { CreateAnalysisActivity } from \"dialogs/create-analysis-activity\";\n\n// Import method modules\nimport { moveActivity } from \"./task-activity-item/move-activity\";\nimport {\n initializeAnalysisActivitiesListSortable\n} from \"./task-activity-item/initialize-analysis-activities-list-sortable\";\nimport {\n deleteTaskActivity\n} from \"./task-activity-item/delete-task-activity\";\nimport {\n deleteTaskAnalysisActivity\n} from \"./task-activity-item/delete-task-analysis-activity\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export TaskActivityItem class\n@inject(\n ActivityService,\n DialogService,\n EventService,\n IndexService,\n NotificationService,\n Router,\n UserService\n)\nexport class TaskActivityItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) taskActivityData = {};\n @bindable({ defaultBindingMode: bindingMode.twoWay }) activitiesData = [];\n @bindable({ defaultBindingMode: bindingMode.toView }) activitiesIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"full\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n visibleMetaDataField = defaultVisibleMetaDataField;\n analysisActivitiesData = [];\n isTaskActivityOpen = false;\n analysisActivitiesListSortable = null;\n isLoadingData = false;\n i18nParams = i18nParams;\n\n constructor(\n activityService,\n dialogService,\n eventService,\n indexService,\n notificationService,\n router,\n userService\n ) {\n this.activityService = activityService;\n this.dialogService = dialogService;\n this.eventService = eventService;\n this.indexService = indexService;\n this.notificationService = notificationService;\n this.router = router;\n this.userService = userService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.validateBoundAttributes();\n\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"taskActivityItem\",\n entityKey: this.taskActivityKey,\n eventService: this.eventService,\n eventsData\n });\n\n // Load task activity meta-data\n const taskActivityMetaData = \n await this.activityService.getTaskActivityMetaDataByKey({\n taskActivityKey: this.taskActivityKey\n });\n ({ isOpen: this.isTaskActivityOpen } = taskActivityMetaData || {});\n\n // Load task analysis activities\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(this.taskKey);\n }\n\n async attached() {\n this.initializeAnalysisActivitiesListSortable();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"runMode\")\n get showDebugInfo() {\n return [\"dev\"].includes(this.runMode);\n }\n\n @computedFrom(\"taskActivityData.key\")\n get taskActivityKey() {\n const { key: taskActivityKey = \"\" } = this.taskActivityData || {};\n return taskActivityKey;\n }\n\n @computedFrom(\"taskActivityData.task\")\n get taskData() {\n const { task: taskData = null } = this.taskActivityData || {};\n return taskData;\n }\n\n @computedFrom(\"taskData.key\")\n get taskKey() {\n const { key: taskKey = \"\" } = this.taskData || {};\n return taskKey;\n }\n @computedFrom(\"taskData.title\")\n get taskTitle() {\n const { title: taskTitle = \"\" } = this.taskData || {};\n return taskTitle;\n }\n @computedFrom(\"taskData.title\")\n get taskDescription() {\n const { description: taskDescription = \"\" } = this.taskData || {};\n return taskDescription;\n }\n\n @computedFrom(\"analysisActivitiesData\")\n get analysisActivitiesCount() {\n return this.analysisActivitiesData.length;\n }\n\n\n // Core methods\n validateBoundAttributes() {\n if (typeOf(this.activitiesIndex) !== \"number\" || this.activitiesIndex < -1) {\n throw new Error(`Bound attribute \"activitiesIndex\" should be either ` +\n `minus one or a non-negative index`);\n }\n if (![\"full\"].includes(this.displayMode)) {\n throw new Error(`Unknown task display mode \"${this.displayMode}\"`);\n }\n }\n\n initializeAnalysisActivitiesListSortable() {\n initializeAnalysisActivitiesListSortable.call(this);\n }\n\n toggleVisibleMetaDataField() {\n switch (this.visibleMetaDataField) {\n case \"creationTime\":\n this.visibleMetaDataField = \"modificationTime\";\n break;\n case \"modificationTime\":\n this.visibleMetaDataField = \"creationTime\";\n break;\n default:\n this.visibleMetaDataField = \"creationTime\";\n }\n }\n\n async getAnalysisActivitiesByTask(taskKey) {\n this.isLoadingData = true;\n let analysisActivitiesData;\n try {\n analysisActivitiesData = \n await this.activityService.getActivitiesByTask({ taskKey });\n } catch(error) {\n console.warn(`Error getting analysis activities by task \"${taskKey}\"`, \n error);\n analysisActivitiesData = [];\n }\n this.isLoadingData = false;\n return analysisActivitiesData;\n }\n\n async createTaskAnalysisActivity() {\n const createTaskAnalysisActivityDialogOpenResult = \n await this.dialogService.open({\n viewModel: CreateAnalysisActivity,\n model: { taskActivityData: this.taskActivityData },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const createTaskAnalysisActivityDialogCloseResult =\n await createTaskAnalysisActivityDialogOpenResult.closeResult;\n if (createTaskAnalysisActivityDialogCloseResult.wasCancelled) {\n console.info(`User canceled the creation of a new task analysis activity`);\n return;\n }\n const {\n output: createAnalysisActivityDialogOutputData = null\n } = createTaskAnalysisActivityDialogCloseResult;\n const {\n taskActivityData: updatedTaskActivityData = null\n } = createAnalysisActivityDialogOutputData || {};\n if (updatedTaskActivityData) {\n this.publishTaskActivityDataChangedEvent({\n taskActivityData: updatedTaskActivityData\n });\n\n this.notificationService.showUINotification({\n message: \"notifications:analysisCreated\",\n status: \"success\",\n group: \"private\"\n });\n } else {\n this.notificationService.showUINotification({\n message: \"notifications:analysisCreationError\",\n status: \"failure\",\n group: \"private\"\n });\n }\n }\n\n async openTaskActivity() {\n await this.router.navigateToRoute(\"activity\", {\n activityKey: this.taskActivityKey,\n activitiesIndex: this.activitiesIndex,\n taskAnalysisActivityKey: \"\"\n });\n }\n\n async openTaskAnalysisActivity(taskAnalysisActivityIndex) {\n const taskAnalysisActivityData = \n this.analysisActivitiesData.at(taskAnalysisActivityIndex) || null;\n if (taskAnalysisActivityData) {\n const { \n key: taskAnalysisActivityKey = \"\" \n } = taskAnalysisActivityData || {};\n await this.router.navigateToRoute(\"activity\", {\n activityKey: this.taskActivityKey,\n activitiesIndex: this.activitiesIndex,\n taskAnalysisActivityKey\n });\n } else {\n console.warn(`Could not open task analysis activity ` +\n `at index ${taskAnalysisActivityIndex} ` +\n `of task activity \"${this.taskActivityKey}\"`);\n }\n }\n\n async deleteTaskActivity() {\n return await deleteTaskActivity.call(this);\n }\n\n async moveActivity(...args) {\n return await moveActivity.apply(this, args);\n }\n\n async deleteTaskAnalysisActivity(taskAnalysisActivityIndex) {\n await deleteTaskAnalysisActivity.call(this, taskAnalysisActivityIndex);\n }\n\n async toggleIsTaskActivityOpen() {\n this.isTaskActivityOpen = !this.isTaskActivityOpen;\n this.initializeAnalysisActivitiesListSortable();\n this.userService.conditionallyExtendSession(); // do not await\n await this.activityService.setTaskActivityMetaDataByKey({\n taskActivityKey: this.taskActivityKey,\n taskActivityMetaData: {\n isOpen: this.isTaskActivityOpen\n }\n })\n }\n\n\n // Event publishers\n publishTaskActivityDataChangedEvent(eventData) {\n this.eventService.publish({\n eventName: \"taskActivityDataChanged\",\n eventData: {\n taskActivityData: this.taskActivityData, // overridden by eventData \n activitiesIndex: this.activitiesIndex,\n ...(eventData || {})\n }\n });\n }\n\n publishDeleteActivityEvent(eventData) {\n this.eventService.publish({\n eventName: \"deleteActivity\",\n eventData: {\n activityKey: this.taskActivityKey,\n ...(eventData || {})\n }\n });\n }\n\n}\n","// Define the \"addAnalysisActivityFromActivitiesToTaskActivity\"\n// task-activity element method\n\n// Import utility modules\nimport { pickProperties } from \"utilities/object\";\nimport { typeOf } from \"utilities/etc\";\n\n// Define internal parameters\nconst updateTaskFields = [ \"title\", \"description\", \"localeCode\" ];\n\n\n// addAnalysisActivityFromActivitiesToTaskActivity: async\n// returns a promise which resolves with a boolean indicating whether the\n// analysis activity located at the specified index of the activities'\n// list has been moved to the specified index of the specified task\n// activity (by key)\nexport async function addAnalysisActivityFromActivitiesToTaskActivity({\n analysisActivityIndex = -1,\n taskAnalysisActivityIndex = -1,\n taskActivityKey = \"\"\n}) {\n if (typeOf(analysisActivityIndex) !== \"number\" || \n analysisActivityIndex < 0) {\n throw new Error(`Parameter \"analysisActivityIndex\" should be ` +\n `a non-negative index`);\n } else if (typeOf(taskAnalysisActivityIndex) !== \"number\" ||\n taskAnalysisActivityIndex < 0) {\n throw new Error(`Parameter \"taskAnalysisActivityIndex\" should be ` +\n `a non-negative index`);\n } else if (typeOf(taskActivityKey) !== \"string\" || !taskActivityKey) {\n throw new Error(`Parameter \"taskActivityKey\" should be a key string`);\n } else if(!this.activityService) {\n throw new Error(`Missing required \"activity\" service`);\n } else if(!this.notificationService) {\n throw new Error(`Missing required \"notification\" service`);\n } else if(!this.getAnalysisActivitiesByTask) {\n throw new Error(`Missing required \"getAnalysisActivitiesByTask\" method`);\n }\n\n const analysisActivityData = \n this.activitiesData.at(analysisActivityIndex) || null;\n const { key: analysisActivityKey = \"\" } = analysisActivityData || {};\n if (!analysisActivityKey) {\n console.warn(`Could not find analysis activity ` +\n `at index ${analysisActivityIndex}`);\n return false;\n }\n\n const newTaskAnalysesActivitiesKeys = this.taskData.activities\n .map(({ key: analysisActivityKey = \"\" }) => analysisActivityKey);\n newTaskAnalysesActivitiesKeys\n .splice(taskAnalysisActivityIndex, 0, analysisActivityKey);\n const updateTaskActivityData = {\n taskData: pickProperties(this.taskData, updateTaskFields),\n activityKeys: newTaskAnalysesActivitiesKeys\n };\n try {\n this.taskActivityData = await this.activityService.updateTaskActivity({ \n taskActivityKey, \n updateTaskActivityData \n });\n } catch(error) {\n console.warn(`Error moving analysis activity \"${analysisActivityKey}\" ` +\n `from activities[${analysisActivityIndex}] ` +\n `to task activity \"${taskActivityKey}[${taskAnalysisActivityIndex}]\"`,\n error);\n return false;\n }\n\n // Reload task activities\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(this.taskKey);\n\n // Display console message\n console.info(`Moved analysis activity \"${analysisActivityKey}\" ` +\n `from activities[${analysisActivityIndex}] ` +\n `to task activity \"${taskActivityKey}[${taskAnalysisActivityIndex}]\"`);\n\n // Display notification message\n this.notificationService.showUINotification({\n message: \"notifications:analysisMoved\",\n status: \"success\",\n group: \"private\"\n });\n\n return true;\n}\n","// Define the \"addAnalysisActivityFromTaskActivityToTaskActivity\"\n// task-activity element method\n\n// Import utility modules\nimport { pickProperties } from \"utilities/object\";\nimport { typeOf } from \"utilities/etc\";\n\n// Define internal parameters\nconst updateTaskFields = [ \"title\", \"description\", \"localeCode\" ];\n\n\n// addAnalysisActivityFromTaskActivityToTaskActivity: async\n// returns a promise which resolves with a boolean indicating whether the\n// analysis activity located at the specified source index of the\n// specified source task has been added to the specified destination index\n// of the specified destination task\nexport async function addAnalysisActivityFromTaskActivityToTaskActivity({\n srcTaskActivityKey = \"\",\n srcTaskAnalysisActivityIndex = -1,\n dstTaskActivityKey = \"\",\n dstTaskAnalysisActivityIndex = -1\n}) {\n if (typeOf(srcTaskActivityKey) !== \"string\" || !srcTaskActivityKey) {\n throw new Error(`Parameter \"srcTaskActivityKey\" should be a key string`);\n } else if (typeOf(srcTaskAnalysisActivityIndex) !== \"number\" ||\n srcTaskAnalysisActivityIndex < 0) {\n throw new Error(`Parameter \"srcTaskAnalysisActivityIndex\" should be ` +\n `an index`);\n } else if (typeOf(dstTaskActivityKey) !== \"string\" || !dstTaskActivityKey) {\n throw new Error(`Parameter \"dstTaskActivityKey\" should be a key string`);\n } else if (typeOf(dstTaskAnalysisActivityIndex) !== \"number\" ||\n dstTaskAnalysisActivityIndex < 0) {\n throw new Error(`Parameter \"dstTaskAnalysisActivityIndex\" should be ` +\n `an index`);\n } else if(!this.activityService) {\n throw new Error(`Missing required \"activity\" service`);\n } else if(!this.notificationService) {\n throw new Error(`Missing required \"notification\" service`);\n } else if(!this.getAnalysisActivitiesByTask) {\n throw new Error(`Missing required \"getAnalysisActivitiesByTask\" method`);\n }\n\n const srcTaskActivityData = await this.activityService.getActivityItemByKey({\n activityKey: srcTaskActivityKey\n });\n if (!srcTaskActivityData) {\n console.error(`Could not find source task activity \"${srcTaskActivityKey}\"`);\n return false;\n }\n const { key: srcAnalysisActivityKey = \"\" } =\n srcTaskActivityData.task.activities[srcTaskAnalysisActivityIndex];\n\n const newDstTaskActivitiesKeys = this.taskData.activities\n .map(({ key: analysisActivityKey }) => analysisActivityKey);\n newDstTaskActivitiesKeys\n .splice(dstTaskAnalysisActivityIndex, 0, srcAnalysisActivityKey);\n const taskActivityKey = dstTaskActivityKey;\n const updateTaskActivityData = {\n taskData: pickProperties(this.taskData, updateTaskFields),\n activityKeys: newDstTaskActivitiesKeys\n };\n try {\n this.taskActivityData = await this.activityService\n .updateTaskActivity({ taskActivityKey, updateTaskActivityData });\n } catch(error) {\n console.warn(`Error adding analysis activity \"${srcAnalysisActivityKey}\" ` +\n `from task activity ` +\n `\"${srcTaskActivityKey}[${srcTaskAnalysisActivityIndex}]\" ` +\n `to task activity ` +\n `\"${dstTaskActivityKey}[${dstTaskAnalysisActivityIndex}]\"`, error);\n return false;\n }\n\n // Reload task activities\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(this.taskKey);\n\n // Display console message\n console.info(`Added analysis activity \"${srcAnalysisActivityKey}\" ` +\n `from task activity ` +\n `\"${srcTaskActivityKey}[${srcTaskAnalysisActivityIndex}]\" ` +\n `to task activity ` +\n `\"${dstTaskActivityKey}[${dstTaskAnalysisActivityIndex}]\"`);\n\n // Display notification message\n this.notificationService.showUINotification({\n message: \"notifications:analysisMoved\",\n status: \"success\",\n group: \"private\"\n });\n\n return true;\n}\n","// Define the \"deleteTaskActivity\" element method\n\n// Import dialog modules\nimport {\n ConfirmDeleteTaskActivity\n} from \"dialogs/confirm-delete-task-activity\";\n\n\n// deleteTaskActivity: async\n// returns a promise which resolves after the user has confirmed the\n// intention to delete the current task activity and this has been\n// deleted from the server/index\nexport async function deleteTaskActivity() {\n if (!this.dialogService) {\n throw new Error(`Missing required \"dialog\" service`);\n } else if (!this.activityService) {\n throw new Error(`Missing required \"activity\" service`);\n } else if (!this.publishDeleteActivityEvent) {\n throw new Error(`Missing required \"publishDeleteActivityEvent\" method`)\n }\n\n // Show confirm dialog\n const confirmDeleteTaskDialogOpenResult = await this.dialogService.open({\n viewModel: ConfirmDeleteTaskActivity,\n model: { taskData: this.taskData },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const confirmDeleteTaskDialogCloseResult =\n await confirmDeleteTaskDialogOpenResult.closeResult;\n if (confirmDeleteTaskDialogCloseResult.wasCancelled) {\n console.debug(`Canceled confirm delete task activity dialog`);\n return;\n }\n\n // Delete task activity\n try {\n await this.activityService.deleteTaskActivity({\n taskActivityKey: this.taskActivityKey\n });\n } catch(error) {\n console.warn(`Error deleting task activity ` +\n `\"${this.taskActivityKey}\"`, error);\n return;\n }\n\n // Publish delete activity event\n this.publishDeleteActivityEvent();\n}\n","// Define the \"deleteTaskAnalysisActivity\" element method\n\n// Import utility modules\nimport { typeOf } from \"utilities/etc\";\n\n// Import dialog modules\nimport {\n ConfirmDeleteTaskAnalysisActivity\n} from \"dialogs/confirm-delete-task-analysis-activity\";\n\n\n// deleteTaskAnalysisActivity: async\n// returns a promise which resolves with the updated task activity data\n// after the specified analysis activity (by index) has been deleted from\n// the current task\nexport async function deleteTaskAnalysisActivity(\n taskAnalysisActivityIndex\n) {\n if (typeOf(taskAnalysisActivityIndex) !== \"number\") {\n throw new Error(`Parameter \"taskAnalysisActivityIndex\" should be an integer`);\n } else if(!this.activityService) {\n throw new Error(`Missing required \"activity\" service`);\n } else if(!this.dialogService) {\n throw new Error(`Missing required \"dialog\" service`);\n } else if(!this.notificationService) {\n throw new Error(`Missing required \"notification\" service`);\n } else if(!this.publishTaskActivityDataChangedEvent) {\n throw new Error(`Missing required \"publishTaskActivityDataChangedEvent\" ` +\n `method`);\n }\n\n const taskAnalysisActivityData = \n this.analysisActivitiesData.at(taskAnalysisActivityIndex) || null;\n const { key: taskAnalysisActivityKey = \"\" } = taskAnalysisActivityData || {};\n if (!taskAnalysisActivityData) {\n console.warn(`No analysis activity at index ${taskAnalysisActivityIndex} ` +\n `of task activity \"${this.taskActivityKey}\"`);\n return this.taskActivityData;\n }\n const { analysis: analysisData = null } = taskAnalysisActivityData || {};\n\n // Open confirm deletion dialog\n const confirmDeleteTaskAnalysisDialogOpenResult =\n await this.dialogService.open({\n viewModel: ConfirmDeleteTaskAnalysisActivity,\n model: { \n analysisData, \n taskData: this.taskData \n },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const confirmDeleteTaskAnalysisDialogCloseResult =\n await confirmDeleteTaskAnalysisDialogOpenResult.closeResult;\n if (confirmDeleteTaskAnalysisDialogCloseResult.wasCancelled) {\n console.info(`User canceled the deletion of analysis activity ` +\n `\"${taskAnalysisActivityKey}\" from task activity ` +\n `\"${this.taskActivityKey}\"`);\n return this.taskActivityData;\n }\n\n // Delete task analysis activity\n try {\n await this.activityService.deleteTaskAnalysisActivity({\n taskActivityKey: this.taskActivityKey,\n analysisActivityKey: taskAnalysisActivityKey\n });\n } catch(error) {\n console.error(`Error while deleting analysis activity ` +\n `\"${taskAnalysisActivityKey}\" from task activity ` +\n `\"${this.taskActivityKey}\"`);\n console.error(error);\n return this.taskActivityData;\n }\n console.debug(`Deleted analysis activity \"${taskAnalysisActivityKey}\" ` +\n `from task activity \"${this.taskActivityKey}\"`);\n\n // Get updated task activity data\n const updatedTaskActivityData = \n await this.activityService.getActivityItemByKey({\n activityKey: this.taskActivityKey, \n fetchFromIndex: false \n });\n if (!updatedTaskActivityData) {\n console.warn(`Could not get updated data for task activity ` +\n `\"${this.taskActivityKey}\"`);\n return this.taskActivityData;\n }\n\n this.publishTaskActivityDataChangedEvent({\n taskActivityData: updatedTaskActivityData\n });\n\n this.notificationService.showUINotification({\n message: \"notifications:analysisDeleted\",\n status: \"success\",\n group: \"private\"\n });\n\n return updatedTaskActivityData;\n}\n","// Define the \"initializeAnalysisActivitiesListSortable\" element method\n\n// Import library modules\nimport Sortable from \"sortablejs\";\n\n// Import utility modules\nimport { removeElement } from \"utilities/dom\";\n\n\n// initializeAnalysisActivitiesListSortable: sync\n// initializes the activities' list sortable using sortablejs\nexport function initializeAnalysisActivitiesListSortable() {\n if (!this.analysisActivitiesListSortable &&\n this.analysisActivitiesListElement) {\n this.analysisActivitiesListSortable =\n new Sortable(this.analysisActivitiesListElement, {\n group: \"activities\",\n direction: \"vertical\",\n swapThreshold: 0.75,\n fallbackOnBody: true, // recommended for nested sortables\n animation: 150,\n easing: \"cubic-bezier(1, 0, 0, 1)\",\n draggable: \".ps-draggable-item\",\n handle: \".ps-draggable-handle\",\n ghostClass: \"ps-draggable-ghost\",\n dragClass: \"ps-draggable-drag\",\n onAdd: handleOnAddEvent.bind(this),\n onRemove: handleOnRemoveEvent.bind(this),\n onUpdate: handleOnUpdateEvent.bind(this)\n });\n }\n}\n\nasync function handleOnAddEvent({ // item dropped in a list from another list\n item: addedElement,\n from: { id: srcGroupId },\n to: { id: dstGroupId },\n oldIndex: srcGroupIndex,\n newIndex: dstGroupIndex\n}) {\n await this.moveActivity({\n eventName: \"add\",\n srcGroupId,\n srcGroupIndex,\n dstGroupId,\n dstGroupIndex\n });\n removeElement(addedElement);\n}\n\nasync function handleOnRemoveEvent({ // item removed from a list to another list\n from: { id: srcGroupId },\n to: { id: dstGroupId },\n oldIndex: srcGroupIndex,\n newIndex: dstGroupIndex\n}) {\n await this.moveActivity({\n eventName: \"remove\",\n srcGroupId,\n srcGroupIndex,\n dstGroupId,\n dstGroupIndex\n });\n}\n\nasync function handleOnUpdateEvent({ // item changed position within list\n item: updatedElement,\n from: { id: srcGroupId },\n to: { id: dstGroupId },\n oldIndex: srcGroupIndex,\n newIndex: dstGroupIndex\n}) {\n await this.moveActivity({\n eventName: \"update\",\n srcGroupId,\n srcGroupIndex,\n dstGroupId,\n dstGroupIndex\n });\n removeElement(updatedElement);\n}\n","// Define the \"moveActivity\" element method\n\n// Import method modules\nimport {\n addAnalysisActivityFromActivitiesToTaskActivity\n} from \"components/private/task-activity-item/add-analysis-activity-from-activities-to-task-activity\";\nimport {\n addAnalysisActivityFromTaskActivityToTaskActivity\n} from \"components/private/task-activity-item/add-analysis-activity-from-task-activity-to-task-activity\";\nimport {\n removeAnalysisActivityFromTaskActivity\n} from \"components/private/task-activity-item/remove-analysis-activity-from-task-activity\";\nimport {\n moveAnalysisActivityWithinTaskActivity\n} from \"components/private/task-activity-item/move-analysis-activity-within-task-activity\";\n\n\n// moveActivity: async\n// returns a promise which resolves with a boolean indicating whether an\n// analysis activity has been successfully moved between the specified\n// source/destination groups/indices\nexport async function moveActivity({\n eventName,\n srcGroupId,\n srcGroupIndex,\n dstGroupId,\n dstGroupIndex\n}) {\n this.userService.conditionallyExtendSession(); // do not await\n\n const [ srcGroupName, srcEntityKey ] = srcGroupId.split(\"/\");\n const [ dstGroupName, dstEntityKey ] = dstGroupId.split(\"/\");\n switch (eventName) {\n case \"add\": // add analysis activity\n switch (srcGroupName) {\n case \"activities\": // from activities\n return await addAnalysisActivityFromActivitiesToTaskActivity\n .call(this, {\n analysisActivityIndex: srcGroupIndex,\n taskAnalysisActivityIndex: dstGroupIndex,\n taskActivityKey: dstEntityKey\n });\n case \"taskActivity\": // from other task activity\n return await addAnalysisActivityFromTaskActivityToTaskActivity\n .call(this, {\n srcTaskAnalysisActivityIndex: srcGroupIndex,\n srcTaskActivityKey: srcEntityKey,\n dstTaskAnalysisActivityIndex: dstGroupIndex,\n dstTaskActivityKey: dstEntityKey\n });\n default: // should never happen\n console.warn(`Unexpected drag and drop source group ` +\n `\"${srcGroupName}\" upon adding analysis activity ` +\n `to task activity`);\n return false;\n }\n case \"remove\": // remove analysis activity\n switch (dstGroupName) {\n case \"activities\": // towards activities\n case \"taskActivity\": // towards other task activity\n return await removeAnalysisActivityFromTaskActivity\n .call(this, {\n taskAnalysisActivityIndex: srcGroupIndex,\n taskActivityKey: srcEntityKey\n });\n default: // should never happen\n console.warn(`Unexpected drag and drop destination group ` +\n `\"${dstGroupName}\" upon removing analysis activity ` +\n `from task activity`);\n return false;\n }\n case \"update\": // move analysis activity\n if (srcGroupName === \"taskActivity\" && dstGroupName === \"taskActivity\") {\n return await moveAnalysisActivityWithinTaskActivity\n .call(this, {\n srcTaskAnalysisActivityIndex: srcGroupIndex,\n dstTaskAnalysisActivityIndex: dstGroupIndex,\n taskActivityKey: srcEntityKey\n });\n }\n return false;\n }\n}\n","// Define the \"moveAnalysisActivityWithinTaskActivity\" element method\n\n// Import utility modules\nimport { pickProperties } from \"utilities/object\";\nimport { moveItem } from \"utilities/array\";\nimport { typeOf } from \"utilities/etc\";\n\n\n// Define internal parameters\nconst updateTaskFields = [ \"title\", \"description\", \"localeCode\" ];\n\n\n// moveAnalysisActivityWithinTaskActivity: async\n// returns a promise which resolves with a boolean indicating whether the\n// analysis activity located at the specified (old) index of the specified\n// task has been moved to the specified (new) index\nexport async function moveAnalysisActivityWithinTaskActivity({\n srcTaskAnalysisActivityIndex = -1,\n dstTaskAnalysisActivityIndex = -1,\n taskActivityKey = \"\"\n}) {\n if (typeOf(srcTaskAnalysisActivityIndex) !== \"number\" ||\n srcTaskAnalysisActivityIndex < 0) {\n throw new Error(`Parameter \"srcTaskAnalysisActivityIndex\" should be ` +\n `a non-negative index`);\n } else if (typeOf(dstTaskAnalysisActivityIndex) !== \"number\" ||\n dstTaskAnalysisActivityIndex < 0) {\n throw new Error(`Parameter \"dstTaskAnalysisActivityIndex\" should be ` +\n `a non-negative index`);\n } else if (typeOf(taskActivityKey) !== \"string\") {\n throw new Error(`Parameter \"taskActivityKey\" should be a string`);\n } else if(!this.activityService) {\n throw new Error(`Missing required \"activity\" service`);\n } else if(!this.notificationService) {\n throw new Error(`Missing required \"notification\" service`);\n } else if(!this.getAnalysisActivitiesByTask) {\n throw new Error(`Missing required \"getAnalysisActivitiesByTask\" method`);\n } else if(!this.publishTaskActivityDataChangedEvent) {\n throw new Error(`Missing required \"publishTaskActivityDataChangedEvent\" ` +\n `method`);\n }\n const { key: analysisActivityKey } =\n this.taskData.activities[srcTaskAnalysisActivityIndex];\n const taskAnalysesActivitiesKeys = this.taskData.activities\n .map(({ key: analysisActivityKey }) => analysisActivityKey);\n const newAnalysesActivitiesKeys = moveItem(\n taskAnalysesActivitiesKeys,\n srcTaskAnalysisActivityIndex,\n dstTaskAnalysisActivityIndex\n );\n const updateTaskActivityData = {\n taskData: pickProperties(this.taskData, updateTaskFields),\n activityKeys: newAnalysesActivitiesKeys\n };\n try {\n this.taskActivityData = await this.activityService.updateTaskActivity({ \n taskActivityKey, \n updateTaskActivityData \n });\n } catch(error) {\n console.warn(`Error moving analysis activity \"${analysisActivityKey}\" ` +\n `within task \"${taskActivityKey}` +\n `[${srcTaskAnalysisActivityIndex} -> ${dstTaskAnalysisActivityIndex}]\"`, \n error);\n return false;\n }\n\n // Reload task activities\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(this.taskKey);\n\n this.publishTaskActivityDataChangedEvent({\n taskActivityData: this.taskActivityData\n });\n\n // Display console message\n console.info(`Moved analysis activity \"${analysisActivityKey}\" ` +\n `within task \"${taskActivityKey}` +\n `[${srcTaskAnalysisActivityIndex} -> ${dstTaskAnalysisActivityIndex}]\"`);\n\n // Display notification message\n this.notificationService.showUINotification({\n message: \"notifications:analysisMoved\",\n status: \"success\",\n group: \"private\"\n });\n\n return true;\n}\n","// Define the \"removeAnalysisActivityFromTaskActivity\" task-activity\n// element method\n\n// Import utility modules\nimport { pickProperties } from \"utilities/object\";\nimport { typeOf } from \"utilities/etc\";\n\n// Define internal parameters\nconst updateTaskFields = [ \"title\", \"description\", \"localeCode\" ];\n\n\n// removeAnalysisActivityFromTaskActivity: async\n// returns a promise which resolves with a boolean indicating whether the\n// analysis activity located at the specified index of the specified task\n// has been removed\nexport async function removeAnalysisActivityFromTaskActivity({\n taskAnalysisActivityIndex = -1,\n taskActivityKey = \"\"\n}) {\n if (typeOf(taskAnalysisActivityIndex) !== \"number\" || \n taskAnalysisActivityIndex < 0) {\n throw new Error(`Parameter \"taskAnalysisActivityIndex\" should be ` +\n `a non-negative index`);\n } else if (typeOf(taskActivityKey) !== \"string\" || !taskActivityKey) {\n throw new Error(`Parameter \"taskActivityKey\" should be a key string`);\n } else if(!this.activityService) {\n throw new Error(`Missing required \"activity\" service`);\n } else if(!this.getAnalysisActivitiesByTask) {\n throw new Error(`Missing required \"getAnalysisActivitiesByTask\" method`);\n }\n\n const { key: analysisActivityKey = \"\" } =\n this.taskData.activities[taskAnalysisActivityIndex];\n\n const newTaskActivitiesKeys = this.taskData.activities\n .map(({ key: analysisActivityKey }) => analysisActivityKey);\n newTaskActivitiesKeys.splice(taskAnalysisActivityIndex, 1);\n const updateTaskActivityData = {\n taskData: pickProperties(this.taskData, updateTaskFields),\n activityKeys: newTaskActivitiesKeys\n };\n try {\n this.taskActivityData = await this.activityService.updateTaskActivity({ \n taskActivityKey, \n updateTaskActivityData \n });\n } catch(error) {\n console.warn(`Error removing analysis activity \"${analysisActivityKey}\" ` +\n `from task \"${taskActivityKey}[${taskAnalysisActivityIndex}]`, error);\n return false;\n }\n\n // Reload task activities\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(this.taskKey);\n\n // Display console message\n console.info(`Removed analysis activity \"${analysisActivityKey}\" ` +\n `from task \"${taskActivityKey}[${taskAnalysisActivityIndex}]`);\n\n return true;\n}\n","// Define the view-model for the \"task-activity\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { Router } from \"aurelia-router\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { typeOf } from \"utilities/etc\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { runModes } from \"parameters/application\";\n\n// Import service modules\nimport ActivityService from \"services/activity\";\nimport EventService from \"services/event\";\nimport NotificationService from \"services/notification\";\nimport TaskService from \"services/task\";\nimport UserService from \"services/user\";\n\n// Import dialog modules\nimport { CreateAnalysisActivity } from \"dialogs/create-analysis-activity\";\n\n// Import method modules\nimport {\n initializeAnalysisActivitiesListSortable\n} from \"components/private/task-activity/initialize-analysis-activities-list-sortable\";\nimport {\n moveAnalysisActivityWithinTaskActivity\n} from \"components/private/task-activity-item/move-analysis-activity-within-task-activity\";\nimport {\n deleteTaskAnalysisActivity\n} from \"components/private/task-activity-item/delete-task-analysis-activity\";\n\n// Define internal parameters\nconst scrollOptions = {\n behavior: \"smooth\", // smooth|instant|auto\n block: \"center\" // start|center|end|nearest\n};\nconst eventsData = [];\n\n\n// Export the \"TaskActivity\" class\n@inject(\n ActivityService,\n DialogService,\n EventService,\n NotificationService,\n Router,\n TaskService,\n UserService\n)\nexport class TaskActivity {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) taskActivityData = null;\n @bindable({ defaultBindingMode: bindingMode.twoWay }) taskDataModified = false;\n @bindable({ defaultBindingMode: bindingMode.twoWay }) taskDataValid = true;\n @bindable({ defaultBindingMode: bindingMode.toView }) activitiesIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) displayMode = \"list\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n analysisActivitiesData = [];\n analysisActivitiesListSortable = null;\n openedAnalysisActivitiesFlags = [];\n showScrollToTopIcon = false;\n showScrollToBottomIcon = true;\n eventsSubscriptions = [];\n i18nParams = i18nParams;\n isLoadingData = false;\n\n constructor(\n activityService,\n dialogService,\n eventService,\n notificationService,\n router,\n taskService,\n userService\n ) {\n this.activityService = activityService;\n this.dialogService = dialogService;\n this.eventService = eventService;\n this.notificationService = notificationService;\n this.router = router;\n this.taskService = taskService;\n this.userService = userService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.validateBoundAttributes();\n\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"taskActivity\",\n entityKey: this.taskActivityKey,\n eventService: this.eventService,\n eventsData\n });\n\n // Set last opened activity id \n await this.activityService.setLastOpenedActivityId({\n lastOpenedActivityId: `taskActivity=${this.taskActivityKey}`\n });\n\n // Load task analysis activities\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(this.taskKey);\n }\n\n attached() {\n this.initializeAnalysisActivitiesListSortable();\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"taskActivityData.key\")\n get taskActivityKey() {\n const { key: taskActivityKey } = this.taskActivityData || {};\n return taskActivityKey;\n }\n\n @computedFrom(\"taskActivityData.task\")\n get taskData() {\n const { task: taskData = null } = this.taskActivityData || {};\n return taskData;\n }\n\n @computedFrom(\"taskData.key\")\n get taskKey() {\n const { key: taskKey } = this.taskData || {};\n return taskKey;\n }\n\n @computedFrom(\"analysisActivitiesData\")\n get analysisActivitiesCount() {\n return this.analysisActivitiesData.length;\n }\n\n\n // Core methods\n validateBoundAttributes() {\n if (typeOf(this.activitiesIndex) !== \"number\" || this.activitiesIndex < -1) {\n throw new Error(`Bound attribute \"activitiesIndex\" should be either ` +\n `minus one or a non-negative index`);\n }\n if (!runModes.includes(this.runMode)) {\n throw new Error(`Invalid run mode \"${this.runMode}\"`);\n }\n if (![\"list\", \"text\"].includes(this.displayMode)) {\n throw new Error(`Unknown displayMode \"${this.displayMode}\"`);\n }\n }\n\n toggleHelpCanvas() {\n this.userService.conditionallyExtendSession(); // do not await\n }\n\n scrollToTop() {\n this.showScrollToTopIcon = false;\n this.userService.conditionallyExtendSession(); // do not await\n if (this.scrollToTopElement) {\n this.scrollToTopElement.scrollIntoView(scrollOptions);\n }\n }\n topElementScrolledIntoView() {\n this.showScrollToTopIcon = false;\n }\n topElementScrolledOutOfView() {\n this.showScrollToTopIcon = true;\n }\n\n scrollToBottom() {\n this.showScrollToBottomIcon = false;\n this.userService.conditionallyExtendSession(); // do not await\n if (this.scrollToBottomElement) {\n this.scrollToBottomElement.scrollIntoView(scrollOptions);\n }\n }\n bottomElementScrolledIntoView() {\n this.showScrollToBottomIcon = false;\n }\n bottomElementScrolledOutOfView() {\n this.showScrollToBottomIcon = true;\n }\n\n initializeAnalysisActivitiesListSortable() {\n initializeAnalysisActivitiesListSortable.call(this);\n }\n\n async getAnalysisActivitiesByTask(taskKey) {\n this.isLoadingData = true;\n let analysisActivitiesData;\n try {\n analysisActivitiesData = \n await this.activityService.getActivitiesByTask({ taskKey });\n } catch(error) {\n console.warn(`Error getting analysis activities by task \"${taskKey}\"`, \n error);\n analysisActivitiesData = [];\n }\n this.isLoadingData = false;\n return analysisActivitiesData;\n }\n\n async createTaskAnalysisActivity() {\n const createTaskAnalysisActivityDialogOpenResult = \n await this.dialogService.open({\n viewModel: CreateAnalysisActivity,\n model: { taskActivityData: this.taskActivityData },\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const createTaskAnalysisActivityDialogCloseResult =\n await createTaskAnalysisActivityDialogOpenResult.closeResult;\n if (createTaskAnalysisActivityDialogCloseResult.wasCancelled) {\n console.info(`User canceled the creation of a new task analysis activity`);\n return;\n }\n const {\n output: createAnalysisDialogOutputData = null\n } = createTaskAnalysisActivityDialogCloseResult;\n const {\n taskActivityData: updatedTaskActivityData = null\n } = createAnalysisDialogOutputData || {};\n if (updatedTaskActivityData) {\n this.taskActivityData = updatedTaskActivityData;\n const { task: updatedTaskData = null } = updatedTaskActivityData || {};\n const { key: updatedTaskKey = \"\" } = updatedTaskData || {};\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(updatedTaskKey);\n this.publishTaskActivityDataChangedEvent({\n taskActivityData: updatedTaskActivityData\n });\n\n this.notificationService.showUINotification({\n message: \"notifications:analysisCreated\",\n status: \"success\",\n group: \"private\"\n });\n } else {\n this.notificationService.showUINotification({\n message: \"notifications:analysisCreationError\",\n status: \"failure\",\n group: \"private\"\n });\n }\n }\n\n openTaskAnalysisActivity(taskAnalysisActivityIndex) {\n const taskAnalysisActivityData =\n this.analysisActivitiesData.at(taskAnalysisActivityIndex) || null;\n if (taskAnalysisActivityData) {\n const { \n key: taskAnalysisActivityKey = \"\" \n } = taskAnalysisActivityData || {};\n this.router.navigateToRoute(\"activity\", {\n activityKey: this.taskActivityKey,\n activitiesIndex: this.activitiesIndex,\n taskAnalysisActivityKey\n });\n } else {\n console.warn(`Could not open task analysis activity ` +\n `at index ${taskAnalysisActivityIndex} ` +\n `of task activity \"${this.taskActivityKey}\"`);\n }\n }\n\n closeTaskActivity() {\n this.router.navigateBack();\n }\n\n async moveTaskAnalysisActivity({ oldIndex, newIndex }) {\n return await moveAnalysisActivityWithinTaskActivity.call(this, {\n srcTaskAnalysisActivityIndex: oldIndex,\n dstTaskAnalysisActivityIndex: newIndex,\n taskActivityKey: this.taskActivityKey\n });\n }\n\n async deleteTaskAnalysisActivity(taskAnalysisActivityIndex) {\n const updatedTaskActivityData = await deleteTaskAnalysisActivity\n .call(this, taskAnalysisActivityIndex);\n this.taskActivityData = updatedTaskActivityData;\n const { task: updatedTaskData = null } = updatedTaskActivityData || {};\n const { key: updatedTaskKey = \"\" } = updatedTaskData || {};\n this.analysisActivitiesData = \n await this.getAnalysisActivitiesByTask(updatedTaskKey);\n }\n\n toggleDisplayMode() {\n this.displayMode = this.displayMode === \"text\" ? \"list\" : \"text\";\n }\n\n\n // Event publishers\n publishTaskActivityDataChangedEvent(eventData) {\n this.eventService.publish({\n eventName: \"taskActivityDataChanged\",\n eventData: {\n taskActivityData: this.taskActivityData, // overridden by eventData \n activitiesIndex: this.activitiesIndex,\n ...(eventData || {})\n }\n });\n }\n\n}\n","// Define the \"initializeAnalysisActivitiesListSortable\" element method\n\n// Import library modules\nimport Sortable from \"sortablejs\";\n\n// initializeAnalysisActivitiesListSortable: sync\n// initializes the activities' list sortable using sortablejs\nexport function initializeAnalysisActivitiesListSortable() {\n if (!this.analysisActivitiesListSortable &&\n this.analysisActivitiesListElement) {\n this.analysisActivitiesListSortable =\n new Sortable(this.analysisActivitiesListElement, {\n group: \"activities\",\n direction: \"vertical\",\n swapThreshold: 0.75,\n fallbackOnBody: true, // recommended for nested sortables\n animation: 150,\n easing: \"cubic-bezier(1, 0, 0, 1)\",\n draggable: \".ps-draggable-item\",\n handle: \".ps-draggable-handle\",\n ghostClass: \"ps-draggable-ghost\",\n dragClass: \"ps-draggable-drag\",\n onUpdate: handleOnUpdateEvent.bind(this)\n });\n }\n}\n\n// onUpdate: async\nasync function handleOnUpdateEvent({\n oldIndex,\n newIndex\n}) {\n return await this.moveTaskAnalysisActivity({ oldIndex, newIndex });\n}\n","// Define the view-model for the \"user-credit\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom, inject } from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\n\n// Import class modules\nimport EventService from \"services/event\";\nimport UserService from \"services/user\";\n\n// Define internal parameters\nconst userCreditWarnThreshold = 50;\nconst userCreditDangerThreshold = 20;\nconst eventsData = [\n { name: \"userDataChanged\" }\n];\n\n\n// Export UserCredit class\n@inject(EventService, UserService)\nexport class UserCredit {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) iconFontSize = \"1em\";\n\n // Local attributes\n i18nParams = i18nParams;\n userDataChangedFlag = false;\n\n constructor(eventService, userService) {\n this.eventService = eventService;\n this.userService = userService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"userCredit\",\n eventService: this.eventService,\n eventsData\n });\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"userDataChangedFlag\", \"userService.isUserCreditBound\")\n get isUserCreditBound() {\n const { isUserCreditBound = true } = this.userService || {};\n return isUserCreditBound;\n }\n @computedFrom(\"isUserCreditBound\")\n get isUserCreditLocked() {\n return !this.isUserCreditBound;\n }\n\n @computedFrom(\"userDataChangedFlag\", \"userService.userCredit\")\n get userCredit() {\n const { userCredit = 0 } = this.userService || {};\n return userCredit;\n }\n\n @computedFrom(\"userCredit\")\n get textColorClass() {\n return this.userCredit < userCreditDangerThreshold ? \"uk-text-danger\" :\n this.userCredit < userCreditWarnThreshold ? \"uk-text-warning\" : \"\";\n }\n\n\n // Event handlers\n handleUserDataChangedEvent() {\n this.userDataChangedFlag = !this.userDataChangedFlag;\n }\n\n}\n","// Define the view-model for the \"user-dropdown\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\nimport { DialogService } from \"aurelia-dialog\";\nimport { Router } from \"aurelia-router\";\nimport { I18N } from \"aurelia-i18n\";\nimport UIkit from \"uikit\";\n\n// Import ulility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { computeDisplayName } from \"utilities/user\";\n\n// Import service modules\nimport EventService from \"services/event\";\nimport NotificationService from \"services/notification\";\nimport UserService from \"services/user\";\n\n// Import dialog modules\nimport { ConfirmLogOut } from \"dialogs/confirm-log-out\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { menuItemsData } from \"parameters/user\";\n\n// Define internal parameters\nconst eventsData = [\n { name: \"sessionClosing\" }\n];\n\n// Export UserDropdown class\n@inject(\n EventService,\n I18N,\n Router,\n DialogService,\n NotificationService,\n UserService\n)\nexport class UserDropdown {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) spanClasses = \"uk-text\";\n\n // Local attributes\n menuItemsData = menuItemsData;\n i18nParams = i18nParams;\n\n constructor(\n eventService,\n i18n,\n router,\n dialogService,\n notificationService,\n userService\n ) {\n this.eventService = eventService;\n this.i18n = i18n;\n this.router = router;\n this.dialogService = dialogService;\n this.notificationService = notificationService,\n this.userService = userService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"userDropdown\",\n eventService: this.eventService,\n eventsData\n });\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n // Getter and setter methods\n @computedFrom(\"userService.profileData\")\n get displayName() {\n const displayName = computeDisplayName({\n profileData: this.userService.profileData\n })\n return displayName || this.i18n.tr(\"main:unknown\");\n }\n\n @computedFrom(\"router.currentInstruction.config.name\")\n get currentRouteName() {\n const { config: { name = \"\" } = {} } = this.router.currentInstruction || {};\n return name;\n }\n\n\n // Core methods\n async itemSelected(itemName) {\n this.closeUserDropdown();\n switch (itemName) {\n case \"dashboard\":\n case \"activities\":\n case \"offers\":\n case \"settings\":\n case \"videoGuide\":\n case \"inviteUser\":\n this.userService.conditionallyExtendSession(); // do not await\n this.router.navigateToRoute(itemName);\n break;\n case \"logOut\":\n await this.closeUserSession();\n break;\n default:\n console.warn(`Unknown user dropdown item \"${itemName}\"`);\n }\n }\n\n closeUserDropdown() {\n if (this.userDropdownElement) {\n UIkit.dropdown(this.userDropdownElement).hide();\n }\n }\n\n async closeUserSession() {\n const confirmLogOutDialogOpenResult = await this.dialogService.open({\n viewModel: ConfirmLogOut,\n //keyboard: [\"Escape\"] // keys that close the dialog\n });\n const confirmLogOutDialogCloseResult =\n await confirmLogOutDialogOpenResult.closeResult;\n if (confirmLogOutDialogCloseResult.wasCancelled) {\n console.debug(`User canceled session closing`);\n return;\n }\n try {\n await this.userService.closeSession();\n } catch(error) {\n console.error(\"Error while closing user's session\", error);\n return;\n }\n this.notificationService.closeUINotifications(\"private\");\n this.notificationService.showUINotification({\n message: \"notifications:sessionClosed\",\n status: \"success\",\n group: \"public\"\n });\n }\n\n\n // Event handlers\n handleSessionClosingEvent() {\n this.closeUserDropdown();\n }\n\n}\n","// Define the view-model for the \"verb-inflection-item\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\nimport { I18N } from \"aurelia-i18n\";\n\n// import parameter modules\nimport { placeAdjectivesBeforeNounsRegExp } from \"parameters/regexp\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport UserService from \"services/user\";\n\n\n// Export the \"VerbInflectionItem\" class\n@inject(I18N, UserService)\nexport class VerbInflectionItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inflectionData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n placeAdjectivesBeforeNouns = false;\n\n constructor(i18n, userService) {\n this.i18n = i18n;\n this.userService = userService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.placeAdjectivesBeforeNouns =\n placeAdjectivesBeforeNounsRegExp.test(this.userService.uiLocaleCode);\n }\n\n\n // Getter and setter methods\n @computedFrom(\"inflectionData.key\")\n get inflectionKey() {\n const { key: inflectionKey = \"???\" } = this.inflectionData || {};\n return inflectionKey;\n }\n @computedFrom(\"inflectionData.cathegory\")\n get inflectionCathegory() {\n const { cathegory: inflectionCathegory = \"?\" } = this.inflectionData || {};\n return inflectionCathegory;\n }\n @computedFrom(\"inflectionData.conjugation\")\n get inflectionConjugation() {\n const {\n conjugation: inflectionConjugation = \"?\"\n } = this.inflectionData || {};\n return inflectionConjugation;\n }\n @computedFrom(\"inflectionData.form\")\n get inflectionForm() {\n const { form: inflectionForm = \"?\" } = this.inflectionData || {};\n return inflectionForm;\n }\n @computedFrom(\"inflectionData.variant\")\n get inflectionVariant() {\n const { variant: inflectionVariant = \"\" } = this.inflectionData || {};\n return inflectionVariant;\n }\n @computedFrom(\"inflectionConjugation\", \"placeAdjectivesBeforeNouns\")\n get inflectionConjugationString() {\n const i18nConjugationString = this.i18n.tr(\"main:conjugation\");\n if (this.placeAdjectivesBeforeNouns ||\n [ \"1st\", \"2nd\", \"3rd\", \"4th\" ].includes(this.inflectionConjugation)) {\n const i18nOrdinalConjugationString =\n this.i18n.tr(`enums:shortInflectionConjugation.` +\n `${this.inflectionConjugation}`);\n return `${i18nOrdinalConjugationString} ${i18nConjugationString}`;\n } else {\n return `${i18nConjugationString} ${this.inflectionConjugation}`;\n }\n }\n\n}\n","// Define the view-model for the \"verb-inflector-item\" component\n\n// Import library modules\nimport { bindable, bindingMode } from \"aurelia-framework\";\n\n\n// Export VerbInflectorItem class\nexport class VerbInflectorItem {\n\n // Attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inflectorData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n}\n","// Define the view-model for the \"verb-lemma-form\" component\n\n// Import library modules\nimport { inject, computedFrom, bindable, bindingMode } from \"aurelia-framework\";\nimport { Validator } from \"aurelia-validation\";\nimport { I18N } from \"aurelia-i18n\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { cyrb53 as computeHash } from \"utilities/hash\";\nimport { normalizeWords } from \"utilities/sentence\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport { clone } from \"utilities/etc\";\nimport { \n hasTonicAccents,\n removeTonicAccents \n} from \"utilities/latin\";\nimport {\n unsetProperties,\n toString\n} from \"utilities/object\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { \n processInputFieldChangeEventAfterMs,\n processInputFieldBlurEventAfterMs\n} from \"parameters/time\";\nimport {\n verbLemmaInputFormData as defaultVerbLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst isAnomalousRegExp = /^(sum|edo|fero|volo|eo|fio)$/;\nconst eventsData = [\n { name: \"verbParadigm0Changed\" },\n { name: \"verbParadigm1Changed\" },\n { name: \"verbParadigm2Changed\" },\n { name: \"verbParadigm3Changed\" },\n { name: \"verbParadigm4Changed\" },\n { name: \"verbIsTransitiveChanged\" },\n { name: \"verbIsIntransitiveChanged\" },\n { name: \"verbIsAnomalousChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export VerbLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class VerbLemmaForm {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.twoWay }) inElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n\n // Local attributes\n rawFormData = clone(defaultVerbLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n showParadigm0InputFieldHint = false;\n showParadigm1InputFieldHint = false;\n showParadigm2InputFieldHint = false;\n showParadigm3InputFieldHint = false;\n showParadigm4InputFieldHint = false;\n showIsAnomalousField = false;\n showLemmaDefinitions = false;\n validationErrorsData = [];\n i18nParams = i18nParams;\n\n constructor(i18n, validator, eventService) {\n this.i18n = i18n;\n this.validator = validator;\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"verbLemmaForm\",\n eventService: this.eventService,\n eventsData\n });\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"rawFormData.text\")\n get lemmaText() {\n const { text: lemmaText = \"\" } = this.rawFormData || {};\n return lemmaText;\n }\n @computedFrom(\"rawFormData.paradigm\")\n get lemmaParadigmItems() {\n const { paradigm: lemmaParadigmItems = [] } = this.rawFormData || {};\n return lemmaParadigmItems;\n }\n @computedFrom(\"lemmaParadigmItems\")\n get lemmaParadigmItemsAvailable() {\n return this.lemmaParadigmItems\n .some((lemmaParadigmItem = \"\") => lemmaParadigmItem !== \"\");\n }\n @computedFrom(\"rawFormData.degree\")\n get lemmaDegree() {\n const { degree: lemmaDegree = \"\" } = this.rawFormData || {};\n return lemmaDegree;\n }\n\n\n // Core methods\n initializeLemmaDataChanged() {\n this.lemmaDataDigest = this.computeLemmaDataDigest();\n this.oldLemmaDataDigest = this.lemmaDataDigest;\n this.lemmaDataChanged = false;\n }\n\n updateLemmaDataChanged() {\n this.lemmaDataDigest = this.computeLemmaDataDigest();\n this.lemmaDataChanged = this.lemmaDataDigest !== this.oldLemmaDataDigest;\n }\n conditionallyPublishLemmaDataChangedEvent() {\n this.updateLemmaDataChanged();\n if (this.lemmaDataChanged) {\n this.oldLemmaDataDigest = this.lemmaDataDigest;\n this.publishLemmaDataChangedEvent();\n }\n }\n\n updateLemmaData() {\n this.lemmaData = unsetProperties(this.rawFormData, [\"_schemaId\"]);\n }\n\n updateLemmaDataReady() {\n const lemmaTextReady = this.lemmaText !== \"\";\n const lemmaParadigmReady = this.lemmaParadigmItems\n .every((itemText = \"\", itemIndex) => {\n return itemText.length > 0 || itemIndex === 3;\n });\n const lemmaBooleansReady = this.rawFormData.isTransitive ||\n this.rawFormData.isIntransitive || \n this.rawFormData.isAnomalous;\n this.lemmaDataReady = \n lemmaTextReady && lemmaParadigmReady && lemmaBooleansReady;\n }\n\n computeLemmaDataDigest() {\n this.updateLemmaData();\n return computeHash(`lemma-${toString(this.lemmaData)}`);\n }\n\n async validateLemmaData() {\n this.validationErrorsData =\n await this.validator.validateObject(this.rawFormData);\n this.lemmaDataValid = this.validationErrorsData.length === 0;\n this.updateLemmaDataReady();\n }\n\n optimizeFormTextFieldsSpaces() {\n this.rawFormData = {\n ...this.rawFormData,\n text: normalizeWords(optimizeSpaces(\n (this.lemmaText || \"\").toLowerCase()\n )),\n paradigm: this.lemmaParadigmItems\n .map(lemmaParadigmItem => normalizeWords(optimizeSpaces(\n (lemmaParadigmItem || \"\").toLowerCase()\n )))\n }\n }\n\n\n // Event handlers\n // note1: automatically converting paradigm items of verbs to \n // lower-case because they cannot be capitalized\n // note2: replacing paradigm array with mutated clone because changing it\n // in-place with splice does not propagate through two-way binding\n async handleVerbParadigm0ChangedEvent({\n newValue: lemmaParadigmItem0 = \"\"\n }) {\n const paradigm = clone(this.rawFormData.paradigm);\n paradigm[0] = lemmaParadigmItem0;\n this.rawFormData.paradigm = paradigm;\n this.rawFormData.text = lemmaParadigmItem0;\n const plainLemmaParadigm0Text = removeTonicAccents(lemmaParadigmItem0);\n if (isAnomalousRegExp.test(plainLemmaParadigm0Text)) {\n this.showIsAnomalousField = true;\n this.rawFormData.isAnomalous = true;\n } else {\n this.showIsAnomalousField = false;\n this.rawFormData.isAnomalous = false;\n }\n this.showParadigm0InputFieldHint = lemmaParadigmItem0.length > 0 && \n !hasTonicAccents(lemmaParadigmItem0);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleVerbParadigm0BlurEvent() {\n this.optimizeFormTextFieldsSpaces();\n const plainLemmaParadigm0Text = removeTonicAccents(this.rawFormData.text);\n if (isAnomalousRegExp.test(plainLemmaParadigm0Text)) {\n this.showIsAnomalousField = true;\n this.rawFormData.isAnomalous = true;\n } else {\n this.showIsAnomalousField = false;\n this.rawFormData.isAnomalous = false;\n }\n const lemmaParadigmItem0 = this.lemmaParadigmItems.at(0) || \"\";\n this.showParadigm0InputFieldHint = lemmaParadigmItem0.length > 0 && \n !hasTonicAccents(lemmaParadigmItem0);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbParadigm1ChangedEvent({\n newValue: lemmaParadigmItem1 = \"\"\n }) {\n const paradigm = clone(this.rawFormData.paradigm);\n paradigm[1] = lemmaParadigmItem1;\n this.rawFormData.paradigm = paradigm;\n this.showParadigm1InputFieldHint = lemmaParadigmItem1.length > 0 && \n !hasTonicAccents(lemmaParadigmItem1);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleVerbParadigm1BlurEvent() {\n this.optimizeFormTextFieldsSpaces();\n const lemmaParadigmItem1 = this.lemmaParadigmItems.at(1) || \"\";\n this.showParadigm1InputFieldHint = lemmaParadigmItem1.length > 0 && \n !hasTonicAccents(lemmaParadigmItem1);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbParadigm2ChangedEvent({\n newValue: lemmaParadigmItem2 = \"\"\n }) {\n const paradigm = clone(this.rawFormData.paradigm);\n paradigm[2] = lemmaParadigmItem2;\n this.rawFormData.paradigm = paradigm;\n this.showParadigm2InputFieldHint = lemmaParadigmItem2.length > 0 && \n !hasTonicAccents(lemmaParadigmItem2);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleVerbParadigm2BlurEvent() {\n this.optimizeFormTextFieldsSpaces();\n const lemmaParadigmItem2 = this.lemmaParadigmItems.at(2) || \"\";\n this.showParadigm2InputFieldHint = lemmaParadigmItem2.length > 0 && \n !hasTonicAccents(lemmaParadigmItem2);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbParadigm3ChangedEvent({\n newValue: lemmaParadigmItem3 = \"\"\n }) {\n const paradigm = clone(this.rawFormData.paradigm);\n paradigm[3] = lemmaParadigmItem3;\n this.rawFormData.paradigm = paradigm;\n this.showParadigm3InputFieldHint = lemmaParadigmItem3.length > 0 && \n !hasTonicAccents(lemmaParadigmItem3);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleVerbParadigm3BlurEvent() {\n this.optimizeFormTextFieldsSpaces();\n const lemmaParadigmItem3 = this.lemmaParadigmItems.at(3) || \"\";\n this.showParadigm3InputFieldHint = lemmaParadigmItem3.length > 0 && \n !hasTonicAccents(lemmaParadigmItem3);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbParadigm4ChangedEvent({\n newValue: lemmaParadigmItem4 = \"\"\n }) {\n const paradigm = clone(this.rawFormData.paradigm);\n paradigm[4] = lemmaParadigmItem4;\n this.rawFormData.paradigm = paradigm;\n this.showParadigm4InputFieldHint = lemmaParadigmItem4.length > 0 && \n !hasTonicAccents(lemmaParadigmItem4);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleVerbParadigm4BlurEvent() {\n this.optimizeFormTextFieldsSpaces();\n const lemmaParadigmItem4 = this.lemmaParadigmItems.at(4) || \"\";\n this.showParadigm4InputFieldHint = lemmaParadigmItem4.length > 0 && \n !hasTonicAccents(lemmaParadigmItem4);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbIsTransitiveChangedEvent({\n newValue: isTransitive\n }) {\n this.rawFormData.isTransitive = isTransitive;\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbIsIntransitiveChangedEvent({\n newValue: isIntransitive\n }) {\n this.rawFormData.isIntransitive = isIntransitive;\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleVerbIsAnomalousChangedEvent({\n newValue: isAnomalous\n }) {\n this.rawFormData.isAnomalous = isAnomalous;\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleLemmaInflectionsChangedEvent({\n selectedInflectionsKeys = []\n }) {\n this.showLemmaDefinitions = selectedInflectionsKeys.length > 0;\n }\n\n\n // Event publishers\n publishLemmaDataChangedEvent() {\n this.eventService.publish({\n eventName: \"lemmaDataChanged\",\n eventData: {\n lemmaData: this.lemmaData,\n lemmaDataValid: this.lemmaDataValid,\n lemmaDataReady: this.lemmaDataReady\n }\n });\n }\n\n}\n","// Define the view-model for the \"verb-lemma-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\n\n// Import parameter modules\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n\n// Export the \"VerbLemmaItem\" class\nexport class VerbLemmaItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n\n // Getter and setter methods\n @computedFrom(\"lemmaData.key\")\n get lemmaKey() {\n const { key: lemmaKey = \"\" } = this.lemmaData || {};\n return lemmaKey;\n }\n @computedFrom(\"lemmaData.cathegory\")\n get lemmaCathegory() {\n const { cathegory: lemmaCathegory = \"\" } = this.lemmaData || {};\n return lemmaCathegory;\n }\n\n}\n","// Define the view-model for the \"verb-properties\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\n\n\n// Export the \"VerbProperties\" class\nexport class VerbProperties {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n\n // Getter and setter methods\n @computedFrom(\"lemmaData.cathegory\")\n get lemmaCathegory() {\n const { cathegory: lemmaCathegory = \"\" } = this.lemmaData || {};\n return lemmaCathegory;\n }\n\n}\n","// Module\nvar code = \"<template>\\n\\n <!--import components-->\\n <require from=\\\"components/private/analysis-activity-item\\\"></require>\\n <require from=\\\"value-converters/capitalize-first\\\"></require>\\n <require from=\\\"components/etc/time-stamp\\\"></require>\\n <require from=\\\"components/etc/spinner\\\"></require>\\n\\n\\n <!--title section-->\\n <div class=\\\"uk-flex uk-flex-middle\\\">\\n <!--left-aligned content-->\\n <div class=\\\"uk-text-left uk-width-expand\\\">\\n <!--task icon-->\\n <span style=\\\"position: relative; top: -0.1em\\\">\\n <i class=\\\"far fa-file-alt\\\"></i>\\n </span>\\n\\n <!--analysis label-->\\n <span class=\\\"uk-text uk-margin-smallerer-left\\\">\\n ${\\\"main:task\\\" & t: i18nParams}\\n </span>\\n\\n <!--open button-->\\n <a class=\\\"uk-link uk-link-heading\\n uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:openThisTask\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskActivity()\\\">\\n <i class=\\\"fas fa-edit\\\"\\n style=\\\"font-size: 0.9em\\\">\\n ></i>\\n <span class=\\\"uk-text uk-text-small\\\">\\n ${\\\"main:open\\\" & t: i18nParams}\\n </span>\\n </a>\\n\\n <!--delete button-->\\n <a class=\\\"uk-link uk-link-heading\\n uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:deleteThisTask\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"deleteTaskActivity()\\\">\\n <i class=\\\"far fa-trash-alt\\\"\\n style=\\\"font-size: 0.9em\\\">\\n </i>\\n <span class=\\\"uk-text uk-text-small\\\">\\n ${\\\"main:delete\\\" & t: i18nParams}\\n </span>\\n </a>\\n </div>\\n\\n <!--right-aligned content-->\\n <div class=\\\"uk-text-right uk-width-auto\\n uk-visible@s\\\">\\n <!-- Creation time -->\\n <div class=\\\"uk-flex uk-flex-right uk-flex-middle\\\"\\n show.bind=\\\"visibleMetaDataField === 'creationTime'\\\">\\n <div class=\\\"uk-width-auto\\n uk-margin-smallerer-right\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n click.delegate=\\\"toggleVisibleMetaDataField()\\\">\\n <span class=\\\"uk-text uk-text-small\\\"\\n i18n=\\\"[uk-tooltip]tooltips:toggleDisplayedField\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n ${\\\"main:created\\\" & t: i18nParams}:\\n </span>\\n </a>\\n </div>\\n\\n <!--time-stamp-->\\n <div class=\\\"uk-width-auto\\\">\\n <time-stamp time-stamp-ms.to-view=\\\"taskActivityData.createdOn\\\"\\n span-classes=\\\"uk-text-small uk-text-right\\\"\\n anchor-classes=\\\"uk-link uk-link-heading\\\">\\n </time-stamp>\\n </div>\\n </div>\\n\\n <!-- Modification time -->\\n <div class=\\\"uk-flex uk-flex-right uk-flex-middle\\\"\\n show.bind=\\\"visibleMetaDataField === 'modificationTime'\\\">\\n <div class=\\\"uk-width-auto\\n uk-margin-smallerer-right\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n click.delegate=\\\"toggleVisibleMetaDataField()\\\">\\n <span class=\\\"uk-text uk-text-small\\\"\\n i18n=\\\"[uk-tooltip]tooltips:toggleDisplayedField\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n ${\\\"main:modified\\\" & t: i18nParams}:\\n </span>\\n </a>\\n </div>\\n\\n <!--time-stamp-->\\n <div class=\\\"uk-width-auto\\\">\\n <time-stamp time-stamp-ms.to-view=\\\"taskActivityData.modifiedOn\\\"\\n span-classes=\\\"uk-text-small uk-text-right\\\"\\n anchor-classes=\\\"uk-link uk-link-heading\\\">\\n </time-stamp>\\n </div>\\n </div>\\n </div>\\n </div>\\n\\n <hr class=\\\"uk-margin-smallerer-top uk-margin-smallerer-bottom\\n uk-padding-remove\\\">\\n\\n <!--content section-->\\n <div class=\\\"uk-text uk-text-left\\\">\\n <!--debug info line-->\\n <div class=\\\"uk-text-small uk-text-debug\\\"\\n if.bind=\\\"showDebugInfo\\\">\\n activitiesIndex: ${activitiesIndex},\\n index: ${taskActivityData.index},\\n activity/${taskActivityKey},\\n task/${taskKey}\\n </div>\\n\\n <div class=\\\"uk-text uk-text-bold uk-text-break\\\"\\n if.bind=\\\"taskTitle\\\">\\n ${taskTitle | capitalizeFirst}\\n </div>\\n <div class=\\\"uk-text uk-text-meta uk-text-break\\\"\\n if.bind=\\\"taskDescription\\\">\\n ${taskDescription | capitalizeFirst}\\n </div>\\n </div>\\n\\n <!--sub-title section-->\\n <div class=\\\"uk-text uk-text-small uk-text-left\\\">\\n <!--analysis activities' count-->\\n ${analysisActivitiesCount}\\n <span show.bind=\\\"analysisActivitiesCount === 1\\\">\\n ${\\\"main:analysis\\\" & t}\\n </span>\\n <span show.bind=\\\"analysisActivitiesCount !== 1\\\">\\n ${\\\"main:analyses\\\" & t}\\n </span>\\n\\n <!--create analysis activity-->\\n <a class=\\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:addTaskAnalysisActivity\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"createTaskAnalysisActivity()\\\">\\n <i class=\\\"fas fa-plus\\\"\\n style=\\\"font-size: 0.8em\\\">\\n </i>\\n ${\\\"main:add\\\" & t}\\n </a>\\n\\n <!--show/hide analysis activities list-->\\n <a class=\\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n click.delegate=\\\"toggleIsTaskActivityOpen()\\\">\\n <span i18n=\\\"[uk-tooltip]tooltips:showTaskAnalysisActivities\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n show.bind=\\\"!isTaskActivityOpen\\\">\\n <i class=\\\"far fa-eye\\\"></i>\\n ${\\\"main:show\\\" & t}\\n </span>\\n <span i18n=\\\"[uk-tooltip]tooltips:hideTaskAnalysisActivities\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n show.bind=\\\"isTaskActivityOpen\\\">\\n <i class=\\\"far fa-eye-slash\\\"></i>\\n ${\\\"main:hide\\\" & t}\\n </span>\\n </a>\\n </div>\\n\\n <!--secondary body (list of analysis activities)-->\\n <div class=\\\"uk-margin-smaller-left\\\"\\n show.bind=\\\"isTaskActivityOpen\\\">\\n <!--loading analysis activities' data spinner-->\\n <div show.bind=\\\"isLoadingData\\\">\\n <spinner></spinner>\\n <span class=\\\"uk-margin-smaller-left\\\">\\n ${\\\"main:loadingData\\\" & t}…\\n </span>\\n </div>\\n\\n <!--list of analysis activities-->\\n <ul id=\\\"taskActivity/${taskActivityKey}\\\"\\n class=\\\"uk-list uk-list-small\\n uk-padding-remove uk-margin-remove\\\"\\n element.ref=\\\"analysisActivitiesListElement\\\"\\n show.bind=\\\"!isLoadingData\\\">\\n <li repeat.for=\\\"analysisActivityData of analysisActivitiesData\\\"\\n id=\\\"analysisActivity/${analysisActivityData.key}\\\"\\n class=\\\"ps-draggable-item uk-flex uk-flex-middle\\\">\\n <!--task analysis activity index-->\\n <div class=\\\"uk-width-auto uk-text uk-text-meta\\\">\\n ${1+$index}.\\n </div>\\n\\n <div class=\\\"uk-width-expand\\n uk-card uk-card-default uk-card-small\\n uk-flex uk-flex-middle\\n uk-padding-smaller uk-margin-smaller-left\\\">\\n <!--task analysis activity-->\\n <div class=\\\"uk-width-expand\\\">\\n <analysis-activity-item analysis-activity-data.to-view=\\n \\\"analysisActivityData\\\"\\n display-mode=\\\"compact\\\"\\n run-mode.to-view=\\\"runMode\\\">\\n </analysis-activity-item>\\n </div>\\n\\n <!--open task analysis activity-->\\n <div class=\\\"uk-width-auto\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n i18n=\\\"[uk-tooltip]tooltips:openThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskAnalysisActivity($index)\\\">\\n <i class=\\\"fas fa-edit\\\"\\n style=\\\"position: relative; top: 0.1em\\\">\\n </i>\\n </a>\\n </div>\\n\\n <!--remove task analysis activity-->\\n <div class=\\\"uk-width-auto uk-margin-smaller-left\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n i18n=\\\"[uk-tooltip]tooltips:deleteThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"deleteTaskAnalysisActivity($index)\\\">\\n <i class=\\\"far fa-trash-alt\\\"\\n style=\\\"position: relative; top: 0.1em\\\">\\n </i>\\n </a>\\n </div>\\n\\n <!--vertical divider-->\\n <div class=\\\"uk-width-auto uk-padding-smaller-left\\\">\\n <hr class=\\\"uk-divider-small uk-divider-vertical\\\"\\n style=\\\"position: relative; top: 0.6em; \\n width: 0em; height: 2em\\\">\\n </div>\\n\\n <!--drag and drop handle-->\\n <a class=\\\"uk-width-auto uk-link uk-link-heading\\n ps-draggable-handle\\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n style=\\\"position: relative; top: 0.1em\\\"\\n i18n=\\\"[uk-tooltip]tooltips:dragAndDropAnalysisActivity\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n <i class=\\\"fas fa-grip-horizontal\\\"></i>\\n </a>\\n </div>\\n </li>\\n <li class=\\\"uk-text uk-text-small uk-text-light uk-text-left \\n uk-margin-smaller\\\"\\n if.bind=\\\"analysisActivitiesData.length === 0\\\">\\n ${\\\"main:noAnalysis\\\" & t}…\\n </li>\\n </ul>\\n </div>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <!--import value converters-->\\n <require from=\\\"value-converters/capitalize-first\\\"></require>\\n\\n <!--import components-->\\n <require from=\\\"components/etc/screen-title\\\"></require>\\n <require from=\\\"components/etc/add-analysis-activity-icon\\\"></require>\\n <require from=\\\"components/private/analysis-activity-item\\\"></require>\\n <require from=\\\"components/etc/time-stamp\\\"></require>\\n <require from=\\\"components/etc/off-canvas\\\"></require>\\n <require from=\\\"components/etc/spinner\\\"></require>\\n\\n\\n <!--loading spinner-->\\n <spinner class=\\\"uk-text-center uk-margin-smallerer\\\"\\n if.bind=\\\"isLoadingData\\\">\\n </spinner>\\n\\n <!--debug info line-->\\n <div class=\\\"uk-text-small uk-text-center uk-text-debug\\\"\\n if.bind=\\\"runMode === 'dev'\\\">\\n activity/${taskActivityKey || '???'}<br>\\n task/${taskKey || '???'}\\n </div>\\n\\n <!--header-->\\n <screen-title extra-div-classes=\\\"uk-tile uk-tile-default\\n uk-margin-remove uk-padding-smaller\\\"\\n show-back-icon.to-view=\\\"false\\\"\\n autofocus.bind=\\\"true\\\"\\n sticky.bind=\\\"true\\\">\\n <div slot=\\\"left\\\">\\n <!-- navigate back icon -->\\n <a class=\\\"uk-link uk-link-heading\\\"\\n style=\\\"position: relative; top: 0.15em\\\"\\n i18n=\\\"[uk-tooltip]tooltips:backToPreviousScreen\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"closeTaskActivity()\\\">\\n <i class=\\\"fas fa-arrow-left\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n\\n <!-- scroll to top icon -->\\n <a class=\\\"uk-link uk-link-heading\\n uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:scrollToTopOfScreen\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"scrollToTop()\\\"\\n show.bind=\\\"showScrollToTopIcon\\\">\\n <i class=\\\"fas fa-angle-double-up\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n\\n <!-- scroll to bottom icon -->\\n <a class=\\\"uk-link uk-link-heading \\n uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:scrollToBottomOfScreen\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"scrollToBottom()\\\"\\n show.bind=\\\"showScrollToBottomIcon\\\">\\n <i class=\\\"fas fa-angle-double-down\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n\\n <!-- help shadow icon -->\\n <a class=\\\"uk-link uk-link-heading uk-invisible\\n uk-margin-smaller-left\\\">\\n <i class=\\\"far fa-question-circle\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n </div>\\n\\n <div slot=\\\"center\\\">\\n ${\\\"elements:taskActivity.title\\\" & t: i18nParams}\\n </div>\\n\\n <div slot=\\\"right\\\">\\n <!-- navigate back shadow icon -->\\n <a class=\\\"uk-link uk-link-heading uk-invisible\\\"\\n style=\\\"position: relative; top: 0.15em\\\">\\n <i class=\\\"fas fa-arrow-left\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n\\n <!-- scroll to top shadow icon -->\\n <a class=\\\"uk-link uk-link-heading uk-invisible\\n uk-margin-smaller-left\\\"\\n show.bind=\\\"showScrollToTopIcon\\\">\\n <i class=\\\"fas fa-angle-double-up\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n\\n <!-- scroll to bottom shadow icon -->\\n <a class=\\\"uk-link uk-link-heading uk-invisible\\n uk-margin-smaller-left\\\"\\n show.bind=\\\"showScrollToBottomIcon\\\">\\n <i class=\\\"fas fa-angle-double-down\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n\\n <!-- help icon -->\\n <a class=\\\"uk-link uk-link-heading\\n uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:showHelp\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"toggleHelpCanvas()\\\"\\n uk-toggle=\\\"mode: click; target: #task-activity-help\\\">\\n <i class=\\\"far fa-question-circle\\\"\\n style=\\\"font-size: 1.5em\\\">\\n </i>\\n </a>\\n </div>\\n </screen-title>\\n\\n <!--help off-canvas-->\\n <off-canvas canvas-id=\\\"task-activity-help\\\"\\n show-close-button.bind=\\\"true\\\">\\n <h4 i18n=\\\"elements:taskActivity.help.title\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n </h4>\\n <div i18n=\\\"[html]elements:taskActivity.help.body\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n </div>\\n </off-canvas>\\n\\n <!-- scroll to top placeholder-->\\n <!-- note: some invisible content is required for the scrollspy to work -->\\n <div element.ref=\\\"scrollToTopElement\\\"\\n inview.delegate=\\\"topElementScrolledIntoView()\\\"\\n outview.delegate=\\\"topElementScrolledOutOfView()\\\"\\n uk-scrollspy=\\\"cls: uk-slide-top; hidden: true; repeat: true;\\\">\\n <hr class=\\\"uk-invisible uk-margin-remove uk-padding-remove\\\">\\n </div>\\n\\n <!--task-->\\n <div class=\\\"uk-padding-small uk-padding-top-remove\\\"\\n show.bind=\\\"taskData && !isLoadingData \\\">\\n\\n <!--task title and description-->\\n <div class=\\\"uk-text-lead uk-text-center\\\">\\n ${taskData.title | capitalizeFirst}\\n </div>\\n <div class=\\\"uk-text uk-text-center\\\"\\n if.bind=\\\"taskData.description\\\">\\n ${taskData.description | capitalizeFirst}\\n </div>\\n\\n <!--task activity's meta-data-->\\n <!-- Creation time -->\\n <div class=\\\"uk-flex uk-flex-center uk-flex-middle\\n uk-margin-smallerer-top\\\">\\n <div class=\\\"uk-width-auto\\\">\\n <span class=\\\"uk-text uk-text-small\\\">\\n ${\\\"main:created\\\" & t}:\\n </span>\\n </div>\\n\\n <!--time-stamp-->\\n <div class=\\\"uk-width-auto\\n uk-margin-smallerer-left\\\">\\n <time-stamp time-stamp-ms.to-view=\\\"taskActivityData.createdOn\\\"\\n span-classes=\\\"uk-text-small uk-text-right\\\"\\n anchor-classes=\\\"uk-link uk-link-heading\\\">\\n </time-stamp>\\n </div>\\n </div>\\n\\n <!-- Modification time -->\\n <div class=\\\"uk-flex uk-flex-center uk-flex-middle\\\"\\n style=\\\"position: relative; top: -0.2em\\\">\\n <div class=\\\"uk-width-auto\\\">\\n <span class=\\\"uk-text uk-text-small\\\">\\n ${\\\"main:modified\\\" & t}:\\n </span>\\n </div>\\n\\n <!--time-stamp-->\\n <div class=\\\"uk-width-auto\\n uk-margin-smallerer-left\\\">\\n <time-stamp time-stamp-ms.to-view=\\\"taskActivityData.modifiedOn\\\"\\n span-classes=\\\"uk-text-small uk-text-right\\\"\\n anchor-classes=\\\"uk-link uk-link-heading\\\">\\n </time-stamp>\\n </div>\\n </div>\\n\\n <!--loading analysis activities spinner-->\\n <div class=\\\"uk-margin-small-top\\\"\\n show.bind=\\\"isLoadingData\\\">\\n <spinner></spinner>\\n <span class=\\\"uk-margin-smaller-left\\\">\\n ${\\\"main:loadingData\\\" & t}…\\n </span>\\n </div>\\n\\n <!--no analysis activity-->\\n <div class=\\\"uk-text uk-text-center uk-margin-smallerer-top\\\"\\n if.bind=\\\"analysisActivitiesCount === 0\\\">\\n ${\\\"main:noAnalysis\\\" & t}…\\n\\n <!--create analysis activity-->\\n <a class=\\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:addTaskAnalysisActivity\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"createTaskAnalysisActivity()\\\">\\n <i class=\\\"fas fa-plus\\\"\\n style=\\\"font-size: 0.8em\\\">\\n </i>\\n ${\\\"main:add\\\" & t}\\n </a>\\n </div>\\n\\n <!--some analysis activities-->\\n <div class=\\\"uk-text uk-text-center uk-margin-smallerer-top\\\"\\n if.bind=\\\"analysisActivitiesCount > 0\\\">\\n <!--analysis activitites' count-->\\n ${analysisActivitiesCount}\\n <span show.bind=\\\"analysisActivitiesCount === 1\\\">\\n ${\\\"main:analysis\\\" & t}\\n </span>\\n <span show.bind=\\\"analysisActivitiesCount !== 1\\\">\\n ${\\\"main:analyses\\\" & t}\\n </span>\\n\\n <!--create analysis activity-->\\n <a class=\\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:addTaskAnalysisActivity\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"createTaskAnalysisActivity()\\\">\\n <i class=\\\"fas fa-plus\\\"\\n style=\\\"font-size: 0.8em\\\">\\n </i>\\n ${\\\"main:add\\\" & t}\\n </a>\\n\\n <!--toggle display-mode-->\\n <a class=\\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:toggleDisplayMode\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"toggleDisplayMode()\\\">\\n <span class=\\\"uk-text\\\"\\n show.bind=\\\"displayMode === 'list'\\\">\\n <i class=\\\"fas fa-align-left\\\"></i>\\n ${\\\"main:showText\\\" & t}\\n </span>\\n <span class=\\\"uk-text\\\"\\n show.bind=\\\"displayMode === 'text'\\\">\\n <i class=\\\"fas fa-list\\\"></i>\\n ${\\\"main:showList\\\" & t}\\n </span>\\n </a>\\n\\n </div>\\n\\n <!--list of activities (list view)-->\\n <ul id=\\\"task=${taskKey}\\\"\\n class=\\\"uk-list uk-list-small\\n uk-padding-remove uk-margin-small-top\\\"\\n element.ref=\\\"analysisActivitiesListElement\\\"\\n show.bind=\\\"displayMode === 'list' && analysisActivitiesCount > 0\\\">\\n <li repeat.for=\\\"analysisActivityData of analysisActivitiesData\\\"\\n id=\\\"analysis=${analysisActivityData.key}\\\"\\n class=\\\"ps-draggable-item uk-flex uk-flex-middle\\\">\\n <!--task analysis activity index-->\\n <div class=\\\"uk-width-auto uk-text uk-text-meta\\\">\\n ${1+$index}.\\n </div>\\n\\n <div class=\\\"uk-width-expand\\n uk-card uk-card-default uk-card-small\\n uk-flex uk-flex-middle\\n uk-margin-smaller-left uk-padding-smaller\\\">\\n <!--task analysis activity-->\\n <div class=\\\"uk-width-expand\\\">\\n <analysis-activity-item analysis-activity-data.to-view=\\n \\\"analysisActivityData\\\"\\n run-mode.to-view=\\\"runMode\\\"\\n display-mode=\\\"compact\\\">\\n </analysis-activity-item>\\n </div>\\n\\n <!--open task analysis activity-->\\n <div class=\\\"uk-width-auto\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n i18n=\\\"[uk-tooltip]tooltips:openThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskAnalysisActivity($index)\\\">\\n <i class=\\\"fas fa-edit\\\"></i>\\n </a>\\n </div>\\n\\n <!--remove task analysis activity-->\\n <div class=\\\"uk-width-auto\\\">\\n <a class=\\\"uk-link uk-link-heading\\n uk-margin-smaller-left\\\"\\n i18n=\\\"[uk-tooltip]tooltips:deleteThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"deleteTaskAnalysisActivity($index)\\\">\\n <i class=\\\"far fa-trash-alt\\\"></i>\\n </a>\\n </div>\\n\\n <!--vertical divider-->\\n <div class=\\\"uk-width-auto uk-margin-smaller-left\\\">\\n <hr class=\\\"uk-divider-small uk-divider-vertical\\\"\\n style=\\\"position: relative; top: 0.6em; width: 0em; height: 2em\\\">\\n </div>\\n\\n <!--drag and drop handle-->\\n <a class=\\\"uk-width-auto uk-link uk-link-heading ps-draggable-handle\\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n style=\\\"position: relative; top: 0.1em\\\"\\n i18n=\\\"[uk-tooltip]tooltips:dragAndDropAnalysisActivity\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n <i class=\\\"fas fa-grip-horizontal\\\"></i>\\n </a>\\n </div>\\n </li>\\n </ul>\\n\\n <!--task's text view (small screens)-->\\n <div class=\\\"uk-text-center uk-hidden@s uk-margin-top\\\"\\n show.bind=\\\"displayMode === 'text' && analysisActivitiesCount > 0\\\">\\n <h5 class=\\\"uk-text-center uk-margin-smallerer-bottom\\\">\\n ${\\\"main:inputSentences\\\" & t: i18nParams}\\n </h5>\\n\\n <!--input text (left aligned)-->\\n <div class=\\\"uk-text-break\\\">\\n <a class=\\\"uk-link uk-link-heading\\\" \\n i18n=\\\"[uk-tooltip]tooltips:openThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskAnalysisActivity($index)\\\"\\n repeat.for=\\\"analysisActivityData of analysisActivitiesData\\\">\\n <span class=\\\"${analysisActivityData.analysis.outSentence.text ? \\n 'uk-text-bold' : ''}\\\">\\n ${analysisActivityData.analysis.inSentence.text}\\n </span>\\n </a>\\n </div>\\n \\n <!--horizontal divider-->\\n <hr class=\\\"uk-divider-small \\n uk-margin-smaller-top uk-margin-smaller-bottom\\\">\\n <h5 class=\\\"uk-text-center uk-margin-smallerer-bottom\\\">\\n ${\\\"main:outputSentences\\\" & t: i18nParams}\\n </h5>\\n\\n <!--output text (right aligned)-->\\n <div class=\\\"uk-text-break\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n i18n=\\\"[uk-tooltip]tooltips:openThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskAnalysisActivity($index)\\\"\\n repeat.for=\\\"analysisActivityData of analysisActivitiesData\\\">\\n <span class=\\\"uk-text uk-text-break\\n uk-margin-smallerer-left uk-margin-smallerer-right\\\"\\n show.bind=\\\"analysisActivityData.analysis.outSentence.text\\\">\\n ${analysisActivityData.analysis.outSentence.text | capitalizeFirst}\\n </span>\\n <span class=\\\"uk-text-small uk-text-break\\n uk-margin-smallerer-left uk-margin-smallerer-right\\\"\\n show.bind=\\\"!analysisActivityData.analysis.outSentence.text\\\">\\n ${\\\"main:noTranslation\\\" & t}…\\n </span>\\n </a>\\n </div>\\n </div>\\n\\n <!--task's text view (larger screens)-->\\n <div class=\\\"uk-flex uk-flex-center uk-flex-top uk-visible@s\\n uk-margin-top\\\"\\n show.bind=\\\"displayMode === 'text' && analysisActivitiesCount > 0\\\">\\n <!--input text (left aligned)-->\\n <div class=\\\"uk-width-expand uk-text-left uk-text-break\\\">\\n <h5 class=\\\"uk-text-center uk-margin-smallerer-bottom\\\">\\n ${\\\"main:inputSentences\\\" & t: i18nParams}\\n </h5>\\n\\n <a class=\\\"uk-link uk-link-heading\\\"\\n i18n=\\\"[uk-tooltip]tooltips:openThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskAnalysisActivity($index)\\\"\\n repeat.for=\\\"analysisActivityData of analysisActivitiesData\\\">\\n <span class=\\\"${analysisActivityData.analysis.outSentence.text ? \\n 'uk-text-bold' : ''}\\\">\\n ${analysisActivityData.analysis.inSentence.text}\\n </span>\\n </a>\\n </div>\\n \\n <!--vertical divider-->\\n <div class=\\\"uk-width-auto\\n uk-margin-small-left uk-margin-right\\\">\\n <hr class=\\\"uk-divider-small uk-divider-vertical\\\"\\n style=\\\"position: relative; top: 0.6em; width: 0em; height: 2em\\\">\\n </div>\\n\\n <!--output text-->\\n <div class=\\\"uk-width-expand uk-text-left\\\">\\n <h5 class=\\\"uk-text-center uk-margin-smallerer-bottom\\\">\\n ${\\\"main:outputSentences\\\" & t: i18nParams}\\n </h5>\\n\\n <a class=\\\"uk-link uk-link-heading uk-text-break\\\"\\n i18n=\\\"[uk-tooltip]tooltips:openThisAnalysis\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n click.delegate=\\\"openTaskAnalysisActivity($index)\\\"\\n repeat.for=\\\"analysisActivityData of analysisActivitiesData\\\">\\n <span class=\\\"uk-text uk-text-break\\n uk-margin-smallerer-left uk-margin-smallerer-right\\\"\\n show.bind=\\\"analysisActivityData.analysis.outSentence.text\\\">\\n ${analysisActivityData.analysis.outSentence.text | capitalizeFirst}\\n </span>\\n <span class=\\\"uk-text-small uk-text-break\\n uk-margin-smallerer-left uk-margin-smallerer-right\\\"\\n show.bind=\\\"!analysisActivityData.analysis.outSentence.text\\\">\\n ${\\\"main:noTranslation\\\" & t}…\\n </span>\\n </a>\\n </div>\\n </div>\\n\\n <!--close button-->\\n <div class=\\\"uk-text-center uk-margin-top\\\">\\n <button class=\\\"uk-button uk-button-primary\\\"\\n click.delegate=\\\"closeTaskActivity()\\\">\\n ${\\\"main:close\\\" & t}\\n </button>\\n </div>\\n\\n </div>\\n\\n <!-- scroll to bottom placeholder-->\\n <!-- note: some invisible content is required for the scrollspy to work -->\\n <div element.ref=\\\"scrollToBottomElement\\\"\\n inview.delegate=\\\"bottomElementScrolledIntoView()\\\"\\n outview.delegate=\\\"bottomElementScrolledOutOfView()\\\"\\n uk-scrollspy=\\\"cls: uk-slide-bottom; hidden: true; repeat: true;\\\">\\n <hr class=\\\"uk-invisible uk-margin-remove uk-padding-remove\\\">\\n </div>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <span class=\\\"uk-text ${textColorClass}\\\">\\n <!-- user credit -->\\n <span i18n=\\\"[uk-tooltip]tooltips:currentUserCredit\\\"\\n i18n-params.bind=\\\"i18nParams\\\">\\n ${userCredit}\\n </span>\\n\\n <!-- user credit is locked -->\\n <span i18n=\\\"[uk-tooltip]tooltips:userCreditLocked\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n if.bind=\\\"isUserCreditLocked\\\">\\n <i class=\\\"fas fa-lock\\\"\\n css=\\\"font-size: ${iconFontSize}\\\">\\n </i>\\n </span>\\n\\n <!-- user credit is unlocked -->\\n <span i18n=\\\"[uk-tooltip]tooltips:userCreditUnlocked\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n if.bind=\\\"!isUserCreditLocked\\\">\\n <i class=\\\"fas fa-unlock\\\"\\n css=\\\"font-size: ${iconFontSize}\\\">\\n </i>\\n </span>\\n </span>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <!--import components-->\\n <require from=\\\"components/private/user-credit\\\"></require>\\n\\n <div class=\\\"uk-inline\\\">\\n <span>\\n <!--user icon-->\\n <i class=\\\"fas fa-user\\\"></i>\\n\\n <!--user display name-->\\n <span class=\\\"${spanClasses} uk-margin-smallerer-left\\\">\\n ${displayName} (<user-credit></user-credit>)\\n </span>\\n\\n <!--caret icon-->\\n <i class=\\\"fas fa-caret-down uk-margin-smallerer-left\\\"></i>\\n </span>\\n\\n <!--dropdown menu-->\\n <div uk-dropdown=\\\"mode: click; \\n pos: bottom-left; \\n delay-show: 50; \\n delay-hide: 50\\\"\\n class=\\\"uk-padding-smaller\\\"\\n style=\\\"max-width: 20em\\\"\\n element.ref=\\\"userDropdownElement\\\">\\n <ul class=\\\"uk-nav\\\">\\n <li repeat.for=\\\"menuItemData of menuItemsData\\\"\\n show.bind=\\\"!menuItemData.hideOnRouteNames.includes(currentRouteName)\\\">\\n <a class=\\\"uk-link uk-link-heading\\\"\\n click.delegate=\\\"itemSelected(menuItemData.name)\\\">\\n <i class=\\\"${menuItemData.iconClasses}\\\"></i>\\n <span class=\\\"${spanClasses}\\\">\\n ${menuItemData.i18nKey & t: i18nParams}\\n </span>\\n </a>\\n </li>\\n </ul>\\n </div>\\n </div>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <!--debug info line-->\\n <div class=\\\"uk-text uk-text-small uk-text-debug\\\"\\n if.bind=\\\"runMode === 'dev'\\\">\\n inflection/${inflectionKey || '???'}\\n </div>\\n\\n <div>\\n <!--cathegory-->\\n <span class=\\\"uk-text\\\"\\n i18n=\\\"enums:longInflectionCathegory.${inflectionCathegory}\\\">\\n </span>,\\n\\n <!--conjugation-->\\n <span class=\\\"uk-text\\\">\\n ${inflectionConjugationString}\\n </span>\\n <span class=\\\"uk-text\\\" \\n style=\\\"position: relative; left: -0.25em;\\\" \\n show.bind=\\\"inflectionForm\\\">, <span>\\n\\n <!--form-->\\n <span class=\\\"uk-text\\\"\\n i18n=\\\"enums:longInflectionForm.${inflectionForm}\\\">\\n </span>\\n <span class=\\\"uk-text\\\" \\n style=\\\"position: relative; left: -0.25em;\\\" \\n show.bind=\\\"inflectionVariant\\\">, <span>\\n\\n <!--variant-->\\n <span if.bind=\\\"inflectionVariant\\\">\\n <span class=\\\"uk-text\\\"\\n if.bind=\\\"!placeAdjectivesBeforeNouns\\\">\\n ${\\\"main:variant\\\" & t}\\n </span>\\n <span class=\\\"uk-text uk-text-italic\\\">\\n \\\"${inflectionVariant}\\\"\\n </span>\\n <span class=\\\"uk-text\\\"\\n if.bind=\\\"placeAdjectivesBeforeNouns\\\">\\n ${\\\"main:variant\\\" & t}\\n </span>\\n </span>\\n </div>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <!--import components-->\\n <require from=\\\"components/private/inflection-mood\\\"></require>\\n <require from=\\\"components/private/inflection-tense\\\"></require>\\n <require from=\\\"components/private/inflection-person\\\"></require>\\n <require from=\\\"components/private/inflection-number\\\"></require>\\n <require from=\\\"components/private/inflection-form\\\"></require>\\n <require from=\\\"components/private/inflection-age\\\"></require>\\n\\n <span class=\\\"uk-text-nowrap ${classes}\\\"\\n if.bind=\\\"inflectorData && inflectorData.cathegory === 'vrb'\\\">\\n\\n <inflection-mood inflection-mood.to-view=\\\"inflectorData.mood\\\"\\n classes=\\\"uk-text-italic\\\">\\n </inflection-mood>\\n\\n <inflection-tense inflection-tense.to-view=\\\"inflectorData.tense\\\"\\n classes=\\\"uk-text-italic uk-margin-smallerer-left\\\">\\n </inflection-tense>\\n\\n <inflection-person inflection-person.to-view=\\\"inflectorData.person\\\"\\n classes=\\\"uk-text-italic uk-margin-smallerer-left\\\">\\n </inflection-person>\\n\\n <inflection-number inflection-number.to-view=\\\"inflectorData.number\\\"\\n classes=\\\"uk-text-italic uk-margin-smallerer-left\\\">\\n </inflection-number>\\n\\n <inflection-form inflection-form.to-view=\\\"inflectorData.form\\\"\\n classes=\\\"uk-text-italic uk-margin-smallerer-left\\\">\\n </inflection-form>\\n\\n <inflection-age inflection-age.to-view=\\\"inflectorData.age\\\"\\n classes=\\\"uk-text-italic uk-margin-smallerer-left\\\">\\n </inflection-age>\\n\\n </span>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <!--import components-->\\n <require from=\\\"components/private/lemma-inflections\\\"></require>\\n <require from=\\\"components/private/lemma-definitions\\\"></require>\\n <require from=\\\"components/etc/form-checkbox-field\\\"></require>\\n <require from=\\\"components/etc/form-input-field\\\"></require>\\n <require from=\\\"components/etc/form-input-field-hint\\\"></require>\\n <require from=\\\"components/etc/short-tonic-accent\\\"></require>\\n <require from=\\\"components/etc/long-tonic-accent\\\"></require>\\n <require from=\\\"components/etc/remove-tonic-accent\\\"></require>\\n\\n <div class=\\\"uk-margin-remove\\n uk-grid uk-grid-small \\n uk-flex\\\"\\n uk-grid>\\n\\n <!--paradigm items fieldset-->\\n <fieldset class=\\\"uk-width-1-1 ps-fieldset\\n uk-margin-remove uk-padding-smallerer\\n uk-grid uk-grid-small \\n uk-flex\\\"\\n uk-grid>\\n <!--fieldset legend-->\\n <legend class=\\\"uk-text-small\\n uk-padding-smaller-left uk-padding-smaller-right\\\">\\n ${\\\"main:paradigm\\\" & t: i18nParams}\\n </legend>\\n\\n <!--paradigm0 (present, 1st pers. sing. form) input field-->\\n <div class=\\\"uk-width-1-1\\n uk-flex uk-flex-bottom\\n uk-margin-remove \\n uk-padding-smaller-left uk-padding-smaller-right\\\">\\n <div class=uk-width-expand\\\">\\n <form-input-field type=\\\"text\\\"\\n data.to-view=\\\"rawFormData\\\"\\n value.two-way=\\\"rawFormData.paradigm[0]\\\"\\n property-name=\\\"paradigm\\\"\\n unique-id=\\\"verbParadigm0\\\"\\n input-element.from-view=\\\"paradigm0InputElement\\\"\\n validated-events=\\\"input\\\"\\n validator.to-view=\\\"validator\\\"\\n published-events=\\\"change\\\"\\n event-service.to-view=\\\"eventService\\\"\\n on-blur.call=\\\"handleVerbParadigm0BlurEvent()\\\"\\n i18n=\\\"[label]main:verbLemmaParadigm0;[placeholder]main:verbLemmaParadigm0PH\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n fieldname-i18n-key=\\\"main:verbLemmaParadigm0\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\"\\n required.bind=\\\"true\\\">\\n </form-input-field>\\n </div>\\n\\n <!--remove short/long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <remove-tonic-accent input-element.to-view=\\\"paradigm0InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm0\\\">\\n </remove-tonic-accent>\\n </div>\\n\\n <!--add short tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <short-tonic-accent input-element.to-view=\\\"paradigm0InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm0\\\">\\n </short-tonic-accent>\\n </div>\\n\\n <!--add long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <long-tonic-accent input-element.to-view=\\\"paradigm0InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm0\\\">\\n </long-tonic-accent>\\n </div>\\n </div>\\n\\n <!--hint-->\\n <div class=\\\"uk-margin-remove \\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n show.bind=\\\"showParadigm0InputFieldHint\\\">\\n <form-input-field-hint main-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.main\\\"\\n help-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.help\\\"\\n div-classes=\\\"uk-alert uk-margin-remove\\\">\\n </form-input-field-hint>\\n </div>\\n\\n <!--paradigm1 (present, 2nd pers. sing. form) input field-->\\n <div class=\\\"uk-width-1-1\\n uk-flex uk-flex-bottom\\n uk-margin-small-top\\n uk-padding-smaller-left uk-padding-smaller-right\\\">\\n <div class=uk-width-expand\\\">\\n <form-input-field type=\\\"text\\\"\\n data.to-view=\\\"rawFormData\\\"\\n value.two-way=\\\"rawFormData.paradigm[1]\\\"\\n property-name=\\\"paradigm\\\"\\n unique-id=\\\"verbParadigm1\\\"\\n input-element.from-view=\\\"paradigm1InputElement\\\"\\n validator.to-view=\\\"validator\\\"\\n validated-events=\\\"input\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n on-blur.call=\\\"handleVerbParadigm1BlurEvent()\\\"\\n i18n=\\\"[label]main:verbLemmaParadigm1;[placeholder]main:verbLemmaParadigm1PH\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n fieldname-i18n-key=\\\"main:verbLemmaParadigm1\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\"\\n required.bind=\\\"true\\\">\\n </form-input-field>\\n </div>\\n\\n <!--remove short/long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <remove-tonic-accent input-element.to-view=\\\"paradigm1InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm1\\\">\\n </remove-tonic-accent>\\n </div>\\n\\n <!--add short tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <short-tonic-accent input-element.to-view=\\\"paradigm1InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm1\\\">\\n </short-tonic-accent>\\n </div>\\n\\n <!--add long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <long-tonic-accent input-element.to-view=\\\"paradigm1InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm1\\\">\\n </long-tonic-accent>\\n </div>\\n </div>\\n\\n <!--hint-->\\n <div class=\\\"uk-margin-remove \\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n show.bind=\\\"showParadigm1InputFieldHint\\\">\\n <form-input-field-hint main-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.main\\\"\\n help-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.help\\\"\\n div-classes=\\\"uk-alert uk-margin-remove\\\">\\n </form-input-field-hint>\\n </div>\\n\\n <!--paradigm2 (perferc form) input field-->\\n <div class=\\\"uk-width-1-1\\n uk-flex uk-flex-bottom\\n uk-margin-small-top\\n uk-padding-smaller-left uk-padding-smaller-right\\\">\\n <div class=uk-width-expand\\\">\\n <form-input-field type=\\\"text\\\"\\n data.to-view=\\\"rawFormData\\\"\\n value.two-way=\\\"rawFormData.paradigm[2]\\\"\\n property-name=\\\"paradigm\\\"\\n unique-id=\\\"verbParadigm2\\\"\\n input-element.from-view=\\\"paradigm2InputElement\\\"\\n validator.to-view=\\\"validator\\\"\\n validated-events=\\\"input\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n on-blur.call=\\\"handleVerbParadigm2BlurEvent()\\\"\\n i18n=\\\"[label]main:verbLemmaParadigm2;[placeholder]main:verbLemmaParadigm2PH\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n fieldname-i18n-key=\\\"main:verbLemmaParadigm2\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\">\\n </form-input-field>\\n </div>\\n\\n <!--remove short/long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <remove-tonic-accent input-element.to-view=\\\"paradigm2InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm2\\\">\\n </remove-tonic-accent>\\n </div>\\n\\n <!--add short tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <short-tonic-accent input-element.to-view=\\\"paradigm2InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm2\\\">\\n </short-tonic-accent>\\n </div>\\n\\n <!--add long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <long-tonic-accent input-element.to-view=\\\"paradigm2InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm2\\\">\\n </long-tonic-accent>\\n </div>\\n </div>\\n\\n <!--hint-->\\n <div class=\\\"uk-margin-remove \\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n show.bind=\\\"showParadigm2InputFieldHint\\\">\\n <form-input-field-hint main-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.main\\\"\\n help-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.help\\\"\\n div-classes=\\\"uk-alert uk-margin-remove\\\">\\n </form-input-field-hint>\\n </div>\\n\\n <!--paradigm3 (supine form) input field-->\\n <div class=\\\"uk-width-1-1\\n uk-flex uk-flex-bottom\\n uk-margin-small-top\\n uk-padding-smaller-left uk-padding-smaller-right\\\">\\n <div class=uk-width-expand\\\">\\n <form-input-field type=\\\"text\\\"\\n data.to-view=\\\"rawFormData\\\"\\n value.two-way=\\\"rawFormData.paradigm[3]\\\"\\n property-name=\\\"paradigm\\\"\\n unique-id=\\\"verbParadigm3\\\"\\n input-element.from-view=\\\"paradigm3InputElement\\\"\\n validator.to-view=\\\"validator\\\"\\n validated-events=\\\"input\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n on-blur.call=\\\"handleVerbParadigm3BlurEvent()\\\"\\n i18n=\\\"[label]main:verbLemmaParadigm3;[placeholder]main:verbLemmaParadigm3PH\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n fieldname-i18n-key=\\\"main:verbLemmaParadigm3\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\">\\n </form-input-field>\\n </div>\\n\\n <!--remove short/long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <remove-tonic-accent input-element.to-view=\\\"paradigm3InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm3\\\">\\n </remove-tonic-accent>\\n </div>\\n\\n <!--add short tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <short-tonic-accent input-element.to-view=\\\"paradigm3InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm3\\\">\\n </short-tonic-accent>\\n </div>\\n\\n <!--add long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <long-tonic-accent input-element.to-view=\\\"paradigm3InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm3\\\">\\n </long-tonic-accent>\\n </div>\\n </div>\\n\\n <!--hint-->\\n <div class=\\\"uk-margin-remove \\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n show.bind=\\\"showParadigm3InputFieldHint\\\">\\n <form-input-field-hint main-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.main\\\"\\n help-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.help\\\"\\n div-classes=\\\"uk-alert uk-margin-remove\\\">\\n </form-input-field-hint>\\n </div>\\n\\n <!--paradigm4 (infinitive form) input field-->\\n <div class=\\\"uk-width-1-1\\n uk-flex uk-flex-bottom\\n uk-margin-small-top\\n uk-padding-smaller-left uk-padding-smaller-right\\\">\\n <div class=uk-width-expand\\\">\\n <form-input-field type=\\\"text\\\"\\n data.to-view=\\\"rawFormData\\\"\\n value.two-way=\\\"rawFormData.paradigm[4]\\\"\\n property-name=\\\"paradigm\\\"\\n unique-id=\\\"verbParadigm4\\\"\\n input-element.from-view=\\\"paradigm4InputElement\\\"\\n validator.to-view=\\\"validator\\\"\\n validated-events=\\\"input\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n on-blur.call=\\\"handleVerbParadigm4BlurEvent()\\\"\\n i18n=\\\"[label]main:verbLemmaParadigm4;[placeholder]main:verbLemmaParadigm4PH\\\"\\n i18n-params.bind=\\\"i18nParams\\\"\\n fieldname-i18n-key=\\\"main:verbLemmaParadigm4\\\"\\n autocomplete=\\\"off\\\"\\n autocorrect=\\\"off\\\">\\n </form-input-field>\\n </div>\\n\\n <!--remove short/long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <remove-tonic-accent input-element.to-view=\\\"paradigm4InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm4\\\">\\n </remove-tonic-accent>\\n </div>\\n\\n <!--add short tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <short-tonic-accent input-element.to-view=\\\"paradigm4InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm4\\\">\\n </short-tonic-accent>\\n </div>\\n\\n <!--add long tonic accent-->\\n <div class=\\\"uk-width-auto\\\"\\n style=\\\"position: relative; bottom: 0.25em\\\">\\n <long-tonic-accent input-element.to-view=\\\"paradigm4InputElement\\\"\\n link-classes=\\n \\\"uk-link uk-link-heading uk-margin-smaller-left\\\"\\n unique-id=\\\"verbParadigm4\\\">\\n </long-tonic-accent>\\n </div>\\n </div>\\n\\n <!--hint-->\\n <div class=\\\"uk-margin-remove \\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n show.bind=\\\"showParadigm4InputFieldHint\\\">\\n <form-input-field-hint main-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.main\\\"\\n help-i18n-key=\\n \\\"[html]dialogs:createLemma.hints.noTonicAccent.help\\\"\\n div-classes=\\\"uk-alert uk-margin-remove\\\">\\n </form-input-field-hint>\\n </div>\\n\\n <!-- Paradigm recap -->\\n <div class=\\\"uk-width-1-1 \\n uk-padding-smaller-left uk-padding-smaller-right\\\"\\n show.bind=\\\"lemmaParadigmItemsAvailable\\\">\\n <div class=\\\"uk-text uk-text-small\\\">\\n ${\\\"main:inFull\\\" & t: i18nParams}:\\n </div>\\n <div class=\\\"uk-flex uk-flex-left uk-flex-top\\\">\\n <div class=\\\"uk-width-auto\\n uk-text uk-text-bold \\n uk-margin-smallerer-right\\\"\\n repeat.for=\\\"lemmaParadigmItem of lemmaParadigmItems\\\">\\n ${lemmaParadigmItem || \\\"…\\\"}${$last ? \\\"\\\" : \\\",\\\"}\\n </div>\\n </div>\\n </div>\\n </fieldset>\\n\\n <!--boolean checkbox fields-->\\n <div class=\\\"uk-width-1-1\\n uk-margin-small-top uk-margin-small-bottom\\n uk-padding-remove\\\">\\n <!--isTransitive checkbox field-->\\n <form-checkbox-field value.two-way=\\\"rawFormData.isTransitive\\\"\\n property-name=\\\"isTransitive\\\"\\n unique-id=\\\"verbIsTransitive\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n div-classes=\\\"uk-margin-remove-bottom\\\"\\n i18n=\\\"[label]main:isTransitive\\\">\\n </form-checkbox-field>\\n \\n <!--isIntransitive checkbox field-->\\n <form-checkbox-field value.two-way=\\\"rawFormData.isIntransitive\\\"\\n property-name=\\\"isIntransitive\\\"\\n unique-id=\\\"verbIsIntransitive\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n div-classes=\\n \\\"uk-margin-remove-top uk-margin-remove-bottom\\\"\\n i18n=\\\"[label]main:isIntransitive\\\">\\n </form-checkbox-field>\\n \\n <!--isAnomalous checkbox field-->\\n <form-checkbox-field value.two-way=\\\"rawFormData.isAnomalous\\\"\\n property-name=\\\"isAnomalous\\\"\\n unique-id=\\\"verbIsAnomalous\\\"\\n event-service.to-view=\\\"eventService\\\"\\n published-events=\\\"change\\\"\\n div-classes=\\\"uk-margin-remove-top\\\"\\n i18n=\\\"[label]main:isAnomalous\\\"\\n show.bind=\\\"showIsAnomalousField\\\">\\n </form-checkbox-field>\\n </div>\\n\\n <!--lemma inflections-->\\n <div class=\\\"uk-width-1-1 \\n uk-margin-remove uk-padding-remove\\\"\\n show.bind=\\\"lemmaDataReady && lemmaDataValid\\\">\\n <lemma-inflections in-element-data.to-view=\\\"inElementData\\\"\\n run-mode.to-view=\\\"runMode\\\">\\n </lemma-inflections>\\n </div>\\n\\n <!--lemma definitions-->\\n <div class=\\\"uk-width-1-1 \\n uk-margin-remove uk-padding-remove\\\"\\n show.bind=\\\"lemmaDataReady && lemmaDataValid && showLemmaDefinitions\\\">\\n <lemma-definitions lemma-data.to-view=\\\"lemmaData\\\"\\n run-mode.to-view=\\\"runMode\\\">\\n </lemma-definitions>\\n </div>\\n\\n </div>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <!--import components-->\\n <require from=\\\"components/private/lemma-paradigm\\\"></require>\\n <require from=\\\"components/private/verb-properties\\\"></require>\\n <require from=\\\"components/private/inflection-cathegory\\\"></require>\\n\\n <!--debug info line-->\\n <div class=\\\"uk-text uk-text-small uk-text-debug\\\"\\n if.bind=\\\"runMode === 'dev'\\\">\\n lemma/${lemmaKey || '???'}\\n </div>\\n\\n <div class=\\\"uk-text-nowrap\\\"\\n if.bind=\\\"lemmaData && lemmaCathegory === 'vrb'\\\">\\n <lemma-paradigm lemma-data.to-view=\\\"lemmaData\\\"\\n classes=\\\"uk-text-bold\\\"\\n suffix-text=\\\":\\\">\\n </lemma-paradigm>\\n\\n <inflection-cathegory inflection-cathegory.to-view=\\\"lemmaCathegory\\\"\\n classes=\\\"uk-text-italic\\\">\\n </inflection-cathegory>\\n\\n <verb-properties lemma-data.to-view=\\\"lemmaData\\\"\\n classes=\\\"uk-text-italic\\\">\\n </verb-properties>\\n </div>\\n\\n</template>\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"<template>\\n\\n <span class=\\\"uk-text uk-text-light uk-text-italic\\n uk-margin-remove uk-padding-remove\\n ${classes}\\\"\\n if.bind=\\\"lemmaData && lemmaCathegory === 'vrb'\\\">\\n\\n <!--anomalous-->\\n <span if.bind=\\\"lemmaData.isAnomalous\\\"\\n tabindex=\\\"-1\\\"\\n i18n=\\\"[uk-tooltip]enums:longVerbProperties.anomalous;enums:shortVerbProperties.anomalous\\\">\\n </span>\\n\\n <!--transitive-->\\n <span if.bind=\\\"lemmaData.isTransitive\\\"\\n tabindex=\\\"-1\\\"\\n i18n=\\\"[uk-tooltip]enums:longVerbProperties.transitive;enums:shortVerbProperties.transitive\\\">\\n </span>\\n\\n <!--transitive/intransitive conjunction-->\\n <span if.bind=\\\"lemmaData.transitive && lemmaData.intransitive\\\">\\n ${\\\"main:and\\\" & t}\\n </span>\\n\\n <!--intransitive-->\\n <span if.bind=\\\"lemmaData.isIntransitive\\\"\\n tabindex=\\\"-1\\\"\\n i18n=\\\"[uk-tooltip]enums:longVerbProperties.intransitive;enums:shortVerbProperties.intransitive\\\">\\n </span>\\n\\n </span>\\n\\n</template>\\n\";\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}