{"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":""}