{"version":3,"file":"app-1fe8e51e.981ca8458d389c9a476a.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAKA;AAPA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;;AAGA;AACA;AACA;AAEA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACnBA;;AAEA;AACA;;AAGA;AACA;AAGA;AAAA;AACA;AAAA;AAJA;AAEA;AAAA;AAAA;AAAA;AAIA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAVA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;ACXA;;AAEA;AACA;;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;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AArBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AClBA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAKA;AAPA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;;AAGA;AACA;AACA;AAEA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACnBA;;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;;AAKA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAiBA;AAnBA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;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;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;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;AA9PA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;ACzDA;;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;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AAIA;AACA;AAQA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAeA;AAzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAQA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;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;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;ACxDA;;AAEA;AACA;AACA;;AAOA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAMA;AAhBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AACA;AAIA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCA;;AAEA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AAIA;AACA;AAOA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAaA;AArBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AACA;AAMA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AAEA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AA9NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;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;;;;;;;;;;;;;;;;;;;;ACtDA;;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;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAKA;AAPA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;;AAGA;AACA;AACA;AAEA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACnBA;;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;AACA;;AAMA;AACA;AACA;AACA;AAIA;;AAMA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAiBA;AAnBA;AAAA;AAAA;AAIA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;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;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AADA;AACA;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;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;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AApSA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;ACxDA;;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;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AArCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AAIA;;AAIA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAcA;AAhBA;AAAA;AAAA;AAIA;AAAA;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;AAAA;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;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;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;AArIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/CA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AAIA;;AAIA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAiBA;AAnBA;AAAA;AAAA;AAIA;AAAA;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;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AAEA;AAKA;;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AADA;AACA;AACA;AACA;AACA;AACA;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;AA1LA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;AClDA;;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;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACfA;;AAEA;AACA;;AAEA;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;;;;;;;;;;;;;;;;;;;;;;ACVA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAGA;AACA;AAIA;AAAA;AACA;AAAA;AAKA;AAPA;AAAA;AAAA;AAIA;AAAA;AAIA;AACA;;AAGA;AACA;AACA;AAEA;;AAGA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAxCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;ACnBA;;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;;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;AACA;AAEA;AAAA;AAAA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AAIA;;AAIA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAAA;;AAIA;AACA;AAIA;AAAA;AACA;AAAA;AAcA;AAhBA;AAAA;AAAA;AAIA;AAAA;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;AAAA;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;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AAEA;AADA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AAEA;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;AArIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;AC/CA;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;;;;;;;;;;;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;;;;;;;;;;;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/mirror-inflection-item.js","webpack://latinera/./sources/components/private/mirror-inflector-item.js","webpack://latinera/./sources/components/private/mirror-lemma-item.js","webpack://latinera/./sources/components/private/noun-inflection-item.js","webpack://latinera/./sources/components/private/noun-inflector-item.js","webpack://latinera/./sources/components/private/noun-lemma-form.js","webpack://latinera/./sources/components/private/noun-lemma-item.js","webpack://latinera/./sources/components/private/out-element.js","webpack://latinera/./sources/components/private/out-sentence-item.js","webpack://latinera/./sources/components/private/out-sentence.js","webpack://latinera/./sources/components/private/parent-lemma-item.js","webpack://latinera/./sources/components/private/participle-inflection-item.js","webpack://latinera/./sources/components/private/participle-inflector-item.js","webpack://latinera/./sources/components/private/participle-lemma-form.js","webpack://latinera/./sources/components/private/participle-lemma-item.js","webpack://latinera/./sources/components/private/prefix-lemma-form.js","webpack://latinera/./sources/components/private/preposition-lemma-form.js","webpack://latinera/./sources/components/private/preposition-lemma-item.js","webpack://latinera/./sources/components/private/pronoun-class.js","webpack://latinera/./sources/components/private/pronoun-inflection-item.js","webpack://latinera/./sources/components/private/pronoun-inflector-item.js","webpack://latinera/./sources/components/private/pronoun-lemma-item.js","webpack://latinera/./sources/components/private/suffix-lemma-form.js","webpack://latinera/./sources/components/private/mirror-inflection-item.html","webpack://latinera/./sources/components/private/mirror-inflector-item.html","webpack://latinera/./sources/components/private/mirror-lemma-item.html","webpack://latinera/./sources/components/private/noun-inflection-item.html","webpack://latinera/./sources/components/private/noun-inflector-item.html","webpack://latinera/./sources/components/private/noun-lemma-form.html","webpack://latinera/./sources/components/private/noun-lemma-item.html","webpack://latinera/./sources/components/private/out-element.html","webpack://latinera/./sources/components/private/out-sentence-item.html","webpack://latinera/./sources/components/private/out-sentence.html","webpack://latinera/./sources/components/private/parent-lemma-item.html","webpack://latinera/./sources/components/private/participle-inflection-item.html","webpack://latinera/./sources/components/private/participle-inflector-item.html","webpack://latinera/./sources/components/private/participle-lemma-form.html","webpack://latinera/./sources/components/private/participle-lemma-item.html","webpack://latinera/./sources/components/private/prefix-lemma-form.html","webpack://latinera/./sources/components/private/preposition-lemma-form.html","webpack://latinera/./sources/components/private/preposition-lemma-item.html","webpack://latinera/./sources/components/private/pronoun-class.html","webpack://latinera/./sources/components/private/pronoun-inflection-item.html","webpack://latinera/./sources/components/private/pronoun-inflector-item.html","webpack://latinera/./sources/components/private/pronoun-lemma-item.html","webpack://latinera/./sources/components/private/suffix-lemma-form.html"],"sourcesContent":["// Define the view-model for the \"mirror-inflection-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom, inject } from \"aurelia-framework\";\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 \"MirrorInflectionItem\" class\n@inject(UserService)\nexport class MirrorInflectionItem {\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(userService) {\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.type\")\n get inflectionType() {\n const { type: inflectionType = \"\" } = this.inflectionData || {};\n return inflectionType;\n }\n @computedFrom(\"inflectionData.cathegory\")\n get inflectionCathegory() {\n const { cathegory: inflectionCathegory = \"?\" } = this.inflectionData || {};\n return inflectionCathegory;\n }\n\n}\n","// Define the view-model for the \"mirror-inflector-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\n\n\n// Export MirrorInflectorItem class\nexport class MirrorInflectorItem {\n\n // Attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) inflectorData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n // Getter and setter methods\n @computedFrom(\"inflectorData.type\")\n get inflectorType() {\n const { type: inflectorType = \"\" } = this.inflectorData || {};\n return inflectorType;\n }\n\n}\n","// Define the view-model for the \"mirror-lemma-item\" component\n\n// Import library modules\nimport { bindable, bindingMode, computedFrom } from \"aurelia-framework\";\n\n// Import utility modules\nimport { computeLemmaType } from \"utilities/lemma\";\n\n// Import parameter modules\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n\n// Export the \"MirrorLemmaItem\" class\nexport class MirrorLemmaItem {\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 lemmaType() {\n return computeLemmaType(this.lemmaData || {});\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 \"noun-inflection-item\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\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 \"NounInflectionItem\" class\n@inject(UserService)\nexport class NounInflectionItem {\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(userService) {\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.declension\")\n get inflectionDeclension() {\n const { declension: inflectionDeclension = \"?\" } = this.inflectionData || {};\n return inflectionDeclension;\n }\n @computedFrom(\"inflectionData.variant\")\n get inflectionVariant() {\n const { variant: inflectionVariant = \"\" } = this.inflectionData || {};\n return inflectionVariant;\n }\n\n}\n","// Define the view-model for the \"noun-inflector-item\" component\n\n// Import library modules\nimport { bindable, bindingMode } from \"aurelia-framework\";\n\n\n// Export NounInflectorItem class\nexport class NounInflectorItem {\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 \"noun-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 shortLemmaGenders,\n nounLemmaInputFormData as defaultNounLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst isSingularRegExps = [ /(a|us|er|ir|[lnrstxeo]|u|es)$/, /(ae|i|is|us|es)$/ ];\nconst isPluralRegExps = [ /(ae|i|es|us|ua|ei)$/, /(arum|orum|i?um|uum|erum)$/ ];\nconst eventsData = [\n { name: \"nounParadigm0Changed\" },\n { name: \"nounParadigm1Changed\" },\n { name: \"nounGenderChanged\" },\n { name: \"nounIsSingularOnlyChanged\" },\n { name: \"nounIsPluralOnlyChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export NounLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class NounLemmaForm {\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(defaultNounLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n showParadigm0InputFieldHint = false;\n showParadigm1InputFieldHint = false;\n showIsSingularOnlyField = false;\n showIsPluralOnlyField = 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: \"nounLemmaForm\",\n eventService: this.eventService,\n eventsData\n });\n\n const lemmaGendersData = shortLemmaGenders\n .map(shortLemmaGender => ({\n value: shortLemmaGender,\n text: this.i18n.tr(`enums:longInflectionGender.${shortLemmaGender}`)\n }));\n const nullLemmaGenderData = {\n value: null,\n text: this.i18n.tr(`main:none`)\n };\n this.lemmaGendersData = [ ...lemmaGendersData, nullLemmaGenderData ];\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.gender\")\n get lemmaGender() {\n const { gender: lemmaGender = \"\" } = this.rawFormData || {};\n return lemmaGender;\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(lemmaParadigmItem => lemmaParadigmItem !== \"\");\n const lemmaGenderReady = this.lemmaGender !== null;\n this.lemmaDataReady =\n lemmaTextReady && lemmaParadigmReady && lemmaGenderReady;\n }\n\n updateShowIsSingularOrPluralOnlyFields() {\n const plainLemmaParadigmItems = this.rawFormData.paradigm\n .map(lemmaParadigmItem => removeTonicAccents(lemmaParadigmItem || \"\"));\n const isSingularScore = plainLemmaParadigmItems\n .reduce((accIsSingularScore, plainLemmaParadigmItem, index) => {\n const isSingularRegExp = isSingularRegExps[index];\n return accIsSingularScore +\n (isSingularRegExp.test(plainLemmaParadigmItem) ? 1 : 0);\n }, 0);\n const isPluralScore = plainLemmaParadigmItems\n .reduce((accIsPluralLemmaScore, plainLemmaParadigmItem, index) => {\n const isPluralRegExp = isPluralRegExps[index];\n return accIsPluralLemmaScore +\n (isPluralRegExp.test(plainLemmaParadigmItem) ? 1 : 0);\n }, 0);\n this.showIsSingularOnlyField = isSingularScore > isPluralScore;\n this.showIsPluralOnlyField = isPluralScore > isSingularScore;\n this.rawFormData.isPluralOnly = this.showIsPluralOnlyField;\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(this.lemmaText)),\n paradigm: this.lemmaParadigmItems.map(lemmaParadigmItem => {\n return normalizeWords(optimizeSpaces(lemmaParadigmItem));\n })\n }\n }\n\n\n // Event handlers\n // note1: do not automatically convert paradigm items of nouns to \n // lower-case because they could be capitalized (e.g. Roma,ae)\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 handleNounParadigm0ChangedEvent({\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 this.updateShowIsSingularOrPluralOnlyFields();\n this.showParadigm0InputFieldHint = lemmaParadigmItem0.length > 0 && \n !hasTonicAccents(lemmaParadigmItem0);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleNounParadigm0BlurEvent() {\n this.showParadigm0InputFieldHint = false;\n this.optimizeFormTextFieldsSpaces();\n this.updateShowIsSingularOrPluralOnlyFields();\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 handleNounParadigm1ChangedEvent({\n newValue: lemmaParadigmItem1 = \"\"\n }) {\n const paradigm = clone(this.rawFormData.paradigm);\n paradigm[1] = lemmaParadigmItem1;\n this.rawFormData.paradigm = paradigm;\n this.updateShowIsSingularOrPluralOnlyFields();\n this.showParadigm1InputFieldHint = lemmaParadigmItem1.length > 0 && \n !hasTonicAccents(lemmaParadigmItem1);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleNounParadigm1BlurEvent() {\n this.showParadigm1InputFieldHint = false;\n this.optimizeFormTextFieldsSpaces();\n this.updateShowIsSingularOrPluralOnlyFields();\n const lemmaParadigmItem1 = this.lemmaParadigmItems.at(1) || \"\";\n this.showParadigm1InputFieldHint = lemmaParadigmItem1.length > 0 && \n !hasTonicAccents(lemmaParadigmItem1);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleNounGenderChangedEvent({\n newValue: lemmaGender\n }) {\n this.rawFormData.gender = lemmaGender;\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleNounIsSingularOnlyChangedEvent({\n newValue: isSingularOnly\n }) {\n this.rawFormData.isSingularOnly = isSingularOnly;\n if (isSingularOnly) {\n this.rawFormData.isPluralOnly = false;\n }\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleNounIsPluralOnlyChangedEvent({\n newValue: isPluralOnly\n }) {\n this.rawFormData.isPluralOnly = isPluralOnly;\n if (isPluralOnly) {\n this.rawFormData.isSingularOnly = false;\n }\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 \"noun-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 \"NounLemmaItem\" class\nexport class NounLemmaItem {\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 @computedFrom(\"lemmaData.gender\")\n get lemmaGender() {\n const { gender: lemmaGender = \"\" } = this.lemmaData || {};\n return lemmaGender;\n }\n\n}\n","// Define the view-model for the \"out-element\" component\n\n// Import library modules\nimport { Validator } from \"aurelia-validation\";\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport {\n normalizeMarks,\n normalizeWords\n} from \"utilities/sentence\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { processInputFieldChangeEventAfterMs } from \"parameters/time\";\n\n// Import service modules\nimport EventService from \"services/event\";\nimport ElementService from \"services/element\";\n\n// Define internal parameters\nconst adjustTextAreaStepMs = 50;\nconst adjustTextAreaStopMs = 1000;\nconst eventsData = [\n { name: \"analysisActivityDataChanged\", filterBy: \"analysisKey\" },\n { name: \"screenResized\", showDebugs: false }\n];\n\n\n// Export the \"OutElement\" class\n@inject(\n Validator,\n EventService,\n ElementService\n)\nexport class OutElement {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView })\n outElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView })\n outElementMetaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) inElementData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) cardIndex = -1;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n localOutElementText = \"\";\n localValidationErrorsData = [];\n textAreaData = {\n width: \"auto\",\n height: \"auto\",\n maxWidth: \"10em\",\n lineHeight: 1.15, // relative to font-size\n maxLength: 64\n };\n eventsSubscriptions = [];\n i18nParams = i18nParams;\n\n constructor(\n validator,\n eventService,\n elementService\n ) {\n this.validator = validator;\n this.eventService = eventService;\n this.elementService = elementService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"outElement\",\n entityKey: this.outElementInitData ? \n this.outElementInitData.key : this.outElementInitKey,\n eventService: this.eventService,\n eventsData\n });\n\n this.localOutElementText = this.outElementText;\n await this.validateOutElementData();\n }\n\n async attached() {\n // Keeps adjusting text area size until it stabilizes\n let adjustTextAreaElapsedTimeMs = 0;\n let currWidth, currHeight, prevWidth, prevHeight;\n do {\n await pause(adjustTextAreaStepMs);\n adjustTextAreaElapsedTimeMs += adjustTextAreaStepMs;\n prevWidth = currWidth;\n prevHeight = currHeight;\n this.adjustTextAreaSize();\n ({\n width: currWidth = \"auto\",\n height: currHeight = \"auto\"\n } = this.textAreaData || {});\n } while(\n (currWidth !== prevWidth || currHeight !== prevHeight) &&\n adjustTextAreaElapsedTimeMs < adjustTextAreaStopMs\n );\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"outElementData.key\")\n get outElementKey() {\n const { key: outElementKey = \"\" } = this.outElementData || {};\n return outElementKey;\n }\n @computedFrom(\"outElementData.type\")\n get outElementType() {\n const { type: outElementType = \"\" } = this.outElementData || {};\n return outElementType;\n }\n @computedFrom(\"outElementData.text\")\n get outElementText() {\n const { text: outElementText = \"\" } = this.outElementData || {};\n return outElementText;\n }\n @computedFrom(\"outElementData.localeCode\")\n get outElementLocaleCode() {\n const { localeCode: outElementLocaleCode = \"\" } = this.outElementData || {};\n return outElementLocaleCode;\n }\n\n @computedFrom(\"outElementMetaData.savedText\")\n get savedOutElementText() {\n const { \n savedText: savedOutElementText = \"\" \n } = this.outElementMetaData || {};\n return savedOutElementText;\n }\n @computedFrom(\"localOutElementText\", \"savedOutElementText\") \n get localOutElementDataModified() {\n return this.localOutElementText !== this.savedOutElementText;\n }\n @computedFrom(\"localValidationErrorsData\")\n get localOutElementDataValid() {\n return this.localValidationErrorsData.length === 0;\n }\n @computedFrom(\"localOutElementDataModified\", \"localOutElementDataValid\")\n get outElementTextClasses() {\n return !this.localOutElementDataValid ? \"uk-text-danger\" :\n this.localOutElementDataModified ? \"uk-text-modified\" : \"\";\n }\n\n @computedFrom(\"inElementData.text\")\n get inElementText() {\n const { text: inElementText = \"\" } = this.inElementData || {};\n return inElementText;\n }\n @computedFrom(\"inElementText\")\n get insertInElementTranslationI18nParams() {\n return { i18nParams, inElementText: this.inElementText };\n }\n\n\n // Core methods\n async validateOutElementData() {\n const outElementValidationData = {\n _schemaId: \"element.createInput\",\n elementData: {\n text: this.localOutElementText,\n type: this.outElementType,\n localeCode: this.outElementLocaleCode\n }\n };\n const localValidationErrorsData =\n await this.validator.validateObject(outElementValidationData);\n this.localValidationErrorsData = localValidationErrorsData\n .map(errorData => ({ error: errorData }));\n }\n\n adjustTextAreaSize() {\n if (this.shadowTextAreaElement) {\n const { scrollWidth, scrollHeight } = this.shadowTextAreaElement;\n this.textAreaData.width = `${scrollWidth}px`;\n this.textAreaData.height = `${scrollHeight}px`;\n } else {\n this.textAreaData.width = \"auto\";\n this.textAreaData.height = \"auto\";\n }\n }\n\n\n // Event filters\n filterEventByAnalysisKey({ analysisKey = \"\" }) {\n return analysisKey === this.analysisKey;\n }\n\n\n // Event handlers\n async handleOutElementTextFocusEvent() {\n this.adjustTextAreaSize();\n }\n async handleOutElementTextInputEvent() {\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateOutElementData();\n this.adjustTextAreaSize();\n if (this.localOutElementText !== this.outElementText) {\n this.publishChangeOutElementTextEvent();\n }\n }\n async handleOutElementTextBlurEvent() {\n this.localOutElementText = optimizeSpaces(this.localOutElementText);\n this.localOutElementText = normalizeMarks(this.localOutElementText);\n this.localOutElementText = normalizeWords(this.localOutElementText);\n this.adjustTextAreaSize();\n await this.validateOutElementData();\n if (this.localOutElementText !== this.outElementText) {\n this.publishChangeOutElementTextEvent();\n }\n }\n\n handleAnalysisActivityDataChangedEvent() {\n this.localOutElementText = this.outElementText;\n }\n\n handleScreenResizedEvent() {\n this.adjustTextAreaSize();\n }\n\n\n // Event publishers\n publishChangeOutElementTextEvent() {\n this.eventService.publish({\n eventName: \"changeOutElementText\",\n eventData: {\n outElementKey: this.outElementKey,\n outElementText: this.localOutElementText,\n outElementDataModified: this.localOutElementDataModified,\n outElementDataValid: this.localOutElementDataValid,\n activityKey: this.activityKey,\n analysisKey: this.analysisKey,\n cardIndex: this.cardIndex\n }\n });\n }\n\n}\n","// Define the view-model for the \"out-sentence-item\" component\n\n// Import library modules\nimport { I18N } from \"aurelia-i18n\";\nimport {\n inject,\n bindable,\n bindingMode,\n computedFrom\n} 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\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [];\n\n\n// Export the \"OutSentenceItem\" class\n@inject(EventService, I18N)\nexport class OutSentenceItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.twoWay }) outSentenceData = null;\n @bindable({ defaultBindingMode: bindingMode.toView })\n textClasses = \"uk-text uk-text-light uk-text-break\";\n @bindable({ defaultBindingMode: bindingMode.toView })\n textStyles = \"line-height: 1.15\";\n @bindable({ defaultBindingMode: bindingMode.toView })\n emptyTextClasses = \"uk-text uk-text-meta uk-text-light uk-text-break\";\n @bindable({ defaultBindingMode: bindingMode.toView })\n emptyTextStyles = \"line-height: 1.15\";\n @bindable({ defaultBindingMode: bindingMode.twoWay }) runMode = defaultRunMode;\n\n // Local attributes\n i18nParams = i18nParams;\n isLoadingData = false;\n\n constructor(eventService, i18n) {\n this.eventService = eventService;\n this.i18n = i18n;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"outSentenceItem\",\n entityKey: this.outSentenceKey,\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(\"outSentenceData.key\")\n get outSentenceKey() {\n const { key: outSentenceKey } = this.outSentenceData || {};\n return outSentenceKey;\n }\n\n @computedFrom(\"outSentenceData.text\")\n get outSentenceText() {\n const { text: outSentenceText } = this.outSentenceData || {};\n return outSentenceText;\n }\n\n}\n","// Define the view-model for the \"out-sentence\" component\n\n// Import library modules\nimport { Validator } from \"aurelia-validation\";\nimport {\n bindable,\n bindingMode,\n computedFrom,\n inject\n} from \"aurelia-framework\";\n\n// Import utility modules\nimport { setEventHandlers, unsetEventHandlers } from \"utilities/event\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport {\n ensureTrailingMark,\n normalizeMarks,\n normalizeWords\n} from \"utilities/sentence\";\n\n// Import parameter modules\nimport { tBindingBehavior as i18nParams } from \"parameters/i18n\";\nimport { runMode as defaultRunMode } from \"parameters/environment\";\nimport { processInputFieldChangeEventAfterMs } from \"parameters/time\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst adjustTextAreaStepMs = 50;\nconst adjustTextAreaStopMs = 1000;\nconst eventsData = [\n { name: \"analysisActivityDataChanged\", filterBy: \"analysisKey\" },\n { name: \"setOutSentenceText\", filterBy: \"analysisKey\" },\n { name: \"screenResized\", showDebugs: false }\n];\n\n\n// Export the \"OutSentence\" class\n@inject(\n EventService,\n Validator,\n)\nexport class OutSentence {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) outSentenceData = null;\n @bindable({ defaultBindingMode: bindingMode.toView })\n outSentenceMetaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) inSentenceData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) activityKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) analysisKey = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) isEnabled = true;\n\n // Local attributes\n localOutSentenceText = \"\";\n localValidationErrorsData = [];\n textAreaData = {\n width: \"auto\",\n height: \"auto\",\n maxWidth: \"75%\",\n lineHeight: 1.15, // relative to font-size\n maxLength: 256\n };\n\n constructor(\n eventService,\n validator,\n ) {\n this.validator = validator;\n this.eventService = eventService;\n }\n\n\n // Lifecycle methods\n async bind() {\n this.eventsSubscriptions = setEventHandlers.call(this, {\n entityName: \"outSentence\",\n entityKey: this.outSentenceKey,\n eventService: this.eventService,\n eventsData\n });\n\n this.localOutSentenceText = this.outSentenceText;\n await this.validateOutSentenceData();\n }\n\n async attached() {\n // Keeps adjusting text area size until it stabilizes or timeout elapses\n let currWidth, currHeight, prevWidth, prevHeight;\n let adjustTextAreaElapsedTimeMs = 0;\n do {\n await pause(adjustTextAreaStepMs);\n adjustTextAreaElapsedTimeMs += adjustTextAreaStepMs;\n prevWidth = currWidth;\n prevHeight = currHeight;\n this.adjustTextAreaSize();\n ({\n width: currWidth = \"auto\",\n height: currHeight = \"auto\"\n } = this.textAreaData || {});\n } while(\n (currWidth !== prevWidth || currHeight !== prevHeight) &&\n adjustTextAreaElapsedTimeMs < adjustTextAreaStopMs\n );\n }\n\n unbind() {\n unsetEventHandlers.call(this, {\n eventsSubscriptions: this.eventsSubscriptions\n });\n }\n\n\n // Getter and setter methods\n @computedFrom(\"outSentenceData.key\")\n get outSentenceKey() {\n const { key: outSentenceKey = \"\" } = this.outSentenceData || {};\n return outSentenceKey;\n }\n @computedFrom(\"outSentenceData.text\")\n get outSentenceText() {\n const { text: outSentenceText = \"\" } = this.outSentenceData || {};\n return outSentenceText;\n }\n @computedFrom(\"outSentenceData.localeCode\")\n get outSentenceLocaleCode() {\n const { \n localeCode: outSentenceLocaleCode = \"\" \n } = this.outSentenceData || {};\n return outSentenceLocaleCode;\n }\n\n @computedFrom(\"outSentenceMetaData.savedText\") \n get savedOutSentenceText() {\n const { \n savedText: savedOutSentenceText = \"\" \n } = this.outSentenceMetaData || {};\n return savedOutSentenceText;\n }\n @computedFrom(\"localOutSentenceText\", \"savedOutSentenceText\")\n get localOutSentenceDataModified() {\n return this.localOutSentenceText !== this.savedOutSentenceText;\n }\n @computedFrom(\"localValidationErrorsData\")\n get localOutSentenceDataValid() {\n return this.localValidationErrorsData.length === 0;\n }\n @computedFrom(\"localOutSentenceDataModified\", \"localOutSentenceDataValid\")\n get outSentenceTextClasses() {\n return !this.localOutSentenceDataValid ? \"uk-text-danger\" :\n this.localOutSentenceDataModified ? \"uk-text-modified\" : \"\";\n }\n\n @computedFrom(\"inSentenceData.text\") \n get inSentenceText() {\n const { text: inSentenceText = \"\" } = this.inSentenceData || {};\n return inSentenceText;\n }\n @computedFrom(\"inSentenceText\") \n get inSentenceI18nParams() {\n return { ...i18nParams, inSentenceText: this.inSentenceText };\n }\n\n\n // Core methods\n async validateOutSentenceData() {\n const outSentenceValidationData = {\n _schemaId: \"sentence.createInput\",\n sentenceData: {\n text: this.localOutSentenceText,\n localeCode: this.outSentenceLocaleCode\n }\n };\n const localValidationErrorsData =\n await this.validator.validateObject(outSentenceValidationData);\n this.localValidationErrorsData = localValidationErrorsData\n .map(errorData => ({ error: errorData }));\n }\n\n adjustTextAreaSize() {\n if (this.shadowTextAreaElement) {\n const { scrollWidth, scrollHeight } = this.shadowTextAreaElement;\n this.textAreaData.width = `${scrollWidth}px`;\n this.textAreaData.height = `${scrollHeight}px`;\n } else {\n this.textAreaData.width = \"auto\";\n this.textAreaData.height = \"auto\";\n }\n }\n\n\n // Event filters\n filterEventByAnalysisKey({ analysisKey }) {\n return analysisKey === this.analysisKey;\n }\n\n\n // Event handlers\n handleOutSentenceTextFocusEvent() {\n this.adjustTextAreaSize();\n }\n\n async handleOutSentenceTextInputEvent() {\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateOutSentenceData();\n this.adjustTextAreaSize();\n if (this.localOutSentenceText !== this.outSentenceText) {\n this.publishChangeOutSentenceTextEvent();\n }\n }\n\n async handleOutSentenceTextBlurEvent() {\n this.localOutSentenceText = optimizeSpaces(this.localOutSentenceText);\n this.localOutSentenceText = normalizeMarks(this.localOutSentenceText);\n this.localOutSentenceText = normalizeWords(this.localOutSentenceText);\n this.localOutSentenceText = ensureTrailingMark({\n sentenceText: this.localOutSentenceText\n });\n this.adjustTextAreaSize();\n await this.validateOutSentenceData();\n if (this.localOutSentenceText !== this.outSentenceText) {\n this.publishChangeOutSentenceTextEvent();\n }\n }\n\n handleAnalysisActivityDataChangedEvent() {\n this.localOutSentenceText = this.outSentenceText;\n }\n\n async handleSetOutSentenceTextEvent({ outSentenceText = \"\" }) {\n outSentenceText = optimizeSpaces(outSentenceText);\n outSentenceText = normalizeMarks(outSentenceText);\n outSentenceText = normalizeWords(outSentenceText);\n this.localOutSentenceText = ensureTrailingMark({\n sentenceText: outSentenceText\n });\n console.info(`Setting output sentence text to ` +\n `\"${this.localOutSentenceText}\"`);\n this.adjustTextAreaSize();\n await this.validateOutSentenceData();\n if (this.localOutSentenceText !== this.outSentenceText) {\n this.publishChangeOutSentenceTextEvent();\n }\n }\n\n handleScreenResizedEvent() {\n this.adjustTextAreaSize();\n }\n\n\n // Event publishers\n publishChangeOutSentenceTextEvent(eventData) {\n this.eventService.publish({\n eventName: \"changeOutSentenceText\",\n eventData: {\n outSentenceKey: this.outSentenceKey,\n outSentenceText: this.localOutSentenceText,\n outSentenceDataModified: this.localOutSentenceDataModified,\n outSentenceDataValid: this.localOutSentenceDataValid,\n activityKey: this.activityKey,\n analysisKey: this.analysisKey,\n ...(eventData || {})\n }\n });\n }\n\n}\n","// Define the view-model for the \"parent-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 \"ParentLemmaItem\" class\nexport class ParentLemmaItem {\n\n // Bound attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) lemmaData = null;\n @bindable({ defaultBindingMode: bindingMode.toView }) runMode = defaultRunMode;\n @bindable({ defaultBindingMode: bindingMode.toView }) spanClasses = \"\";\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 \"participle-inflection-item\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\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 \"ParticipleInflectionItem\" class\n@inject(UserService)\nexport class ParticipleInflectionItem {\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(userService) {\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.tense\")\n get inflectionTense() {\n const { tense: inflectionTense = \"?\" } = this.inflectionData || {};\n return inflectionTense;\n }\n @computedFrom(\"inflectionData.degree\")\n get inflectionDegree() {\n const { degree: inflectionDegree = \"?\" } = this.inflectionData || {};\n return inflectionDegree;\n }\n\n}\n","// Define the view-model for the \"participle-inflector-item\" component\n\n// Import library modules\nimport { bindable, bindingMode } from \"aurelia-framework\";\n\n\n// Export ParticipleInflectorItem class\nexport class ParticipleInflectorItem {\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 \"participle-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 { hasTonicAccents } from \"utilities/latin\";\nimport { normalizeWords } from \"utilities/sentence\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport { clone } from \"utilities/etc\";\nimport {\n unsetFalsyProperties,\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 shortLemmaDegrees, \n shortLemmaTenses,\n participleLemmaInputFormData as defaultParticipleLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [\n { name: \"participleTenseChanged\" },\n { name: \"participleDegreeChanged\" },\n { name: \"participleParadigm0Changed\" },\n { name: \"participleParadigm1Changed\" },\n { name: \"participleParadigm2Changed\" },\n { name: \"participleFormsRegularComparativeChanged\" },\n { name: \"participleFormsRegularSuperlativeChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export ParticipleLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class ParticipleLemmaForm {\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(defaultParticipleLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n showParadigm0InputFieldHint = false;\n showParadigm1InputFieldHint = false;\n showParadigm2InputFieldHint = false;\n showFormsRegularCmpAndSup = 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: \"participleLemmaForm\",\n eventService: this.eventService,\n eventsData\n });\n\n const lemmaTensesData = shortLemmaTenses\n .map(lemmaTense => ({\n value: lemmaTense,\n text: this.i18n.tr(`enums:longInflectionTense.${lemmaTense}`)\n }));\n const nullLemmaTenseData = {\n value: null,\n text: this.i18n.tr(`main:none`)\n };\n this.lemmaDegreesData = this.computeLemmaDegreesData(\"pre\");\n this.lemmaTensesData = [ ...lemmaTensesData, nullLemmaTenseData ];\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 if (!this.rawFormData.paradigm[2]) {\n this.rawFormData.paradigm = this.rawFormData.paradigm.slice(0,2);\n }\n this.lemmaData = unsetProperties(this.rawFormData, [\"_schemaId\"]);\n this.lemmaData = unsetFalsyProperties(this.lemmaData);\n }\n\n updateLemmaDataReady() {\n const lemmaTextReady = this.lemmaText !== \"\";\n const lemmaDegreeReady = this.lemmaDegree !== null;\n const lemmaTenseReady = this.lemmaTense !== null;\n const lemmaParadigmReady = this.lemmaParadigmItems\n .every(lemmaParadigmItem => lemmaParadigmItem !== \"\");\n this.lemmaDataReady = lemmaTextReady && lemmaDegreeReady &&\n lemmaTenseReady && lemmaParadigmReady;\n }\n\n computeLemmaDataDigest() {\n this.updateLemmaData();\n return computeHash(`lemma-${toString(this.lemmaData)}`);\n }\n\n computeLemmaDegreesData(lemmaTense = \"pre\") {\n let allowedShortLemmaDegrees = [];\n switch (lemmaTense) {\n case \"pre\":\n case \"per\":\n allowedShortLemmaDegrees = shortLemmaDegrees;\n break;\n case \"fut\":\n allowedShortLemmaDegrees = [\"pos\"];\n break;\n default:\n console.warn(`Unknown lemma tense \"${lemmaTense}\"`);\n }\n const lemmaDegreesData = allowedShortLemmaDegrees\n .map(shortLemmaDegree => ({\n value: shortLemmaDegree,\n text: this.i18n.tr(`enums:longInflectionDegree.${shortLemmaDegree}`)\n }));\n const nullLemmaDegreeData = {\n value: null,\n text: this.i18n.tr(`main:none`)\n };\n return [ ...lemmaDegreesData, nullLemmaDegreeData ];\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(this.lemmaText)),\n paradigm: this.lemmaParadigmItems\n .map(lpItem => normalizeWords(optimizeSpaces(lpItem)))\n }\n }\n\n\n // Event handlers\n // note1: automatically converting paradigm items of participles 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 handleParticipleTenseChangedEvent({\n newValue: lemmaTense = null\n }) {\n this.rawFormData.tense = lemmaTense;\n if (lemmaTense === \"fut\") {\n this.rawFormData.degree = \"pos\";\n }\n this.lemmaDegreesData = this.computeLemmaDegreesData(lemmaTense);\n this.showFormsRegularCmpAndSup = this.rawFormData.degree === \"pos\" &&\n [ \"pre\", \"per\" ].includes(lemmaTense);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleParticipleDegreeChangedEvent({\n newValue: lemmaDegree = null\n }) {\n this.rawFormData.degree = lemmaDegree;\n this.showFormsRegularCmpAndSup = lemmaDegree === \"pos\" &&\n [ \"pre\", \"per\" ].includes(this.rawFormData.tense);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleParticipleParadigm0ChangedEvent({\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 this.showParadigm0InputFieldHint = lemmaParadigmItem0.length > 0 && \n !hasTonicAccents(lemmaParadigmItem0);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleParticipleParadigm0BlurEvent() {\n this.optimizeFormTextFieldsSpaces();\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 handleParticipleParadigm1ChangedEvent({\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 handleParticipleParadigm1BlurEvent() {\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 handleParticipleParadigm2ChangedEvent({\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 handleParticipleParadigm2BlurEvent() {\n this.showParadigm2InputFieldHint = false;\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 handleParticipleFormsRegularComparativeChangedEvent({\n newValue: formsRegularComparative\n }) {\n this.rawFormData.formsRegularComparative = formsRegularComparative;\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handleParticipleFormsRegularSuperlativeChangedEvent({\n newValue: formsRegularSuperlative\n }) {\n this.rawFormData.formsRegularSuperlative = formsRegularSuperlative;\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 \"participle-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 \"ParticipleLemmaItem\" class\nexport class ParticipleLemmaItem {\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 @computedFrom(\"lemmaData.tense\")\n get lemmaTense() {\n const { tense: lemmaTense = \"\" } = this.lemmaData || {};\n return lemmaTense;\n }\n @computedFrom(\"lemmaData.form\")\n get lemmaForm() {\n const { form: lemmaForm = \"\" } = this.lemmaData || {};\n return lemmaForm;\n }\n @computedFrom(\"lemmaData.degree\")\n get lemmaDegree() {\n const { degree: lemmaDegree = \"\" } = this.lemmaData || {};\n return lemmaDegree;\n }\n @computedFrom(\"lemmaData.parentLemma\")\n get parentLemmaData() {\n const { parentLemma: parentLemmaData = null } = this.lemmaData || {};\n return parentLemmaData;\n }\n\n}\n","// Define the view-model for the \"prefix-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 { hasTonicAccents } from \"utilities/latin\";\nimport { normalizeWords } from \"utilities/sentence\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { clone } from \"utilities/etc\";\nimport { pause } from \"utilities/promise\";\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 prefixLemmaInputFormData as defaultPrefixLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [\n { name: \"prefixTextChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export PrefixLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class PrefixLemmaForm {\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(defaultPrefixLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n showTextInputFieldHint = 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: \"prefixLemmaForm\",\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 set lemmaText(newLemmaText = \"\") {\n this.rawFormData.text = newLemmaText;\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 this.lemmaDataReady = lemmaTextReady;\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\n // Event handlers\n // note1: automatically converting paradigm items of prefixes to \n // lower-case because they cannot be capitalized\n async handlePrefixTextChangedEvent({\n newValue: lemmaText = \"\"\n }) {\n this.lemmaText = lemmaText;\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handlePrefixTextBlurEvent() {\n this.lemmaText = normalizeWords(optimizeSpaces(\n (this.lemmaText || \"\").toLowerCase()\n ));\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldBlurEventAfterMs);\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 \"preposition-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 { hasTonicAccents } from \"utilities/latin\";\nimport { normalizeWords } from \"utilities/sentence\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport { clone } from \"utilities/etc\";\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 prepositionLemmaInputFormData as defaultPrepositionLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [\n { name: \"prepositionTextChanged\" },\n { name: \"prepositionHoldsDativeCaseChanged\" },\n { name: \"prepositionHoldsAccusativeCaseChanged\" },\n { name: \"prepositionHoldsAblativeCaseChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export PrepositionLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class PrepositionLemmaForm {\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(defaultPrepositionLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n holdsDativeCase = false;\n holdsAccusativeCase = false;\n holdsAblativeCase = false;\n showTextInputFieldHint = 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: \"prepositionLemmaForm\",\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 set lemmaText(newLemmaText = \"\") {\n this.rawFormData.text = newLemmaText;\n }\n\n @computedFrom(\"holdsDativeCase\", \"holdsAccusativeCase\", \"holdsAblativeCase\")\n get lemmaHoldCases() {\n return [\n ...(this.holdsDativeCase ? [ \"dat\" ] : []),\n ...(this.holdsAccusativeCase ? [ \"acc\" ] : []),\n ...(this.holdsAblativeCase ? [ \"abl\" ] : []) \n ];\n }\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 this.lemmaDataReady = lemmaTextReady;\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\n // Event handlers\n // note1: automatically converting paradigm items of prepositions to \n // lower-case because they cannot be capitalized\n async handlePrepositionTextChangedEvent({\n newValue: lemmaText = \"\"\n }) {\n this.lemmaText = lemmaText;\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handlePrepositionTextBlurEvent() {\n this.showTextInputFieldHint = false;\n this.lemmaText = normalizeWords(optimizeSpaces(\n (this.lemmaText || \"\").toLowerCase()\n ));\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldBlurEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handlePrepositionHoldsDativeCaseChangedEvent({\n newValue: holdsDativeCase = false\n }) {\n this.holdsDativeCase = holdsDativeCase;\n if (this.lemmaHoldCases.length > 0) {\n this.rawFormData.holdCases = this.lemmaHoldCases;\n } else {\n this.rawFormData = unsetProperties(this.rawFormData, [\"holdCases\"]);\n }\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handlePrepositionHoldsAccusativeCaseChangedEvent({\n newValue: holdsAccusativeCase = false\n }) {\n this.holdsAccusativeCase = holdsAccusativeCase;\n if (this.lemmaHoldCases.length > 0) {\n this.rawFormData.holdCases = this.lemmaHoldCases;\n } else {\n this.rawFormData = unsetProperties(this.rawFormData, [\"holdCases\"]);\n }\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n\n async handlePrepositionHoldsAblativeCaseChangedEvent({\n newValue: holdsAblativeCase = false\n }) {\n this.holdsAblativeCase = holdsAblativeCase;\n if (this.lemmaHoldCases.length > 0) {\n this.rawFormData.holdCases = this.lemmaHoldCases;\n } else {\n this.rawFormData = unsetProperties(this.rawFormData, [\"holdCases\"]);\n }\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 \"preposition-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 \"PrepositionLemmaItem\" class\nexport class PrepositionLemmaItem {\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 @computedFrom(\"lemmaData.holdCases\")\n get holdCases() {\n const { holdCases = [] } = this.lemmaData || {};\n return holdCases;\n }\n\n}\n","// Define the view-model for the \"pronoun-class\" component\n\n// Import library modules\nimport { bindable, bindingMode } from \"aurelia-framework\";\n\n// Export PronounClass class\nexport class PronounClass {\n\n // Attributes\n @bindable({ defaultBindingMode: bindingMode.toView }) pronounClass = \"\";\n @bindable({ defaultBindingMode: bindingMode.toView }) classes = \"\";\n\n}\n","// Define the view-model for the \"pronoun-inflection-item\" component\n\n// Import library modules\nimport { inject, bindable, bindingMode, computedFrom } from \"aurelia-framework\";\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 \"PronounInflectionItem\" class\n@inject(UserService)\nexport class PronounInflectionItem {\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(userService) {\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.class\")\n get inflectionClass() {\n const { class: inflectionClass = \"?\" } = this.inflectionData || {};\n return inflectionClass;\n }\n @computedFrom(\"inflectionData.variant\")\n get inflectionVariant() {\n const { variant: inflectionVariant = \"\" } = this.inflectionData || {};\n return inflectionVariant;\n }\n\n}\n","// Define the view-model for the \"pronoun-inflector-item\" component\n\n// Import library modules\nimport { bindable, bindingMode } from \"aurelia-framework\";\n\n\n// Export PronounInflectorItem class\nexport class PronounInflectorItem {\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 \"pronoun-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 \"PronounLemmaItem\" class\nexport class PronounLemmaItem {\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 @computedFrom(\"lemmaData.class\")\n get lemmaClass() {\n const { class: lemmaClass = \"\" } = this.lemmaData || {};\n return lemmaClass;\n }\n\n}\n","// Define the view-model for the \"suffix-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 { hasTonicAccents } from \"utilities/latin\";\nimport { normalizeWords } from \"utilities/sentence\";\nimport { optimizeSpaces } from \"utilities/string\";\nimport { pause } from \"utilities/promise\";\nimport { clone } from \"utilities/etc\";\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 suffixLemmaInputFormData as defaultSuffixLemmaInputFormData\n} from \"parameters/lemma\";\n\n// Import service modules\nimport EventService from \"services/event\";\n\n// Define internal parameters\nconst eventsData = [\n { name: \"suffixTextChanged\" },\n { name: \"lemmaInflectionsChanged\" },\n];\n\n\n// Export SuffixLemmaForm class\n@inject(I18N, Validator, EventService)\nexport class SuffixLemmaForm {\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(defaultSuffixLemmaInputFormData);\n lemmaData = null;\n lemmaDataDigest = \"\";\n oldLemmaDataDigest = \"\";\n lemmaDataValid = false;\n lemmaDataReady = false;\n showTextInputFieldHint = 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: \"suffixLemmaForm\",\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 set lemmaText(newLemmaText = \"\") {\n this.rawFormData.text = newLemmaText;\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 this.lemmaDataReady = lemmaTextReady;\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\n // Event handlers\n // note1: automatically converting paradigm items of suffix to \n // lower-case because they cannot be capitalized\n async handleSuffixTextChangedEvent({\n newValue: lemmaText = \"\"\n }) {\n this.lemmaText = lemmaText;\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldChangeEventAfterMs);\n await this.validateLemmaData();\n this.conditionallyPublishLemmaDataChangedEvent();\n }\n async handleSuffixTextBlurEvent() {\n this.lemmaText = normalizeWords(optimizeSpaces(\n (this.lemmaText || \"\").toLowerCase()\n ));\n this.showTextInputFieldHint = this.lemmaText.length > 0 && \n !hasTonicAccents(this.lemmaText);\n await pause(processInputFieldBlurEventAfterMs);\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","// Module\nvar code = \"\\n\\n \\n \\n inflection/${inflectionKey || '???'}\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n\\n \\n ${\\\"main:notInflectable\\\" & t}\\n \\n\\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n
\\n\\n \\n \\n \\n\\n \\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n inflection/${inflectionKey || '???'}\\n
\\n\\n \\n \\n \\n ,\\n\\n \\n \\n \\n \\n ${\\\"main:declension\\\" & t}\\n \\n , \\n\\n \\n \\n \\n ${\\\"main:variant\\\" & t}\\n \\n \\n \\\"${inflectionVariant}\\\"\\n \\n \\n ${\\\"main:variant\\\" & t}\\n \\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n\\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n
\\n\\n \\n \\n \\n\\n \\n \\n\\n \\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n\\n \\n \\n outElement/${outElementKey || '???'} \\n ${localOutElementDataModified ? 'M' : ''}\\n ${localOutElementDataValid ? '' : 'I'}\\n
\\n\\n \\n \\n \\n
\\n\\n \\n \\n \\n \\n \\n
\\n
\\n ${localOutElementText}|\\n
\\n
\\n\\n \\n
\\n \\n
\\n
\\n\\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n \\n \\n\\n\\n \\n \\n \\n\\n \\n \\n \\n
\\n outSnt/${outSentenceKey || '???'}\\n
\\n\\n \\n
\\n ${outSentenceText | capitalizeFirst}\\n
\\n\\n \\n
\\n ${\\\"main:noTranslation\\\" & t}…\\n
\\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n\\n \\n \\n \\n
\\n outSentence/${outSentenceKey || '???'} \\n ${localOutSentenceDataModified ? 'M' : ''}\\n ${localOutSentenceDataValid ? '' : 'I'}\\n
\\n\\n \\n \\n \\n
\\n \\n
\\n
\\n ${localOutSentenceText}|\\n
\\n
\\n\\n \\n
\\n \\n
\\n
\\n\\n \\n
\\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n
\\n\\n \\n \\n \\n \\n ${lemmaData.text}\\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n inflection/${inflectionKey || '???'}\\n
\\n\\n \\n \\n \\n \\n\\n \\n \\n \\n , \\n\\n \\n \\n ${\\\"main:degree\\\" & t}\\n \\n \\n \\n \\n ${\\\"main:degree\\\" & t}\\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n
\\n\\n \\n
\\n \\n\\n
\\n \\n\\n
\\n \\n\\n
\\n \\n\\n
\\n \\n\\n
\\n ${\\\"main:ofThe\\\" & t}\\n \\n
\\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n
\\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n
\\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n
\\n\\n \\n \\n \\n\\n \\n \\n\\n \\n \\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n inflection/${inflectionKey || '???'}\\n
\\n\\n \\n \\n \\n ,\\n\\n \\n \\n \\n \\n ${\\\"main:class\\\" & t}\\n \\n , \\n\\n \\n \\n \\n ${\\\"main:variant\\\" & t}\\n \\n \\n \\\"${inflectionVariant}\\\"\\n \\n \\n ${\\\"main:variant\\\" & t}\\n \\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n \\n\\n \\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n\\n \\n \\n lemma/${lemmaKey || '???'}\\n
\\n\\n \\n
\\n \\n\\n
\\n \\n\\n
\\n \\n
\\n\\n\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n \\n
\\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n \\n
\\n \\n \\n
\\n\\n
\\n\\n\\n\";\n// Exports\nexport default code;"],"names":[],"sourceRoot":""}