1
|
{"version":3,"file":"settings-users-settings-users.js?v=36e68a196d738502b264","mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACjSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACvlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACpWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AsBAA;AAGA;;;;;;;;;;;;;;;;ACHA;AAGA;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///nextcloud/apps/settings/src/mixins/UserRowMixin.js","webpack:///nextcloud/apps/settings/src/composables/useGroupsNavigation.ts","webpack:///nextcloud/apps/settings/src/utils/userUtils.ts","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/components/Users/UserRowActions.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue?vue&type=script&lang=ts","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue?vue&type=script&lang=js","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=template&id=b3f9b202&scoped=true","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=template&id=6cba3aca&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue?vue&type=template&id=7b45e5ac&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue?vue&type=template&id=97a6cb68&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue?vue&type=template&id=55420384&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue?vue&type=template&id=11563777&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserRowActions.vue?vue&type=template&id=34f3ef36","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue?vue&type=template&id=3eb7c73e&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue?vue&type=template&id=51adeab1&scoped=true","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue?vue&type=template&id=4821d392&scoped=true","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue?vue&type=template&id=b127f0aa&scoped=true","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue?vue&type=style&index=0&id=b3f9b202&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/UserList.vue?vue&type=style&index=0&id=6cba3aca&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue?vue&type=style&index=0&id=7b45e5ac&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue?vue&type=style&index=0&id=97a6cb68&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue?vue&type=style&index=0&id=55420384&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue?vue&type=style&index=0&id=11563777&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue?vue&type=style&index=0&id=3eb7c73e&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue?vue&type=style&index=0&id=51adeab1&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue?vue&type=style&index=0&id=4821d392&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue?vue&type=style&index=0&id=b127f0aa&scoped=true&lang=scss","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?e63c","webpack://nextcloud/./apps/settings/src/components/UserList.vue?e586","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?f2cc","webpack://nextcloud/./apps/settings/src/components/Users/UserListFooter.vue?fc99","webpack://nextcloud/./apps/settings/src/components/Users/UserListHeader.vue?459b","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?2d3d","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?06a1","webpack://nextcloud/./apps/settings/src/components/Users/VirtualList.vue?e3bd","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?b40b","webpack://nextcloud/./apps/settings/src/views/UserManagementNavigation.vue?fbe6","webpack:///nextcloud/apps/settings/src/components/GroupListItem.vue","webpack:///nextcloud/apps/settings/src/components/UserList.vue","webpack:///nextcloud/apps/settings/src/components/Users/NewUserModal.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserListFooter.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserListHeader.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserRow.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserRowActions.vue","webpack:///nextcloud/apps/settings/src/components/Users/UserSettingsDialog.vue","webpack:///nextcloud/apps/settings/src/components/Users/VirtualList.vue","webpack:///nextcloud/apps/settings/src/views/UserManagement.vue","webpack:///nextcloud/apps/settings/src/views/UserManagementNavigation.vue","webpack://nextcloud/./apps/settings/src/components/Users/UserListFooter.vue?de0f","webpack://nextcloud/./apps/settings/src/components/Users/UserListHeader.vue?15dd","webpack://nextcloud/./apps/settings/src/components/Users/UserRowActions.vue?b827","webpack://nextcloud/./apps/settings/src/components/Users/VirtualList.vue?b603","webpack://nextcloud/./apps/settings/src/views/UserManagementNavigation.vue?d5dd","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?df32","webpack://nextcloud/./apps/settings/src/components/UserList.vue?bb46","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?09ea","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?cfb3","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?26c1","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?fcc2","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?931b","webpack://nextcloud/./apps/settings/src/components/UserList.vue?f0b0","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?7b3d","webpack://nextcloud/./apps/settings/src/components/Users/UserListFooter.vue?ca70","webpack://nextcloud/./apps/settings/src/components/Users/UserListHeader.vue?af82","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?36e0","webpack://nextcloud/./apps/settings/src/components/Users/UserRowActions.vue?3b10","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?e5d1","webpack://nextcloud/./apps/settings/src/components/Users/VirtualList.vue?68dd","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?f0e2","webpack://nextcloud/./apps/settings/src/views/UserManagementNavigation.vue?c44f","webpack://nextcloud/./apps/settings/src/components/GroupListItem.vue?7e53","webpack://nextcloud/./apps/settings/src/components/UserList.vue?a097","webpack://nextcloud/./apps/settings/src/components/Users/NewUserModal.vue?bb3d","webpack://nextcloud/./apps/settings/src/components/Users/UserListFooter.vue?520e","webpack://nextcloud/./apps/settings/src/components/Users/UserListHeader.vue?ba05","webpack://nextcloud/./apps/settings/src/components/Users/UserRow.vue?7e6e","webpack://nextcloud/./apps/settings/src/components/Users/UserSettingsDialog.vue?9768","webpack://nextcloud/./apps/settings/src/components/Users/VirtualList.vue?c5d1","webpack://nextcloud/./apps/settings/src/views/UserManagement.vue?702c","webpack://nextcloud/./apps/settings/src/views/UserManagementNavigation.vue?540c","webpack:///nextcloud/node_modules/@nextcloud/vue/dist/Components/NcAppNavigationCaption.mjs","webpack:///nextcloud/node_modules/@nextcloud/vue/dist/Components/NcAppSettingsDialog.mjs","webpack:///nextcloud/node_modules/vue-router/composables.mjs"],"sourcesContent":["/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n props: {\n user: {\n type: Object,\n required: true\n },\n settings: {\n type: Object,\n default: () => ({})\n },\n groups: {\n type: Array,\n default: () => []\n },\n subAdminsGroups: {\n type: Array,\n default: () => []\n },\n quotaOptions: {\n type: Array,\n default: () => []\n },\n languages: {\n type: Array,\n required: true\n },\n externalActions: {\n type: Array,\n default: () => []\n }\n },\n computed: {\n showConfig() {\n return this.$store.getters.getShowConfig;\n },\n /* GROUPS MANAGEMENT */\n userGroups() {\n const userGroups = this.groups.filter(group => this.user.groups.includes(group.id));\n return userGroups;\n },\n userSubAdminsGroups() {\n const userSubAdminsGroups = this.subAdminsGroups.filter(group => this.user.subadmin.includes(group.id));\n return userSubAdminsGroups;\n },\n availableGroups() {\n return this.groups.map(group => {\n // clone object because we don't want\n // to edit the original groups\n const groupClone = Object.assign({}, group);\n\n // two settings here:\n // 1. user NOT in group but no permission to add\n // 2. user is in group but no permission to remove\n groupClone.$isDisabled = group.canAdd === false && !this.user.groups.includes(group.id) || group.canRemove === false && this.user.groups.includes(group.id);\n return groupClone;\n });\n },\n /* QUOTA MANAGEMENT */\n usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n usedQuota() {\n let quota = this.user.quota.quota;\n if (quota > 0) {\n quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n } else {\n const usedInGB = this.user.quota.used / (10 * Math.pow(2, 30));\n // asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n quota = 95 * (1 - 1 / (usedInGB + 1));\n }\n return isNaN(quota) ? 0 : quota;\n },\n // Mapping saved values to objects\n userQuota() {\n if (this.user.quota.quota >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n const humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n const userQuota = this.quotaOptions.find(quota => quota.id === humanQuota);\n return userQuota || {\n id: humanQuota,\n label: humanQuota\n };\n } else if (this.user.quota.quota === 'default') {\n // default quota is replaced by the proper value on load\n return this.quotaOptions[0];\n }\n return this.quotaOptions[1]; // unlimited\n },\n /* PASSWORD POLICY? */\n minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n /* LANGUAGE */\n userLanguage() {\n const availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n const userLang = availableLanguages.find(lang => lang.code === this.user.language);\n if (typeof userLang !== 'object' && this.user.language !== '') {\n return {\n code: this.user.language,\n name: this.user.language\n };\n } else if (this.user.language === '') {\n return false;\n }\n return userLang;\n },\n /* LAST LOGIN */\n userLastLoginTooltip() {\n if (this.user.lastLogin > 0) {\n return OC.Util.formatDate(this.user.lastLogin);\n }\n return '';\n },\n userLastLogin() {\n if (this.user.lastLogin > 0) {\n return OC.Util.relativeModifiedDate(this.user.lastLogin);\n }\n return t('settings', 'Never');\n }\n }\n};","import { computed } from 'vue';\n/**\n * Format a group to a menu entry\n *\n * @param group the group\n */\nfunction formatGroupMenu(group) {\n if (typeof group === 'undefined') {\n return null;\n }\n const item = {\n id: group.id,\n title: group.name,\n usercount: group.usercount,\n count: Math.max(0, group.usercount - group.disabled)\n };\n return item;\n}\nexport const useFormatGroups = groups => {\n /**\n * All non-disabled non-admin groups\n */\n const userGroups = computed(() => {\n const formatted = groups.value\n // filter out disabled and admin\n .filter(group => group.id !== 'disabled' && group.id !== 'admin')\n // format group\n .map(group => formatGroupMenu(group))\n // remove invalid\n .filter(group => group !== null);\n return formatted;\n });\n /**\n * The admin group if found otherwise null\n */\n const adminGroup = computed(() => formatGroupMenu(groups.value.find(group => group.id === 'admin')));\n /**\n * The group of disabled users\n */\n const disabledGroup = computed(() => formatGroupMenu(groups.value.find(group => group.id === 'disabled')));\n return {\n adminGroup,\n disabledGroup,\n userGroups\n };\n};","/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport const unlimitedQuota = {\n id: 'none',\n label: t('settings', 'Unlimited')\n};\nexport const defaultQuota = {\n id: 'default',\n label: t('settings', 'Default quota')\n};\n/**\n * Return `true` if the logged in user does not have permissions to view the\n * data of `user`\n * @param user\n * @param user.id\n */\nexport const isObfuscated = user => {\n const keys = Object.keys(user);\n return keys.length === 1 && keys.at(0) === 'id';\n};","import Vue from 'vue';\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nexport default Vue.extend({\n name: 'UserListFooter',\n components: {\n NcLoadingIcon\n },\n props: {\n loading: {\n type: Boolean,\n required: true\n },\n filteredUsers: {\n type: Array,\n required: true\n }\n },\n computed: {\n userCount() {\n if (this.loading) {\n return this.n('settings', '{userCount} user …', '{userCount} users …', this.filteredUsers.length, {\n userCount: this.filteredUsers.length\n });\n }\n return this.n('settings', '{userCount} user', '{userCount} users', this.filteredUsers.length, {\n userCount: this.filteredUsers.length\n });\n }\n },\n methods: {\n t,\n n\n }\n});","import Vue from 'vue';\nimport { translate as t } from '@nextcloud/l10n';\nexport default Vue.extend({\n name: 'UserListHeader',\n props: {\n hasObfuscated: {\n type: Boolean,\n required: true\n }\n },\n computed: {\n showConfig() {\n // @ts-expect-error: allow untyped $store\n return this.$store.getters.getShowConfig;\n },\n settings() {\n // @ts-expect-error: allow untyped $store\n return this.$store.getters.getServerData;\n },\n subAdminsGroups() {\n // @ts-expect-error: allow untyped $store\n return this.$store.getters.getSubadminGroups;\n },\n passwordLabel() {\n if (this.hasObfuscated) {\n // TRANSLATORS This string is for a column header labelling either a password or a message that the current user has insufficient permissions\n return t('settings', 'Password or insufficient permissions message');\n }\n return t('settings', 'Password');\n }\n },\n methods: {\n t\n }\n});","import { defineComponent } from 'vue';\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js';\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js';\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js';\nimport SvgCheck from '@mdi/svg/svg/check.svg?raw';\nimport SvgPencil from '@mdi/svg/svg/pencil.svg?raw';\nexport default defineComponent({\n components: {\n NcActionButton,\n NcActions,\n NcIconSvgWrapper\n },\n props: {\n /**\n * Array of user actions\n */\n actions: {\n type: Array,\n required: true\n },\n /**\n * The state whether the row is currently disabled\n */\n disabled: {\n type: Boolean,\n required: true\n },\n /**\n * The state whether the row is currently edited\n */\n edit: {\n type: Boolean,\n required: true\n },\n /**\n * Target of this actions\n */\n user: {\n type: Object,\n required: true\n }\n },\n computed: {\n /**\n * Current MDI logo to show for edit toggle\n */\n editSvg() {\n return this.edit ? SvgCheck : SvgPencil;\n }\n },\n methods: {\n /**\n * Toggle edit mode by emitting the update event\n */\n toggleEdit() {\n this.$emit('update:edit', !this.edit);\n }\n }\n});","import Vue from 'vue';\nimport { vElementVisibility } from '@vueuse/components';\nimport { debounce } from 'debounce';\nimport logger from '../../logger.ts';\nVue.directive('elementVisibility', vElementVisibility);\n// Items to render before and after the visible area\nconst bufferItems = 3;\nexport default Vue.extend({\n name: 'VirtualList',\n props: {\n dataComponent: {\n type: [Object, Function],\n required: true\n },\n dataKey: {\n type: String,\n required: true\n },\n dataSources: {\n type: Array,\n required: true\n },\n itemHeight: {\n type: Number,\n required: true\n },\n extraProps: {\n type: Object,\n default: () => ({})\n }\n },\n data() {\n return {\n bufferItems,\n index: 0,\n headerHeight: 0,\n tableHeight: 0,\n resizeObserver: null\n };\n },\n computed: {\n startIndex() {\n return Math.max(0, this.index - bufferItems);\n },\n shownItems() {\n return Math.ceil((this.tableHeight - this.headerHeight) / this.itemHeight) + bufferItems * 2;\n },\n renderedItems() {\n return this.dataSources.slice(this.startIndex, this.startIndex + this.shownItems);\n },\n tbodyStyle() {\n const isOverScrolled = this.startIndex + this.shownItems > this.dataSources.length;\n const lastIndex = this.dataSources.length - this.startIndex - this.shownItems;\n const hiddenAfterItems = Math.min(this.dataSources.length - this.startIndex, lastIndex);\n return {\n paddingTop: \"\".concat(this.startIndex * this.itemHeight, \"px\"),\n paddingBottom: isOverScrolled ? 0 : \"\".concat(hiddenAfterItems * this.itemHeight, \"px\")\n };\n }\n },\n mounted() {\n var _this$$refs, _this$$refs2;\n const root = this.$el;\n const tfoot = (_this$$refs = this.$refs) === null || _this$$refs === void 0 ? void 0 : _this$$refs.tfoot;\n const thead = (_this$$refs2 = this.$refs) === null || _this$$refs2 === void 0 ? void 0 : _this$$refs2.thead;\n this.resizeObserver = new ResizeObserver(debounce(() => {\n var _thead$clientHeight, _root$clientHeight;\n this.headerHeight = (_thead$clientHeight = thead === null || thead === void 0 ? void 0 : thead.clientHeight) !== null && _thead$clientHeight !== void 0 ? _thead$clientHeight : 0;\n this.tableHeight = (_root$clientHeight = root === null || root === void 0 ? void 0 : root.clientHeight) !== null && _root$clientHeight !== void 0 ? _root$clientHeight : 0;\n logger.debug('VirtualList resizeObserver updated');\n this.onScroll();\n }, 100, false));\n this.resizeObserver.observe(root);\n this.resizeObserver.observe(tfoot);\n this.resizeObserver.observe(thead);\n this.$el.addEventListener('scroll', this.onScroll);\n },\n beforeDestroy() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n },\n methods: {\n handleFooterVisibility(visible) {\n if (visible) {\n this.$emit('scroll-end');\n }\n },\n onScroll() {\n // Max 0 to prevent negative index\n this.index = Math.max(0, Math.round(this.$el.scrollTop / this.itemHeight));\n }\n }\n});","import { defineComponent as _defineComponent } from 'vue';\nimport { mdiAccount, mdiAccountOff, mdiCog, mdiPlus, mdiShieldAccount } from '@mdi/js';\nimport { showError } from '@nextcloud/dialogs';\nimport { translate as t } from '@nextcloud/l10n';\nimport { computed, ref } from 'vue';\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js';\nimport NcActionText from '@nextcloud/vue/dist/Components/NcActionText.js';\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js';\nimport NcAppNavigationCaption from '@nextcloud/vue/dist/Components/NcAppNavigationCaption.js';\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js';\nimport NcAppNavigationList from '@nextcloud/vue/dist/Components/NcAppNavigationList.js';\nimport NcAppNavigationNew from '@nextcloud/vue/dist/Components/NcAppNavigationNew.js';\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js';\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js';\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js';\nimport GroupListItem from '../components/GroupListItem.vue';\nimport UserSettingsDialog from '../components/Users/UserSettingsDialog.vue';\nimport { useStore } from '../store';\nimport { useRoute, useRouter } from 'vue-router/composables';\nimport { useFormatGroups } from '../composables/useGroupsNavigation';\nexport default /*#__PURE__*/_defineComponent({\n __name: 'UserManagementNavigation',\n setup(__props) {\n const route = useRoute();\n const router = useRouter();\n const store = useStore();\n /** State of the 'new-account' dialog */\n const isDialogOpen = ref(false);\n /** Current active group in the view - this is URL encoded */\n const selectedGroup = computed(() => {\n var _route$params;\n return (_route$params = route.params) === null || _route$params === void 0 ? void 0 : _route$params.selectedGroup;\n });\n /** Current active group - URL decoded */\n const selectedGroupDecoded = computed(() => selectedGroup.value ? decodeURIComponent(selectedGroup.value) : null);\n /** Overall user count */\n const userCount = computed(() => store.getters.getUserCount);\n /** All available groups */\n const groups = computed(() => store.getters.getSortedGroups);\n const {\n adminGroup,\n disabledGroup,\n userGroups\n } = useFormatGroups(groups);\n /** True if the current user is an administrator */\n const isAdmin = computed(() => store.getters.getServerData.isAdmin);\n /** True if the 'add-group' dialog is open - needed to be able to close it when the group is created */\n const isAddGroupOpen = ref(false);\n /** True if the group creation is in progress to show loading spinner and disable adding another one */\n const loadingAddGroup = ref(false);\n /** Error state for creating a new group */\n const hasAddGroupError = ref(false);\n /** Name of the group to create (used in the group creation dialog) */\n const newGroupName = ref('');\n /**\n * Create a new group\n */\n async function createGroup() {\n hasAddGroupError.value = false;\n const groupId = newGroupName.value.trim();\n if (groupId === '') {\n hasAddGroupError.value = true;\n return;\n }\n isAddGroupOpen.value = false;\n loadingAddGroup.value = true;\n try {\n await store.dispatch('addGroup', groupId);\n await router.push({\n name: 'group',\n params: {\n selectedGroup: encodeURIComponent(groupId)\n }\n });\n newGroupName.value = '';\n } catch {\n showError(t('settings', 'Failed to create group'));\n }\n loadingAddGroup.value = false;\n }\n /**\n * Open the new-user form dialog\n */\n function showNewUserMenu() {\n store.commit('setShowConfig', {\n key: 'showNewUserForm',\n value: true\n });\n }\n return {\n __sfc: true,\n route,\n router,\n store,\n isDialogOpen,\n selectedGroup,\n selectedGroupDecoded,\n userCount,\n groups,\n adminGroup,\n disabledGroup,\n userGroups,\n isAdmin,\n isAddGroupOpen,\n loadingAddGroup,\n hasAddGroupError,\n newGroupName,\n createGroup,\n showNewUserMenu,\n mdiAccount,\n mdiAccountOff,\n mdiCog,\n mdiPlus,\n mdiShieldAccount,\n t,\n NcActionInput,\n NcActionText,\n NcAppNavigation,\n NcAppNavigationCaption,\n NcAppNavigationItem,\n NcAppNavigationList,\n NcAppNavigationNew,\n NcButton,\n NcCounterBubble,\n NcIconSvgWrapper,\n NcLoadingIcon,\n GroupListItem,\n UserSettingsDialog\n };\n }\n});","import { Fragment } from 'vue-frag';\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js';\nimport NcActionInput from '@nextcloud/vue/dist/Components/NcActionInput.js';\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js';\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js';\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js';\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js';\nimport AccountGroup from 'vue-material-design-icons/AccountGroup.vue';\nimport Delete from 'vue-material-design-icons/Delete.vue';\nimport Pencil from 'vue-material-design-icons/Pencil.vue';\nimport { showError } from '@nextcloud/dialogs';\nexport default {\n name: 'GroupListItem',\n components: {\n AccountGroup,\n Delete,\n Fragment,\n NcActionButton,\n NcActionInput,\n NcAppNavigationItem,\n NcButton,\n NcCounterBubble,\n NcModal,\n NcNoteCard,\n Pencil\n },\n props: {\n /**\n * If this group is currently selected\n */\n active: {\n type: Boolean,\n required: true\n },\n /**\n * Number of members within this group\n */\n count: {\n type: Number,\n default: null\n },\n /**\n * Identifier of this group\n */\n id: {\n type: String,\n required: true\n },\n /**\n * Name of this group\n */\n name: {\n type: String,\n required: true\n }\n },\n data() {\n return {\n loadingRenameGroup: false,\n openGroupMenu: false,\n showRemoveGroupModal: false\n };\n },\n computed: {\n settings() {\n return this.$store.getters.getServerData;\n }\n },\n methods: {\n handleGroupMenuOpen() {\n this.openGroupMenu = true;\n },\n async renameGroup(gid) {\n // check if group id is valid\n if (gid.trim() === '') {\n return;\n }\n const displayName = this.$refs.displayNameInput.$el.querySelector('input[type=\"text\"]').value;\n\n // check if group name is valid\n if (displayName.trim() === '') {\n return;\n }\n try {\n this.openGroupMenu = false;\n this.loadingRenameGroup = true;\n await this.$store.dispatch('renameGroup', {\n groupid: gid.trim(),\n displayName: displayName.trim()\n });\n this.loadingRenameGroup = false;\n } catch {\n this.openGroupMenu = true;\n this.loadingRenameGroup = false;\n }\n },\n async removeGroup() {\n try {\n await this.$store.dispatch('removeGroup', this.id);\n this.showRemoveGroupModal = false;\n } catch (error) {\n showError(t('settings', 'Failed to remove group \"{group}\"', {\n group: this.name\n }));\n }\n }\n }\n};","import { mdiAccountGroup } from '@mdi/js';\nimport { showError } from '@nextcloud/dialogs';\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus';\nimport { Fragment } from 'vue-frag';\nimport Vue from 'vue';\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js';\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js';\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js';\nimport VirtualList from './Users/VirtualList.vue';\nimport NewUserModal from './Users/NewUserModal.vue';\nimport UserListFooter from './Users/UserListFooter.vue';\nimport UserListHeader from './Users/UserListHeader.vue';\nimport UserRow from './Users/UserRow.vue';\nimport { defaultQuota, isObfuscated, unlimitedQuota } from '../utils/userUtils.ts';\nimport logger from '../logger.ts';\nconst newUser = Object.freeze({\n id: '',\n displayName: '',\n password: '',\n mailAddress: '',\n groups: [],\n manager: '',\n subAdminsGroups: [],\n quota: defaultQuota,\n language: {\n code: 'en',\n name: t('settings', 'Default language')\n }\n});\nexport default {\n name: 'UserList',\n components: {\n Fragment,\n NcEmptyContent,\n NcIconSvgWrapper,\n NcLoadingIcon,\n NewUserModal,\n UserListFooter,\n UserListHeader,\n VirtualList\n },\n props: {\n selectedGroup: {\n type: String,\n default: null\n },\n externalActions: {\n type: Array,\n default: () => []\n }\n },\n setup() {\n // non reactive properties\n return {\n mdiAccountGroup,\n rowHeight: 55,\n UserRow\n };\n },\n data() {\n return {\n loading: {\n all: false,\n groups: false,\n users: false\n },\n newUser: {\n ...newUser\n },\n isInitialLoad: true,\n searchQuery: ''\n };\n },\n computed: {\n showConfig() {\n return this.$store.getters.getShowConfig;\n },\n settings() {\n return this.$store.getters.getServerData;\n },\n style() {\n return {\n '--row-height': \"\".concat(this.rowHeight, \"px\")\n };\n },\n hasObfuscated() {\n return this.filteredUsers.some(user => isObfuscated(user));\n },\n users() {\n return this.$store.getters.getUsers;\n },\n filteredUsers() {\n if (this.selectedGroup === 'disabled') {\n return this.users.filter(user => user.enabled === false);\n }\n if (!this.settings.isAdmin) {\n // we don't want subadmins to edit themselves\n return this.users.filter(user => user.enabled !== false);\n }\n return this.users.filter(user => user.enabled !== false);\n },\n groups() {\n // data provided php side + remove the disabled group\n return this.$store.getters.getGroups.filter(group => group.id !== 'disabled').sort((a, b) => a.name.localeCompare(b.name));\n },\n subAdminsGroups() {\n // data provided php side\n return this.$store.getters.getSubadminGroups;\n },\n quotaOptions() {\n // convert the preset array into objects\n const quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n id: cur,\n label: cur\n }), []);\n // add default presets\n if (this.settings.allowUnlimitedQuota) {\n quotaPreset.unshift(unlimitedQuota);\n }\n quotaPreset.unshift(defaultQuota);\n return quotaPreset;\n },\n usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n disabledUsersOffset() {\n return this.$store.getters.getDisabledUsersOffset;\n },\n disabledUsersLimit() {\n return this.$store.getters.getDisabledUsersLimit;\n },\n usersCount() {\n return this.users.length;\n },\n /* LANGUAGES */\n languages() {\n return [{\n label: t('settings', 'Common languages'),\n languages: this.settings.languages.commonLanguages\n }, {\n label: t('settings', 'Other languages'),\n languages: this.settings.languages.otherLanguages\n }];\n }\n },\n watch: {\n // watch url change and group select\n async selectedGroup(val) {\n this.isInitialLoad = true;\n // if selected is the disabled group but it's empty\n await this.redirectIfDisabled();\n this.$store.commit('resetUsers');\n await this.loadUsers();\n this.setNewUserDefaultGroup(val);\n },\n filteredUsers(filteredUsers) {\n logger.debug(\"\".concat(filteredUsers.length, \" filtered user(s)\"));\n }\n },\n async created() {\n await this.loadUsers();\n },\n async mounted() {\n if (!this.settings.canChangePassword) {\n OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n }\n\n /**\n * Reset and init new user form\n */\n this.resetForm();\n\n /**\n * Register search\n */\n subscribe('nextcloud:unified-search.search', this.search);\n subscribe('nextcloud:unified-search.reset', this.resetSearch);\n\n /**\n * If disabled group but empty, redirect\n */\n await this.redirectIfDisabled();\n },\n beforeDestroy() {\n unsubscribe('nextcloud:unified-search.search', this.search);\n unsubscribe('nextcloud:unified-search.reset', this.resetSearch);\n },\n methods: {\n async handleScrollEnd() {\n await this.loadUsers();\n },\n async loadUsers() {\n this.loading.users = true;\n try {\n if (this.selectedGroup === 'disabled') {\n await this.$store.dispatch('getDisabledUsers', {\n offset: this.disabledUsersOffset,\n limit: this.disabledUsersLimit,\n search: this.searchQuery\n });\n } else {\n await this.$store.dispatch('getUsers', {\n offset: this.usersOffset,\n limit: this.usersLimit,\n group: this.selectedGroup,\n search: this.searchQuery\n });\n }\n logger.debug(\"\".concat(this.users.length, \" total user(s) loaded\"));\n } catch (error) {\n logger.error('Failed to load accounts', {\n error\n });\n showError('Failed to load accounts');\n }\n this.loading.users = false;\n this.isInitialLoad = false;\n },\n closeModal() {\n this.$store.commit('setShowConfig', {\n key: 'showNewUserForm',\n value: false\n });\n },\n async search(_ref) {\n let {\n query\n } = _ref;\n this.searchQuery = query;\n this.$store.commit('resetUsers');\n await this.loadUsers();\n },\n resetSearch() {\n this.search({\n query: ''\n });\n },\n resetForm() {\n // revert form to original state\n this.newUser = Object.assign({}, newUser);\n\n /**\n * Init default language from server data. The use of this.settings\n * requires a computed variable, which break the v-model binding of the form,\n * this is a much easier solution than getter and setter on a computed var\n */\n if (this.settings.defaultLanguage) {\n Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n }\n\n /**\n * In case the user directly loaded the user list within a group\n * the watch won't be triggered. We need to initialize it.\n */\n this.setNewUserDefaultGroup(this.selectedGroup);\n this.loading.all = false;\n },\n setNewUserDefaultGroup(value) {\n if (value && value.length > 0) {\n // setting new account default group to the current selected one\n const currentGroup = this.groups.find(group => group.id === value);\n if (currentGroup) {\n this.newUser.groups = [currentGroup];\n return;\n }\n }\n // fallback, empty selected group\n this.newUser.groups = [];\n },\n /**\n * If the selected group is the disabled group but the count is 0\n * redirect to the all users page.\n * we only check for 0 because we don't have the count on ldap\n * and we therefore set the usercount to -1 in this specific case\n */\n async redirectIfDisabled() {\n const allGroups = this.$store.getters.getGroups;\n if (this.selectedGroup === 'disabled' && allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\n // disabled group is empty, redirection to all users\n this.$router.push({\n name: 'users'\n });\n await this.loadUsers();\n }\n }\n }\n};","import NcButton from '@nextcloud/vue/dist/Components/NcButton.js';\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal.js';\nimport NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js';\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js';\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js';\nexport default {\n name: 'NewUserModal',\n components: {\n NcButton,\n NcModal,\n NcPasswordField,\n NcSelect,\n NcTextField\n },\n props: {\n loading: {\n type: Object,\n required: true\n },\n newUser: {\n type: Object,\n required: true\n },\n quotaOptions: {\n type: Array,\n required: true\n }\n },\n data() {\n return {\n possibleManagers: [],\n // TRANSLATORS This string describes a manager in the context of an organization\n managerLabel: t('settings', 'Set user manager')\n };\n },\n computed: {\n showConfig() {\n return this.$store.getters.getShowConfig;\n },\n settings() {\n return this.$store.getters.getServerData;\n },\n usernameLabel() {\n if (this.settings.newUserGenerateUserID) {\n return t('settings', 'Account name will be autogenerated');\n }\n return t('settings', 'Account name (required)');\n },\n minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n groups() {\n // data provided php side + remove the disabled group\n return this.$store.getters.getGroups.filter(group => group.id !== 'disabled').sort((a, b) => a.name.localeCompare(b.name));\n },\n subAdminsGroups() {\n // data provided php side\n return this.$store.getters.getSubadminGroups;\n },\n canAddGroups() {\n // disabled if no permission to add new users to group\n return this.groups.map(group => {\n // clone object because we don't want\n // to edit the original groups\n group = Object.assign({}, group);\n group.$isDisabled = group.canAdd === false;\n return group;\n });\n },\n languages() {\n return [{\n name: t('settings', 'Common languages'),\n languages: this.settings.languages.commonLanguages\n }, ...this.settings.languages.commonLanguages, {\n name: t('settings', 'Other languages'),\n languages: this.settings.languages.otherLanguages\n }, ...this.settings.languages.otherLanguages];\n }\n },\n async beforeMount() {\n await this.searchUserManager();\n },\n methods: {\n async createUser() {\n this.loading.all = true;\n try {\n var _this$$refs$username, _this$$refs$username$;\n await this.$store.dispatch('addUser', {\n userid: this.newUser.id,\n password: this.newUser.password,\n displayName: this.newUser.displayName,\n email: this.newUser.mailAddress,\n groups: this.newUser.groups.map(group => group.id),\n subadmin: this.newUser.subAdminsGroups.map(group => group.id),\n quota: this.newUser.quota.id,\n language: this.newUser.language.code,\n manager: this.newUser.manager.id\n });\n this.$emit('reset');\n (_this$$refs$username = this.$refs.username) === null || _this$$refs$username === void 0 || (_this$$refs$username = _this$$refs$username.$refs) === null || _this$$refs$username === void 0 || (_this$$refs$username = _this$$refs$username.inputField) === null || _this$$refs$username === void 0 || (_this$$refs$username = _this$$refs$username.$refs) === null || _this$$refs$username === void 0 || (_this$$refs$username = _this$$refs$username.input) === null || _this$$refs$username === void 0 || (_this$$refs$username$ = _this$$refs$username.focus) === null || _this$$refs$username$ === void 0 || _this$$refs$username$.call(_this$$refs$username);\n this.$emit('close');\n } catch (error) {\n this.loading.all = false;\n if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n const statuscode = error.response.data.ocs.meta.statuscode;\n if (statuscode === 102) {\n var _this$$refs$username2, _this$$refs$username3;\n // wrong username\n (_this$$refs$username2 = this.$refs.username) === null || _this$$refs$username2 === void 0 || (_this$$refs$username2 = _this$$refs$username2.$refs) === null || _this$$refs$username2 === void 0 || (_this$$refs$username2 = _this$$refs$username2.inputField) === null || _this$$refs$username2 === void 0 || (_this$$refs$username2 = _this$$refs$username2.$refs) === null || _this$$refs$username2 === void 0 || (_this$$refs$username2 = _this$$refs$username2.input) === null || _this$$refs$username2 === void 0 || (_this$$refs$username3 = _this$$refs$username2.focus) === null || _this$$refs$username3 === void 0 || _this$$refs$username3.call(_this$$refs$username2);\n } else if (statuscode === 107) {\n var _this$$refs$password, _this$$refs$password$;\n // wrong password\n (_this$$refs$password = this.$refs.password) === null || _this$$refs$password === void 0 || (_this$$refs$password = _this$$refs$password.$refs) === null || _this$$refs$password === void 0 || (_this$$refs$password = _this$$refs$password.inputField) === null || _this$$refs$password === void 0 || (_this$$refs$password = _this$$refs$password.$refs) === null || _this$$refs$password === void 0 || (_this$$refs$password = _this$$refs$password.input) === null || _this$$refs$password === void 0 || (_this$$refs$password$ = _this$$refs$password.focus) === null || _this$$refs$password$ === void 0 || _this$$refs$password$.call(_this$$refs$password);\n }\n }\n }\n },\n handleGroupInput(groups) {\n /**\n * Filter out groups with no id to prevent duplicate selected options\n *\n * Created groups are added programmatically by `createGroup()`\n */\n this.newUser.groups = groups.filter(group => Boolean(group.id));\n },\n /**\n * Create a new group\n *\n * @param {any} group Group\n * @param {string} group.name Group id\n */\n async createGroup(_ref) {\n let {\n name: gid\n } = _ref;\n this.loading.groups = true;\n try {\n await this.$store.dispatch('addGroup', gid);\n this.newUser.groups.push(this.groups.find(group => group.id === gid));\n this.loading.groups = false;\n } catch (error) {\n this.loading.groups = false;\n }\n },\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string} quota Quota in readable format '5 GB'\n * @return {object}\n */\n validateQuota(quota) {\n // only used for new presets sent through @Tag\n const validQuota = OC.Util.computerFileSize(quota);\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n this.newUser.quota = {\n id: quota,\n label: quota\n };\n return this.newUser.quota;\n }\n // Default is unlimited\n this.newUser.quota = this.quotaOptions[0];\n return this.quotaOptions[0];\n },\n languageFilterBy(option, label, search) {\n // Show group header of the language\n if (option.languages) {\n return option.languages.some(_ref2 => {\n let {\n name\n } = _ref2;\n return name.toLocaleLowerCase().includes(search.toLocaleLowerCase());\n });\n }\n return (label || '').toLocaleLowerCase().includes(search.toLocaleLowerCase());\n },\n async searchUserManager(query) {\n await this.$store.dispatch('searchUsers', {\n offset: 0,\n limit: 10,\n search: query\n }).then(response => {\n const users = response !== null && response !== void 0 && response.data ? Object.values(response === null || response === void 0 ? void 0 : response.data.ocs.data.users) : [];\n if (users.length > 0) {\n this.possibleManagers = users;\n }\n });\n }\n }\n};","import { formatFileSize, parseFileSize } from '@nextcloud/files';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport { showSuccess, showError } from '@nextcloud/dialogs';\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js';\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js';\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js';\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js';\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js';\nimport UserRowActions from './UserRowActions.vue';\nimport UserRowMixin from '../../mixins/UserRowMixin.js';\nimport { isObfuscated, unlimitedQuota } from '../../utils/userUtils.ts';\nexport default {\n name: 'UserRow',\n components: {\n NcAvatar,\n NcLoadingIcon,\n NcProgressBar,\n NcSelect,\n NcTextField,\n UserRowActions\n },\n mixins: [UserRowMixin],\n props: {\n user: {\n type: Object,\n required: true\n },\n visible: {\n type: Boolean,\n required: true\n },\n users: {\n type: Array,\n required: true\n },\n hasObfuscated: {\n type: Boolean,\n required: true\n },\n groups: {\n type: Array,\n default: () => []\n },\n subAdminsGroups: {\n type: Array,\n required: true\n },\n quotaOptions: {\n type: Array,\n required: true\n },\n languages: {\n type: Array,\n required: true\n },\n settings: {\n type: Object,\n required: true\n },\n externalActions: {\n type: Array,\n default: () => []\n }\n },\n data() {\n var _this$user$email;\n return {\n selectedQuota: false,\n rand: Math.random().toString(36).substring(2),\n loadingPossibleManagers: false,\n possibleManagers: [],\n currentManager: '',\n editing: false,\n loading: {\n all: false,\n displayName: false,\n password: false,\n mailAddress: false,\n groups: false,\n subadmins: false,\n quota: false,\n delete: false,\n disable: false,\n languages: false,\n wipe: false,\n manager: false\n },\n editedDisplayName: this.user.displayname,\n editedPassword: '',\n editedMail: (_this$user$email = this.user.email) !== null && _this$user$email !== void 0 ? _this$user$email : ''\n };\n },\n computed: {\n managerLabel() {\n // TRANSLATORS This string describes a person's manager in the context of an organization\n return t('settings', 'Set line manager');\n },\n isObfuscated() {\n return isObfuscated(this.user);\n },\n showConfig() {\n return this.$store.getters.getShowConfig;\n },\n isLoadingUser() {\n return this.loading.delete || this.loading.disable || this.loading.wipe;\n },\n isLoadingField() {\n return this.loading.delete || this.loading.disable || this.loading.all;\n },\n uniqueId() {\n return encodeURIComponent(this.user.id + this.rand);\n },\n userGroupsLabels() {\n return this.userGroups.map(group => group.name).join(', ');\n },\n userSubAdminsGroupsLabels() {\n return this.userSubAdminsGroups.map(group => group.name).join(', ');\n },\n usedSpace() {\n var _this$user$quota;\n if ((_this$user$quota = this.user.quota) !== null && _this$user$quota !== void 0 && _this$user$quota.used) {\n var _this$user$quota2;\n return t('settings', '{size} used', {\n size: formatFileSize((_this$user$quota2 = this.user.quota) === null || _this$user$quota2 === void 0 ? void 0 : _this$user$quota2.used)\n });\n }\n return t('settings', '{size} used', {\n size: formatFileSize(0)\n });\n },\n canEdit() {\n return getCurrentUser().uid !== this.user.id || this.settings.isAdmin;\n },\n userQuota() {\n var _this$user$quota3;\n let quota = (_this$user$quota3 = this.user.quota) === null || _this$user$quota3 === void 0 ? void 0 : _this$user$quota3.quota;\n if (quota === 'default') {\n quota = this.settings.defaultQuota;\n if (quota !== 'none') {\n // convert to numeric value to match what the server would usually return\n quota = parseFileSize(quota, true);\n }\n }\n\n // when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n if (quota === 'none' || quota === -3) {\n return t('settings', 'Unlimited');\n } else if (quota >= 0) {\n return formatFileSize(quota);\n }\n return formatFileSize(0);\n },\n userActions() {\n const actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Delete account'),\n action: this.deleteUser\n }, {\n icon: 'icon-delete',\n text: t('settings', 'Disconnect all devices and delete local data'),\n action: this.wipeUserDevices\n }, {\n icon: this.user.enabled ? 'icon-close' : 'icon-add',\n text: this.user.enabled ? t('settings', 'Disable account') : t('settings', 'Enable account'),\n action: this.enableDisableUser\n }];\n if (this.user.email !== null && this.user.email !== '') {\n actions.push({\n icon: 'icon-mail',\n text: t('settings', 'Resend welcome email'),\n action: this.sendWelcomeMail\n });\n }\n return actions.concat(this.externalActions);\n },\n // mapping saved values to objects\n editedUserQuota: {\n get() {\n if (this.selectedQuota !== false) {\n return this.selectedQuota;\n }\n if (this.settings.defaultQuota !== unlimitedQuota.id && parseFileSize(this.settings.defaultQuota, true) >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n return {\n id: this.settings.defaultQuota,\n label: this.settings.defaultQuota\n };\n }\n return unlimitedQuota; // unlimited\n },\n set(quota) {\n this.selectedQuota = quota;\n }\n },\n availableLanguages() {\n return this.languages[0].languages.concat(this.languages[1].languages);\n }\n },\n async beforeMount() {\n if (this.user.manager) {\n await this.initManager(this.user.manager);\n }\n },\n methods: {\n wipeUserDevices() {\n const userid = this.user.id;\n OC.dialogs.confirmDestructive(t('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', {\n userid\n }), t('settings', 'Remote wipe of devices'), {\n type: OC.dialogs.YES_NO_BUTTONS,\n confirm: t('settings', 'Wipe {userid}\\'s devices', {\n userid\n }),\n confirmClasses: 'error',\n cancel: t('settings', 'Cancel')\n }, result => {\n if (result) {\n this.loading.wipe = true;\n this.loading.all = true;\n this.$store.dispatch('wipeUserDevices', userid).then(() => showSuccess(t('settings', 'Wiped {userid}\\'s devices', {\n userid\n })), {\n timeout: 2000\n }).finally(() => {\n this.loading.wipe = false;\n this.loading.all = false;\n });\n }\n }, true);\n },\n filterManagers(managers) {\n return managers.filter(manager => manager.id !== this.user.id);\n },\n async initManager(userId) {\n await this.$store.dispatch('getUser', userId).then(response => {\n this.currentManager = response === null || response === void 0 ? void 0 : response.data.ocs.data;\n });\n },\n async searchInitialUserManager() {\n this.loadingPossibleManagers = true;\n await this.searchUserManager();\n this.loadingPossibleManagers = false;\n },\n async searchUserManager(query) {\n await this.$store.dispatch('searchUsers', {\n offset: 0,\n limit: 10,\n search: query\n }).then(response => {\n const users = response !== null && response !== void 0 && response.data ? this.filterManagers(Object.values(response === null || response === void 0 ? void 0 : response.data.ocs.data.users)) : [];\n if (users.length > 0) {\n this.possibleManagers = users;\n }\n });\n },\n async updateUserManager(manager) {\n if (manager === null) {\n this.currentManager = '';\n }\n this.loading.manager = true;\n try {\n await this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'manager',\n value: this.currentManager ? this.currentManager.id : ''\n });\n } catch (error) {\n // TRANSLATORS This string describes a line manager in the context of an organization\n showError(t('setting', 'Failed to update line manager'));\n console.error(error);\n } finally {\n this.loading.manager = false;\n }\n },\n deleteUser() {\n const userid = this.user.id;\n OC.dialogs.confirmDestructive(t('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', {\n userid\n }), t('settings', 'Account deletion'), {\n type: OC.dialogs.YES_NO_BUTTONS,\n confirm: t('settings', 'Delete {userid}\\'s account', {\n userid\n }),\n confirmClasses: 'error',\n cancel: t('settings', 'Cancel')\n }, result => {\n if (result) {\n this.loading.delete = true;\n this.loading.all = true;\n return this.$store.dispatch('deleteUser', userid).then(() => {\n this.loading.delete = false;\n this.loading.all = false;\n });\n }\n }, true);\n },\n enableDisableUser() {\n this.loading.delete = true;\n this.loading.all = true;\n const userid = this.user.id;\n const enabled = !this.user.enabled;\n return this.$store.dispatch('enableDisableUser', {\n userid,\n enabled\n }).then(() => {\n this.loading.delete = false;\n this.loading.all = false;\n });\n },\n /**\n * Set user displayName\n *\n * @param {string} displayName The display name\n */\n updateDisplayName() {\n this.loading.displayName = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'displayname',\n value: this.editedDisplayName\n }).then(() => {\n this.loading.displayName = false;\n if (this.editedDisplayName === this.user.displayname) {\n showSuccess(t('setting', 'Display name was successfully changed'));\n }\n });\n },\n /**\n * Set user password\n *\n * @param {string} password The email address\n */\n updatePassword() {\n this.loading.password = true;\n if (this.editedPassword.length === 0) {\n showError(t('setting', \"Password can't be empty\"));\n this.loading.password = false;\n } else {\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'password',\n value: this.editedPassword\n }).then(() => {\n this.loading.password = false;\n this.editedPassword = '';\n showSuccess(t('setting', 'Password was successfully changed'));\n });\n }\n },\n /**\n * Set user mailAddress\n *\n * @param {string} mailAddress The email address\n */\n updateEmail() {\n this.loading.mailAddress = true;\n if (this.editedMail === '') {\n showError(t('setting', \"Email can't be empty\"));\n this.loading.mailAddress = false;\n this.editedMail = this.user.email;\n } else {\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'email',\n value: this.editedMail\n }).then(() => {\n this.loading.mailAddress = false;\n if (this.editedMail === this.user.email) {\n showSuccess(t('setting', 'Email was successfully changed'));\n }\n });\n }\n },\n /**\n * Create a new group and add user to it\n *\n * @param {string} gid Group id\n */\n async createGroup(_ref) {\n let {\n name: gid\n } = _ref;\n this.loading = {\n groups: true,\n subadmins: true\n };\n try {\n await this.$store.dispatch('addGroup', gid);\n const userid = this.user.id;\n await this.$store.dispatch('addUserGroup', {\n userid,\n gid\n });\n } catch (error) {\n console.error(error);\n } finally {\n this.loading = {\n groups: false,\n subadmins: false\n };\n }\n return this.$store.getters.getGroups[this.groups.length];\n },\n /**\n * Add user to group\n *\n * @param {object} group Group object\n */\n async addUserGroup(group) {\n if (group.isCreating) {\n // This is NcSelect's internal value for a new inputted group name\n // Ignore\n return;\n }\n this.loading.groups = true;\n const userid = this.user.id;\n const gid = group.id;\n if (group.canAdd === false) {\n return false;\n }\n try {\n await this.$store.dispatch('addUserGroup', {\n userid,\n gid\n });\n } catch (error) {\n console.error(error);\n } finally {\n this.loading.groups = false;\n }\n },\n /**\n * Remove user from group\n *\n * @param {object} group Group object\n */\n async removeUserGroup(group) {\n if (group.canRemove === false) {\n return false;\n }\n this.loading.groups = true;\n const userid = this.user.id;\n const gid = group.id;\n try {\n await this.$store.dispatch('removeUserGroup', {\n userid,\n gid\n });\n this.loading.groups = false;\n // remove user from current list if current list is the removed group\n if (this.$route.params.selectedGroup === gid) {\n this.$store.commit('deleteUser', userid);\n }\n } catch {\n this.loading.groups = false;\n }\n },\n /**\n * Add user to group\n *\n * @param {object} group Group object\n */\n async addUserSubAdmin(group) {\n this.loading.subadmins = true;\n const userid = this.user.id;\n const gid = group.id;\n try {\n await this.$store.dispatch('addUserSubAdmin', {\n userid,\n gid\n });\n this.loading.subadmins = false;\n } catch (error) {\n console.error(error);\n }\n },\n /**\n * Remove user from group\n *\n * @param {object} group Group object\n */\n async removeUserSubAdmin(group) {\n this.loading.subadmins = true;\n const userid = this.user.id;\n const gid = group.id;\n try {\n await this.$store.dispatch('removeUserSubAdmin', {\n userid,\n gid\n });\n } catch (error) {\n console.error(error);\n } finally {\n this.loading.subadmins = false;\n }\n },\n /**\n * Dispatch quota set request\n *\n * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @return {string}\n */\n async setUserQuota() {\n let quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n // Make sure correct label is set for unlimited quota\n if (quota === 'none') {\n quota = unlimitedQuota;\n }\n this.loading.quota = true;\n\n // ensure we only send the preset id\n quota = quota.id ? quota.id : quota;\n try {\n // If human readable format, convert to raw float format\n // Else just send the raw string\n const value = (parseFileSize(quota, true) || quota).toString();\n await this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'quota',\n value\n });\n } catch (error) {\n console.error(error);\n } finally {\n this.loading.quota = false;\n }\n return quota;\n },\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @return {object} The validated quota object or unlimited quota if input is invalid\n */\n validateQuota(quota) {\n if (typeof quota === 'object') {\n var _quota;\n quota = ((_quota = quota) === null || _quota === void 0 ? void 0 : _quota.id) || quota.label;\n }\n // only used for new presets sent through @Tag\n const validQuota = parseFileSize(quota, true);\n if (validQuota === null) {\n return unlimitedQuota;\n } else {\n // unify format output\n quota = formatFileSize(parseFileSize(quota, true));\n return {\n id: quota,\n label: quota\n };\n }\n },\n /**\n * Dispatch language set request\n *\n * @param {object} lang language object {code:'en', name:'English'}\n * @return {object}\n */\n async setUserLanguage(lang) {\n this.loading.languages = true;\n // ensure we only send the preset id\n try {\n await this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'language',\n value: lang.code\n });\n this.loading.languages = false;\n } catch (error) {\n console.error(error);\n }\n return lang;\n },\n /**\n * Dispatch new welcome mail request\n */\n sendWelcomeMail() {\n this.loading.all = true;\n this.$store.dispatch('sendWelcomeMail', this.user.id).then(() => showSuccess(t('setting', 'Welcome mail sent!'), {\n timeout: 2000\n })).finally(() => {\n this.loading.all = false;\n });\n },\n async toggleEdit() {\n this.editing = !this.editing;\n if (this.editing) {\n var _this$$refs$displayNa;\n await this.$nextTick();\n (_this$$refs$displayNa = this.$refs.displayNameField) === null || _this$$refs$displayNa === void 0 || (_this$$refs$displayNa = _this$$refs$displayNa.$refs) === null || _this$$refs$displayNa === void 0 || (_this$$refs$displayNa = _this$$refs$displayNa.inputField) === null || _this$$refs$displayNa === void 0 || (_this$$refs$displayNa = _this$$refs$displayNa.$refs) === null || _this$$refs$displayNa === void 0 || (_this$$refs$displayNa = _this$$refs$displayNa.input) === null || _this$$refs$displayNa === void 0 || _this$$refs$displayNa.focus();\n }\n if (this.editedDisplayName !== this.user.displayname) {\n this.editedDisplayName = this.user.displayname;\n } else if (this.editedMail !== this.user.email) {\n var _this$user$email2;\n this.editedMail = (_this$user$email2 = this.user.email) !== null && _this$user$email2 !== void 0 ? _this$user$email2 : '';\n }\n }\n }\n};","import { formatFileSize, parseFileSize } from '@nextcloud/files';\nimport { generateUrl } from '@nextcloud/router';\nimport axios from '@nextcloud/axios';\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js';\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js';\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js';\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js';\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js';\nimport { GroupSorting } from '../../constants/GroupManagement.ts';\nimport { unlimitedQuota } from '../../utils/userUtils.ts';\nexport default {\n name: 'UserSettingsDialog',\n components: {\n NcAppSettingsDialog,\n NcAppSettingsSection,\n NcCheckboxRadioSwitch,\n NcNoteCard,\n NcSelect\n },\n props: {\n open: {\n type: Boolean,\n required: true\n }\n },\n data() {\n return {\n selectedQuota: false,\n loadingSendMail: false\n };\n },\n computed: {\n groupSorting: {\n get() {\n return this.$store.getters.getGroupSorting === GroupSorting.GroupName ? 'name' : 'member-count';\n },\n set(sorting) {\n this.$store.commit('setGroupSorting', sorting === 'name' ? GroupSorting.GroupName : GroupSorting.UserCount);\n }\n },\n /**\n * Admin has configured `sort_groups_by_name` in the system config\n */\n isGroupSortingEnforced() {\n return this.$store.getters.getServerData.forceSortGroupByName;\n },\n isModalOpen: {\n get() {\n return this.open;\n },\n set(open) {\n this.$emit('update:open', open);\n }\n },\n showConfig() {\n return this.$store.getters.getShowConfig;\n },\n settings() {\n return this.$store.getters.getServerData;\n },\n showLanguages: {\n get() {\n return this.showConfig.showLanguages;\n },\n set(status) {\n this.setShowConfig('showLanguages', status);\n }\n },\n showLastLogin: {\n get() {\n return this.showConfig.showLastLogin;\n },\n set(status) {\n this.setShowConfig('showLastLogin', status);\n }\n },\n showUserBackend: {\n get() {\n return this.showConfig.showUserBackend;\n },\n set(status) {\n this.setShowConfig('showUserBackend', status);\n }\n },\n showStoragePath: {\n get() {\n return this.showConfig.showStoragePath;\n },\n set(status) {\n this.setShowConfig('showStoragePath', status);\n }\n },\n quotaOptions() {\n // convert the preset array into objects\n const quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n id: cur,\n label: cur\n }), []);\n // add default presets\n if (this.settings.allowUnlimitedQuota) {\n quotaPreset.unshift(unlimitedQuota);\n }\n return quotaPreset;\n },\n defaultQuota: {\n get() {\n if (this.selectedQuota !== false) {\n return this.selectedQuota;\n }\n if (this.settings.defaultQuota !== unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n return {\n id: this.settings.defaultQuota,\n label: this.settings.defaultQuota\n };\n }\n return unlimitedQuota; // unlimited\n },\n set(quota) {\n this.selectedQuota = quota;\n }\n },\n sendWelcomeMail: {\n get() {\n return this.settings.newUserSendEmail;\n },\n async set(value) {\n try {\n this.loadingSendMail = true;\n this.$store.commit('setServerData', {\n ...this.settings,\n newUserSendEmail: value\n });\n await axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), {\n value: value ? 'yes' : 'no'\n });\n } catch (e) {\n console.error('could not update newUser.sendEmail preference: ' + e.message, e);\n } finally {\n this.loadingSendMail = false;\n }\n }\n }\n },\n methods: {\n setShowConfig(key, status) {\n this.$store.commit('setShowConfig', {\n key,\n value: status\n });\n },\n /**\n * Validate quota string to make sure it's a valid human file size\n *\n * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @return {object} The validated quota object or unlimited quota if input is invalid\n */\n validateQuota(quota) {\n if (typeof quota === 'object') {\n var _quota;\n quota = ((_quota = quota) === null || _quota === void 0 ? void 0 : _quota.id) || quota.label;\n }\n // only used for new presets sent through @Tag\n const validQuota = parseFileSize(quota);\n if (validQuota === null) {\n return unlimitedQuota;\n } else {\n // unify format output\n quota = formatFileSize(parseFileSize(quota));\n return {\n id: quota,\n label: quota\n };\n }\n },\n /**\n * Dispatch default quota set request\n *\n * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n */\n setDefaultQuota() {\n let quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n // Make sure correct label is set for unlimited quota\n if (quota === 'none') {\n quota = unlimitedQuota;\n }\n this.$store.dispatch('setAppConfig', {\n app: 'files',\n key: 'default_quota',\n // ensure we only send the preset id\n value: quota.id ? quota.id : quota\n }).then(() => {\n if (typeof quota !== 'object') {\n quota = {\n id: quota,\n label: quota\n };\n }\n this.defaultQuota = quota;\n });\n }\n }\n};","import { translate as t } from '@nextcloud/l10n';\nimport { defineComponent } from 'vue';\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js';\nimport UserList from '../components/UserList.vue';\nexport default defineComponent({\n name: 'UserManagement',\n components: {\n NcAppContent,\n UserList\n },\n data() {\n return {\n // temporary value used for multiselect change\n externalActions: []\n };\n },\n computed: {\n pageHeading() {\n var _matchHeading$this$se;\n if (this.selectedGroupDecoded === null) {\n return t('settings', 'Active accounts');\n }\n const matchHeading = {\n admin: t('settings', 'Admins'),\n disabled: t('settings', 'Disabled accounts')\n };\n return (_matchHeading$this$se = matchHeading[this.selectedGroupDecoded]) !== null && _matchHeading$this$se !== void 0 ? _matchHeading$this$se : t('settings', 'Account group: {group}', {\n group: this.selectedGroupDecoded\n });\n },\n selectedGroup() {\n return this.$route.params.selectedGroup;\n },\n selectedGroupDecoded() {\n return this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null;\n }\n },\n beforeMount() {\n this.$store.commit('initGroups', {\n groups: this.$store.getters.getServerData.groups,\n orderBy: this.$store.getters.getServerData.sortGroups,\n userCount: this.$store.getters.getServerData.userCount\n });\n this.$store.dispatch('getPasswordPolicyMinLength');\n },\n created() {\n var _window$OCA, _window$OCA$Settings, _window$OCA$Settings$;\n // init the OCA.Settings.UserList object\n window.OCA = (_window$OCA = window.OCA) !== null && _window$OCA !== void 0 ? _window$OCA : {};\n window.OCA.Settings = (_window$OCA$Settings = window.OCA.Settings) !== null && _window$OCA$Settings !== void 0 ? _window$OCA$Settings : {};\n window.OCA.Settings.UserList = (_window$OCA$Settings$ = window.OCA.Settings.UserList) !== null && _window$OCA$Settings$ !== void 0 ? _window$OCA$Settings$ : {};\n // and add the registerAction method\n window.OCA.Settings.UserList.registerAction = this.registerAction;\n },\n methods: {\n t,\n /**\n * Register a new action for the user menu\n *\n * @param {string} icon the icon class\n * @param {string} text the text to display\n * @param {Function} action the function to run\n * @return {Array}\n */\n registerAction(icon, text, action) {\n this.externalActions.push({\n icon,\n text,\n action\n });\n return this.externalActions;\n }\n }\n});","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"Fragment\", [_vm.showRemoveGroupModal ? _c(\"NcModal\", {\n on: {\n close: function ($event) {\n _vm.showRemoveGroupModal = false;\n }\n }\n }, [_c(\"div\", {\n staticClass: \"modal__content\"\n }, [_c(\"h2\", {\n staticClass: \"modal__header\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Please confirm the group removal\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcNoteCard\", {\n attrs: {\n type: \"warning\",\n \"show-alert\": \"\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", 'You are about to remove the group \"{group}\". The accounts will NOT be deleted.', {\n group: _vm.name\n })) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal__button-row\"\n }, [_c(\"NcButton\", {\n attrs: {\n type: \"secondary\"\n },\n on: {\n click: function ($event) {\n _vm.showRemoveGroupModal = false;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Cancel\")) + \"\\n\\t\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcButton\", {\n attrs: {\n type: \"primary\"\n },\n on: {\n click: _vm.removeGroup\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Confirm\")) + \"\\n\\t\\t\\t\\t\")])], 1)], 1)]) : _vm._e(), _vm._v(\" \"), _c(\"NcAppNavigationItem\", {\n key: _vm.id,\n attrs: {\n exact: true,\n name: _vm.name,\n to: {\n name: \"group\",\n params: {\n selectedGroup: encodeURIComponent(_vm.id)\n }\n },\n loading: _vm.loadingRenameGroup,\n \"menu-open\": _vm.openGroupMenu\n },\n on: {\n \"update:menuOpen\": _vm.handleGroupMenuOpen\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(\"AccountGroup\", {\n attrs: {\n size: 20\n }\n })];\n },\n proxy: true\n }, {\n key: \"counter\",\n fn: function () {\n return [_vm.count ? _c(\"NcCounterBubble\", {\n attrs: {\n type: _vm.active ? \"highlighted\" : undefined\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.count) + \"\\n\\t\\t\\t\")]) : _vm._e()];\n },\n proxy: true\n }, {\n key: \"actions\",\n fn: function () {\n return [_vm.id !== \"admin\" && _vm.id !== \"disabled\" && _vm.settings.isAdmin ? _c(\"NcActionInput\", {\n ref: \"displayNameInput\",\n attrs: {\n \"trailing-button-label\": _vm.t(\"settings\", \"Submit\"),\n type: \"text\",\n value: _vm.name,\n label: _vm.t(\"settings\", \"Rename group\")\n },\n on: {\n submit: function ($event) {\n return _vm.renameGroup(_vm.id);\n }\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(\"Pencil\", {\n attrs: {\n size: 20\n }\n })];\n },\n proxy: true\n }], null, false, 580569589)\n }) : _vm._e(), _vm._v(\" \"), _vm.id !== \"admin\" && _vm.id !== \"disabled\" && _vm.settings.isAdmin ? _c(\"NcActionButton\", {\n on: {\n click: function ($event) {\n _vm.showRemoveGroupModal = true;\n }\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(\"Delete\", {\n attrs: {\n size: 20\n }\n })];\n },\n proxy: true\n }], null, false, 2705356561)\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Remove group\")) + \"\\n\\t\\t\\t\")]) : _vm._e()];\n },\n proxy: true\n }])\n })], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"Fragment\", [_vm.showConfig.showNewUserForm ? _c(\"NewUserModal\", {\n attrs: {\n loading: _vm.loading,\n \"new-user\": _vm.newUser,\n \"quota-options\": _vm.quotaOptions\n },\n on: {\n reset: _vm.resetForm,\n close: _vm.closeModal\n }\n }) : _vm._e(), _vm._v(\" \"), _vm.filteredUsers.length === 0 ? _c(\"NcEmptyContent\", {\n staticClass: \"empty\",\n attrs: {\n name: _vm.isInitialLoad && _vm.loading.users ? null : _vm.t(\"settings\", \"No accounts\")\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_vm.isInitialLoad && _vm.loading.users ? _c(\"NcLoadingIcon\", {\n attrs: {\n name: _vm.t(\"settings\", \"Loading accounts …\"),\n size: 64\n }\n }) : _c(\"NcIconSvgWrapper\", {\n attrs: {\n path: _vm.mdiAccountGroup,\n size: 64\n }\n })];\n },\n proxy: true\n }], null, false, 226056511)\n }) : _c(\"VirtualList\", {\n style: _vm.style,\n attrs: {\n \"data-component\": _vm.UserRow,\n \"data-sources\": _vm.filteredUsers,\n \"data-key\": \"id\",\n \"data-cy-user-list\": \"\",\n \"item-height\": _vm.rowHeight,\n \"extra-props\": {\n users: _vm.users,\n settings: _vm.settings,\n hasObfuscated: _vm.hasObfuscated,\n groups: _vm.groups,\n subAdminsGroups: _vm.subAdminsGroups,\n quotaOptions: _vm.quotaOptions,\n languages: _vm.languages,\n externalActions: _vm.externalActions\n }\n },\n on: {\n \"scroll-end\": _vm.handleScrollEnd\n },\n scopedSlots: _vm._u([{\n key: \"before\",\n fn: function () {\n return [_c(\"caption\", {\n staticClass: \"hidden-visually\"\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"List of accounts. This list is not fully rendered for performance reasons. The accounts will be rendered as you navigate through the list.\")) + \"\\n\\t\\t\\t\")])];\n },\n proxy: true\n }, {\n key: \"header\",\n fn: function () {\n return [_c(\"UserListHeader\", {\n attrs: {\n \"has-obfuscated\": _vm.hasObfuscated\n }\n })];\n },\n proxy: true\n }, {\n key: \"footer\",\n fn: function () {\n return [_c(\"UserListFooter\", {\n attrs: {\n loading: _vm.loading.users,\n \"filtered-users\": _vm.filteredUsers\n }\n })];\n },\n proxy: true\n }])\n })], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"NcModal\", _vm._g({\n staticClass: \"modal\",\n attrs: {\n size: \"small\"\n }\n }, _vm.$listeners), [_c(\"form\", {\n staticClass: \"modal__form\",\n attrs: {\n \"data-test\": \"form\",\n disabled: _vm.loading.all\n },\n on: {\n submit: function ($event) {\n $event.preventDefault();\n return _vm.createUser.apply(null, arguments);\n }\n }\n }, [_c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"New user\")))]), _vm._v(\" \"), _c(\"NcTextField\", {\n ref: \"username\",\n staticClass: \"modal__item\",\n attrs: {\n \"data-test\": \"username\",\n value: _vm.newUser.id,\n disabled: _vm.settings.newUserGenerateUserID,\n label: _vm.usernameLabel,\n autocapitalize: \"none\",\n autocomplete: \"off\",\n spellcheck: \"false\",\n pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\n required: \"\"\n },\n on: {\n \"update:value\": function ($event) {\n return _vm.$set(_vm.newUser, \"id\", $event);\n }\n }\n }), _vm._v(\" \"), _c(\"NcTextField\", {\n staticClass: \"modal__item\",\n attrs: {\n \"data-test\": \"displayName\",\n value: _vm.newUser.displayName,\n label: _vm.t(\"settings\", \"Display name\"),\n autocapitalize: \"none\",\n autocomplete: \"off\",\n spellcheck: \"false\"\n },\n on: {\n \"update:value\": function ($event) {\n return _vm.$set(_vm.newUser, \"displayName\", $event);\n }\n }\n }), _vm._v(\" \"), !_vm.settings.newUserRequireEmail ? _c(\"span\", {\n staticClass: \"modal__hint\",\n attrs: {\n id: \"password-email-hint\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Either password or email is required\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"NcPasswordField\", {\n ref: \"password\",\n staticClass: \"modal__item\",\n attrs: {\n \"data-test\": \"password\",\n value: _vm.newUser.password,\n minlength: _vm.minPasswordLength,\n maxlength: 469,\n \"aria-describedby\": \"password-email-hint\",\n label: _vm.newUser.mailAddress === \"\" ? _vm.t(\"settings\", \"Password (required)\") : _vm.t(\"settings\", \"Password\"),\n autocapitalize: \"none\",\n autocomplete: \"new-password\",\n spellcheck: \"false\",\n required: _vm.newUser.mailAddress === \"\"\n },\n on: {\n \"update:value\": function ($event) {\n return _vm.$set(_vm.newUser, \"password\", $event);\n }\n }\n }), _vm._v(\" \"), _c(\"NcTextField\", {\n staticClass: \"modal__item\",\n attrs: {\n \"data-test\": \"email\",\n type: \"email\",\n value: _vm.newUser.mailAddress,\n \"aria-describedby\": \"password-email-hint\",\n label: _vm.newUser.password === \"\" || _vm.settings.newUserRequireEmail ? _vm.t(\"settings\", \"Email (required)\") : _vm.t(\"settings\", \"Email\"),\n autocapitalize: \"none\",\n autocomplete: \"off\",\n spellcheck: \"false\",\n required: _vm.newUser.password === \"\" || _vm.settings.newUserRequireEmail\n },\n on: {\n \"update:value\": function ($event) {\n return _vm.$set(_vm.newUser, \"mailAddress\", $event);\n }\n }\n }), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal__item\"\n }, [_c(\"label\", {\n staticClass: \"modal__label\",\n attrs: {\n for: \"new-user-groups\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(!_vm.settings.isAdmin ? _vm.t(\"settings\", \"Groups (required)\") : _vm.t(\"settings\", \"Groups\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"modal__select\",\n attrs: {\n \"input-id\": \"new-user-groups\",\n placeholder: _vm.t(\"settings\", \"Set user groups\"),\n disabled: _vm.loading.groups || _vm.loading.all,\n options: _vm.canAddGroups,\n value: _vm.newUser.groups,\n label: \"name\",\n \"close-on-select\": false,\n multiple: true,\n taggable: true,\n required: !_vm.settings.isAdmin\n },\n on: {\n input: _vm.handleGroupInput,\n \"option:created\": _vm.createGroup\n }\n })], 1), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 ? _c(\"div\", {\n staticClass: \"modal__item\"\n }, [_c(\"label\", {\n staticClass: \"modal__label\",\n attrs: {\n for: \"new-user-sub-admin\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Administered groups\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"modal__select\",\n attrs: {\n \"input-id\": \"new-user-sub-admin\",\n placeholder: _vm.t(\"settings\", \"Set user as admin for …\"),\n options: _vm.subAdminsGroups,\n \"close-on-select\": false,\n multiple: true,\n label: \"name\"\n },\n model: {\n value: _vm.newUser.subAdminsGroups,\n callback: function ($$v) {\n _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v);\n },\n expression: \"newUser.subAdminsGroups\"\n }\n })], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n staticClass: \"modal__item\"\n }, [_c(\"label\", {\n staticClass: \"modal__label\",\n attrs: {\n for: \"new-user-quota\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Quota\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"modal__select\",\n attrs: {\n \"input-id\": \"new-user-quota\",\n placeholder: _vm.t(\"settings\", \"Set user quota\"),\n options: _vm.quotaOptions,\n clearable: false,\n taggable: true,\n \"create-option\": _vm.validateQuota\n },\n model: {\n value: _vm.newUser.quota,\n callback: function ($$v) {\n _vm.$set(_vm.newUser, \"quota\", $$v);\n },\n expression: \"newUser.quota\"\n }\n })], 1), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"div\", {\n staticClass: \"modal__item\"\n }, [_c(\"label\", {\n staticClass: \"modal__label\",\n attrs: {\n for: \"new-user-language\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Language\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"modal__select\",\n attrs: {\n \"input-id\": \"new-user-language\",\n placeholder: _vm.t(\"settings\", \"Set default language\"),\n clearable: false,\n selectable: option => !option.languages,\n \"filter-by\": _vm.languageFilterBy,\n options: _vm.languages,\n label: \"name\"\n },\n model: {\n value: _vm.newUser.language,\n callback: function ($$v) {\n _vm.$set(_vm.newUser, \"language\", $$v);\n },\n expression: \"newUser.language\"\n }\n })], 1) : _vm._e(), _vm._v(\" \"), _c(\"div\", {\n class: [\"modal__item managers\", {\n \"icon-loading-small\": _vm.loading.manager\n }]\n }, [_c(\"label\", {\n staticClass: \"modal__label\",\n attrs: {\n for: \"new-user-manager\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Manager\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"modal__select\",\n attrs: {\n \"input-id\": \"new-user-manager\",\n placeholder: _vm.managerLabel,\n options: _vm.possibleManagers,\n \"user-select\": true,\n label: \"displayname\"\n },\n on: {\n search: _vm.searchUserManager\n },\n model: {\n value: _vm.newUser.manager,\n callback: function ($$v) {\n _vm.$set(_vm.newUser, \"manager\", $$v);\n },\n expression: \"newUser.manager\"\n }\n })], 1), _vm._v(\" \"), _c(\"NcButton\", {\n staticClass: \"modal__submit\",\n attrs: {\n \"data-test\": \"submit\",\n type: \"primary\",\n \"native-type\": \"submit\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Add new user\")) + \"\\n\\t\\t\")])], 1)]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy;\n return _c(\"tr\", {\n staticClass: \"footer\"\n }, [_c(\"th\", {\n attrs: {\n scope: \"row\"\n }\n }, [_c(\"span\", {\n staticClass: \"hidden-visually\"\n }, [_vm._v(_vm._s(_vm.t(\"settings\", \"Total rows summary\")))])]), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"footer__cell footer__cell--loading\"\n }, [_vm.loading ? _c(\"NcLoadingIcon\", {\n attrs: {\n title: _vm.t(\"settings\", \"Loading users …\"),\n size: 32\n }\n }) : _vm._e()], 1), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"footer__cell footer__cell--count footer__cell--multiline\"\n }, [_c(\"span\", {\n attrs: {\n \"aria-describedby\": \"user-count-desc\"\n }\n }, [_vm._v(_vm._s(_vm.userCount))]), _vm._v(\" \"), _c(\"span\", {\n staticClass: \"hidden-visually\",\n attrs: {\n id: \"user-count-desc\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Scroll to load more rows\")) + \"\\n\\t\\t\")])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy;\n return _c(\"tr\", {\n staticClass: \"header\"\n }, [_c(\"th\", {\n staticClass: \"header__cell header__cell--avatar\",\n attrs: {\n \"data-cy-user-list-header-avatar\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", {\n staticClass: \"hidden-visually\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Avatar\")) + \"\\n\\t\\t\")])]), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell header__cell--displayname\",\n attrs: {\n \"data-cy-user-list-header-displayname\": \"\",\n scope: \"col\"\n }\n }, [_c(\"strong\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Display name\")) + \"\\n\\t\\t\")])]), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell header__cell--username\",\n attrs: {\n \"data-cy-user-list-header-username\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Account name\")) + \"\\n\\t\\t\")])]), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell\",\n class: {\n \"header__cell--obfuscated\": _vm.hasObfuscated\n },\n attrs: {\n \"data-cy-user-list-header-password\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.passwordLabel))])]), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell\",\n attrs: {\n \"data-cy-user-list-header-email\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Email\")))])]), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell header__cell--large\",\n attrs: {\n \"data-cy-user-list-header-groups\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Groups\")))])]), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c(\"th\", {\n staticClass: \"header__cell header__cell--large\",\n attrs: {\n \"data-cy-user-list-header-subadmins\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Group admin for\")))])]) : _vm._e(), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell\",\n attrs: {\n \"data-cy-user-list-header-quota\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Quota\")))])]), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"th\", {\n staticClass: \"header__cell header__cell--large\",\n attrs: {\n \"data-cy-user-list-header-languages\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Language\")))])]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath ? _c(\"th\", {\n staticClass: \"header__cell header__cell--large\",\n attrs: {\n \"data-cy-user-list-header-storage-location\": \"\",\n scope: \"col\"\n }\n }, [_vm.showConfig.showUserBackend ? _c(\"span\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Account backend\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showStoragePath ? _c(\"span\", {\n staticClass: \"header__subtitle\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Storage location\")) + \"\\n\\t\\t\")]) : _vm._e()]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showLastLogin ? _c(\"th\", {\n staticClass: \"header__cell\",\n attrs: {\n \"data-cy-user-list-header-last-login\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Last login\")))])]) : _vm._e(), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell header__cell--large header__cell--fill\",\n attrs: {\n \"data-cy-user-list-header-manager\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Manager\")))])]), _vm._v(\" \"), _c(\"th\", {\n staticClass: \"header__cell header__cell--actions\",\n attrs: {\n \"data-cy-user-list-header-actions\": \"\",\n scope: \"col\"\n }\n }, [_c(\"span\", {\n staticClass: \"hidden-visually\"\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"User actions\")) + \"\\n\\t\\t\")])])]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm$user$displayname, _vm$user$email, _vm$userGroupsLabels, _vm$userSubAdminsGrou;\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"tr\", {\n staticClass: \"user-list__row\",\n attrs: {\n \"data-cy-user-row\": _vm.user.id\n }\n }, [_c(\"td\", {\n staticClass: \"row__cell row__cell--avatar\",\n attrs: {\n \"data-cy-user-list-cell-avatar\": \"\"\n }\n }, [_vm.isLoadingUser ? _c(\"NcLoadingIcon\", {\n attrs: {\n name: _vm.t(\"settings\", \"Loading account …\"),\n size: 32\n }\n }) : _vm.visible ? _c(\"NcAvatar\", {\n attrs: {\n \"disable-menu\": \"\",\n \"show-user-status\": false,\n user: _vm.user.id\n }\n }) : _vm._e()], 1), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell row__cell--displayname\",\n attrs: {\n \"data-cy-user-list-cell-displayname\": \"\"\n }\n }, [_vm.editing && _vm.user.backendCapabilities.setDisplayName ? [_c(\"NcTextField\", {\n ref: \"displayNameField\",\n staticClass: \"user-row-text-field\",\n class: {\n \"icon-loading-small\": _vm.loading.displayName\n },\n attrs: {\n \"data-cy-user-list-input-displayname\": \"\",\n \"data-loading\": _vm.loading.displayName || undefined,\n \"trailing-button-label\": _vm.t(\"settings\", \"Submit\"),\n \"show-trailing-button\": true,\n disabled: _vm.loading.displayName || _vm.isLoadingField,\n label: _vm.t(\"settings\", \"Change display name\"),\n \"trailing-button-icon\": \"arrowRight\",\n value: _vm.editedDisplayName,\n autocapitalize: \"off\",\n autocomplete: \"off\",\n spellcheck: \"false\"\n },\n on: {\n \"update:value\": function ($event) {\n _vm.editedDisplayName = $event;\n },\n \"trailing-button-click\": _vm.updateDisplayName\n }\n })] : !_vm.isObfuscated ? _c(\"strong\", {\n attrs: {\n title: ((_vm$user$displayname = _vm.user.displayname) === null || _vm$user$displayname === void 0 ? void 0 : _vm$user$displayname.length) > 20 ? _vm.user.displayname : null\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.displayname) + \"\\n\\t\\t\")]) : _vm._e()], 2), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell row__cell--username\",\n attrs: {\n \"data-cy-user-list-cell-username\": \"\"\n }\n }, [_c(\"span\", {\n staticClass: \"row__subtitle\"\n }, [_vm._v(_vm._s(_vm.user.id))])]), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell\",\n class: {\n \"row__cell--obfuscated\": _vm.hasObfuscated\n },\n attrs: {\n \"data-cy-user-list-cell-password\": \"\"\n }\n }, [_vm.editing && _vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword ? [_c(\"NcTextField\", {\n staticClass: \"user-row-text-field\",\n class: {\n \"icon-loading-small\": _vm.loading.password\n },\n attrs: {\n \"data-cy-user-list-input-password\": \"\",\n \"data-loading\": _vm.loading.password || undefined,\n \"trailing-button-label\": _vm.t(\"settings\", \"Submit\"),\n \"show-trailing-button\": true,\n disabled: _vm.loading.password || _vm.isLoadingField,\n minlength: _vm.minPasswordLength,\n maxlength: \"469\",\n label: _vm.t(\"settings\", \"Set new password\"),\n \"trailing-button-icon\": \"arrowRight\",\n value: _vm.editedPassword,\n autocapitalize: \"off\",\n autocomplete: \"new-password\",\n required: \"\",\n spellcheck: \"false\",\n type: \"password\"\n },\n on: {\n \"update:value\": function ($event) {\n _vm.editedPassword = $event;\n },\n \"trailing-button-click\": _vm.updatePassword\n }\n })] : _vm.isObfuscated ? _c(\"span\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"You do not have permissions to see the details of this account\")) + \"\\n\\t\\t\")]) : _vm._e()], 2), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell\",\n attrs: {\n \"data-cy-user-list-cell-email\": \"\"\n }\n }, [_vm.editing ? [_c(\"NcTextField\", {\n staticClass: \"user-row-text-field\",\n class: {\n \"icon-loading-small\": _vm.loading.mailAddress\n },\n attrs: {\n \"data-cy-user-list-input-email\": \"\",\n \"data-loading\": _vm.loading.mailAddress || undefined,\n \"show-trailing-button\": true,\n \"trailing-button-label\": _vm.t(\"settings\", \"Submit\"),\n label: _vm.t(\"settings\", \"Set new email address\"),\n disabled: _vm.loading.mailAddress || _vm.isLoadingField,\n \"trailing-button-icon\": \"arrowRight\",\n value: _vm.editedMail,\n autocapitalize: \"off\",\n autocomplete: \"email\",\n spellcheck: \"false\",\n type: \"email\"\n },\n on: {\n \"update:value\": function ($event) {\n _vm.editedMail = $event;\n },\n \"trailing-button-click\": _vm.updateEmail\n }\n })] : !_vm.isObfuscated ? _c(\"span\", {\n attrs: {\n title: ((_vm$user$email = _vm.user.email) === null || _vm$user$email === void 0 ? void 0 : _vm$user$email.length) > 20 ? _vm.user.email : null\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.email) + \"\\n\\t\\t\")]) : _vm._e()], 2), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell row__cell--large row__cell--multiline\",\n attrs: {\n \"data-cy-user-list-cell-groups\": \"\"\n }\n }, [_vm.editing ? [_c(\"label\", {\n staticClass: \"hidden-visually\",\n attrs: {\n for: \"groups\" + _vm.uniqueId\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Add user to group\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n attrs: {\n \"data-cy-user-list-input-groups\": \"\",\n \"data-loading\": _vm.loading.groups || undefined,\n \"input-id\": \"groups\" + _vm.uniqueId,\n \"close-on-select\": false,\n disabled: _vm.isLoadingField,\n loading: _vm.loading.groups,\n multiple: true,\n \"append-to-body\": false,\n options: _vm.availableGroups,\n placeholder: _vm.t(\"settings\", \"Add account to group\"),\n taggable: _vm.settings.isAdmin,\n value: _vm.userGroups,\n label: \"name\",\n \"no-wrap\": true,\n \"create-option\": value => ({\n name: value,\n isCreating: true\n })\n },\n on: {\n \"option:created\": _vm.createGroup,\n \"option:selected\": options => _vm.addUserGroup(options.at(-1)),\n \"option:deselected\": _vm.removeUserGroup\n }\n })] : !_vm.isObfuscated ? _c(\"span\", {\n attrs: {\n title: ((_vm$userGroupsLabels = _vm.userGroupsLabels) === null || _vm$userGroupsLabels === void 0 ? void 0 : _vm$userGroupsLabels.length) > 40 ? _vm.userGroupsLabels : null\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.userGroupsLabels) + \"\\n\\t\\t\")]) : _vm._e()], 2), _vm._v(\" \"), _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin ? _c(\"td\", {\n staticClass: \"row__cell row__cell--large row__cell--multiline\",\n attrs: {\n \"data-cy-user-list-cell-subadmins\": \"\"\n }\n }, [_vm.editing && _vm.settings.isAdmin && _vm.subAdminsGroups.length > 0 ? [_c(\"label\", {\n staticClass: \"hidden-visually\",\n attrs: {\n for: \"subadmins\" + _vm.uniqueId\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Set account as admin for\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n attrs: {\n \"data-cy-user-list-input-subadmins\": \"\",\n \"data-loading\": _vm.loading.subadmins || undefined,\n \"input-id\": \"subadmins\" + _vm.uniqueId,\n \"close-on-select\": false,\n disabled: _vm.isLoadingField,\n loading: _vm.loading.subadmins,\n label: \"name\",\n \"append-to-body\": false,\n multiple: true,\n \"no-wrap\": true,\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set account as admin for\"),\n value: _vm.userSubAdminsGroups\n },\n on: {\n \"option:deselected\": _vm.removeUserSubAdmin,\n \"option:selected\": options => _vm.addUserSubAdmin(options.at(-1))\n }\n })] : !_vm.isObfuscated ? _c(\"span\", {\n attrs: {\n title: ((_vm$userSubAdminsGrou = _vm.userSubAdminsGroupsLabels) === null || _vm$userSubAdminsGrou === void 0 ? void 0 : _vm$userSubAdminsGrou.length) > 40 ? _vm.userSubAdminsGroupsLabels : null\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.userSubAdminsGroupsLabels) + \"\\n\\t\\t\")]) : _vm._e()], 2) : _vm._e(), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell\",\n attrs: {\n \"data-cy-user-list-cell-quota\": \"\"\n }\n }, [_vm.editing ? [_c(\"label\", {\n staticClass: \"hidden-visually\",\n attrs: {\n for: \"quota\" + _vm.uniqueId\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Select account quota\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n attrs: {\n \"close-on-select\": true,\n \"create-option\": _vm.validateQuota,\n \"data-cy-user-list-input-quota\": \"\",\n \"data-loading\": _vm.loading.quota || undefined,\n disabled: _vm.isLoadingField,\n loading: _vm.loading.quota,\n \"append-to-body\": false,\n clearable: false,\n \"input-id\": \"quota\" + _vm.uniqueId,\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select account quota\"),\n taggable: true\n },\n on: {\n \"option:selected\": _vm.setUserQuota\n },\n model: {\n value: _vm.editedUserQuota,\n callback: function ($$v) {\n _vm.editedUserQuota = $$v;\n },\n expression: \"editedUserQuota\"\n }\n })] : !_vm.isObfuscated ? [_c(\"span\", {\n attrs: {\n id: \"quota-progress\" + _vm.uniqueId\n }\n }, [_vm._v(_vm._s(_vm.userQuota) + \" (\" + _vm._s(_vm.usedSpace) + \")\")]), _vm._v(\" \"), _c(\"NcProgressBar\", {\n staticClass: \"row__progress\",\n class: {\n \"row__progress--warn\": _vm.usedQuota > 80\n },\n attrs: {\n \"aria-labelledby\": \"quota-progress\" + _vm.uniqueId,\n value: _vm.usedQuota\n }\n })] : _vm._e()], 2), _vm._v(\" \"), _vm.showConfig.showLanguages ? _c(\"td\", {\n staticClass: \"row__cell row__cell--large\",\n attrs: {\n \"data-cy-user-list-cell-language\": \"\"\n }\n }, [_vm.editing ? [_c(\"label\", {\n staticClass: \"hidden-visually\",\n attrs: {\n for: \"language\" + _vm.uniqueId\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Set the language\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n attrs: {\n id: \"language\" + _vm.uniqueId,\n \"data-cy-user-list-input-language\": \"\",\n \"data-loading\": _vm.loading.languages || undefined,\n \"allow-empty\": false,\n disabled: _vm.isLoadingField,\n loading: _vm.loading.languages,\n clearable: false,\n \"append-to-body\": false,\n options: _vm.availableLanguages,\n placeholder: _vm.t(\"settings\", \"No language set\"),\n value: _vm.userLanguage,\n label: \"name\"\n },\n on: {\n input: _vm.setUserLanguage\n }\n })] : !_vm.isObfuscated ? _c(\"span\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.userLanguage.name) + \"\\n\\t\\t\")]) : _vm._e()], 2) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath ? _c(\"td\", {\n staticClass: \"row__cell row__cell--large\",\n attrs: {\n \"data-cy-user-list-cell-storage-location\": \"\"\n }\n }, [!_vm.isObfuscated ? [_vm.showConfig.showUserBackend ? _c(\"span\", [_vm._v(_vm._s(_vm.user.backend))]) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showStoragePath ? _c(\"span\", {\n staticClass: \"row__subtitle\",\n attrs: {\n title: _vm.user.storageLocation\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.user.storageLocation) + \"\\n\\t\\t\\t\")]) : _vm._e()] : _vm._e()], 2) : _vm._e(), _vm._v(\" \"), _vm.showConfig.showLastLogin ? _c(\"td\", {\n staticClass: \"row__cell\",\n attrs: {\n title: _vm.userLastLoginTooltip,\n \"data-cy-user-list-cell-last-login\": \"\"\n }\n }, [!_vm.isObfuscated ? _c(\"span\", [_vm._v(_vm._s(_vm.userLastLogin))]) : _vm._e()]) : _vm._e(), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell row__cell--large row__cell--fill\",\n attrs: {\n \"data-cy-user-list-cell-manager\": \"\"\n }\n }, [_vm.editing ? [_c(\"label\", {\n staticClass: \"hidden-visually\",\n attrs: {\n for: \"manager\" + _vm.uniqueId\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.managerLabel) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcSelect\", {\n staticClass: \"select--fill\",\n attrs: {\n \"data-cy-user-list-input-manager\": \"\",\n \"data-loading\": _vm.loading.manager || undefined,\n \"input-id\": \"manager\" + _vm.uniqueId,\n \"close-on-select\": true,\n disabled: _vm.isLoadingField,\n \"append-to-body\": false,\n loading: _vm.loadingPossibleManagers || _vm.loading.manager,\n label: \"displayname\",\n options: _vm.possibleManagers,\n placeholder: _vm.managerLabel\n },\n on: {\n open: _vm.searchInitialUserManager,\n search: _vm.searchUserManager,\n \"option:selected\": _vm.updateUserManager\n },\n model: {\n value: _vm.currentManager,\n callback: function ($$v) {\n _vm.currentManager = $$v;\n },\n expression: \"currentManager\"\n }\n })] : !_vm.isObfuscated ? _c(\"span\", [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.user.manager) + \"\\n\\t\\t\")]) : _vm._e()], 2), _vm._v(\" \"), _c(\"td\", {\n staticClass: \"row__cell row__cell--actions\",\n attrs: {\n \"data-cy-user-list-cell-actions\": \"\"\n }\n }, [_vm.visible && !_vm.isObfuscated && _vm.canEdit && !_vm.loading.all ? _c(\"UserRowActions\", {\n attrs: {\n actions: _vm.userActions,\n disabled: _vm.isLoadingField,\n edit: _vm.editing,\n user: _vm.user\n },\n on: {\n \"update:edit\": _vm.toggleEdit\n }\n }) : _vm._e()], 1)]);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy;\n return _c(\"NcActions\", {\n attrs: {\n \"aria-label\": _vm.t(\"settings\", \"Toggle account actions menu\"),\n disabled: _vm.disabled,\n inline: 1\n }\n }, [_c(\"NcActionButton\", {\n attrs: {\n \"data-cy-user-list-action-toggle-edit\": \"\".concat(_vm.edit),\n disabled: _vm.disabled\n },\n on: {\n click: _vm.toggleEdit\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(\"NcIconSvgWrapper\", {\n key: _vm.editSvg,\n attrs: {\n svg: _vm.editSvg,\n \"aria-hidden\": \"true\"\n }\n })];\n },\n proxy: true\n }])\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.edit ? _vm.t(\"settings\", \"Done\") : _vm.t(\"settings\", \"Edit\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _vm._l(_vm.actions, function (_ref, index) {\n let {\n action,\n icon,\n text\n } = _ref;\n return _c(\"NcActionButton\", {\n key: index,\n attrs: {\n disabled: _vm.disabled,\n \"aria-label\": text,\n icon: icon\n },\n on: {\n click: event => action(event, {\n ..._vm.user\n })\n }\n }, [_vm._v(\"\\n\\t\\t\" + _vm._s(text) + \"\\n\\t\")]);\n })], 2);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"NcAppSettingsDialog\", {\n attrs: {\n open: _vm.isModalOpen,\n \"show-navigation\": true,\n name: _vm.t(\"settings\", \"Account management settings\")\n },\n on: {\n \"update:open\": function ($event) {\n _vm.isModalOpen = $event;\n }\n }\n }, [_c(\"NcAppSettingsSection\", {\n attrs: {\n id: \"visibility-settings\",\n name: _vm.t(\"settings\", \"Visibility\")\n }\n }, [_c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"switch\",\n \"data-test\": \"showLanguages\",\n checked: _vm.showLanguages\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.showLanguages = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Show language\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"switch\",\n \"data-test\": \"showUserBackend\",\n checked: _vm.showUserBackend\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.showUserBackend = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Show account backend\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"switch\",\n \"data-test\": \"showStoragePath\",\n checked: _vm.showStoragePath\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.showStoragePath = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Show storage path\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"switch\",\n \"data-test\": \"showLastLogin\",\n checked: _vm.showLastLogin\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.showLastLogin = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Show last login\")) + \"\\n\\t\\t\")])], 1), _vm._v(\" \"), _c(\"NcAppSettingsSection\", {\n attrs: {\n id: \"groups-sorting\",\n name: _vm.t(\"settings\", \"Sorting\")\n }\n }, [_vm.isGroupSortingEnforced ? _c(\"NcNoteCard\", {\n attrs: {\n type: \"warning\"\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"The system config enforces sorting the groups by name. This also disables showing the member count.\")) + \"\\n\\t\\t\")]) : _vm._e(), _vm._v(\" \"), _c(\"fieldset\", [_c(\"legend\", [_vm._v(_vm._s(_vm.t(\"settings\", \"Group list sorting\")))]), _vm._v(\" \"), _c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"radio\",\n checked: _vm.groupSorting,\n \"data-test\": \"sortGroupsByMemberCount\",\n disabled: _vm.isGroupSortingEnforced,\n name: \"group-sorting-mode\",\n value: \"member-count\"\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.groupSorting = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"By member count\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"radio\",\n checked: _vm.groupSorting,\n \"data-test\": \"sortGroupsByName\",\n disabled: _vm.isGroupSortingEnforced,\n name: \"group-sorting-mode\",\n value: \"name\"\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.groupSorting = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"By name\")) + \"\\n\\t\\t\\t\")])], 1)], 1), _vm._v(\" \"), _c(\"NcAppSettingsSection\", {\n attrs: {\n id: \"email-settings\",\n name: _vm.t(\"settings\", \"Send email\")\n }\n }, [_c(\"NcCheckboxRadioSwitch\", {\n attrs: {\n type: \"switch\",\n \"data-test\": \"sendWelcomeMail\",\n checked: _vm.sendWelcomeMail,\n disabled: _vm.loadingSendMail\n },\n on: {\n \"update:checked\": function ($event) {\n _vm.sendWelcomeMail = $event;\n }\n }\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Send welcome email to new accounts\")) + \"\\n\\t\\t\")])], 1), _vm._v(\" \"), _c(\"NcAppSettingsSection\", {\n attrs: {\n id: \"default-settings\",\n name: _vm.t(\"settings\", \"Defaults\")\n }\n }, [_c(\"NcSelect\", {\n attrs: {\n \"input-label\": _vm.t(\"settings\", \"Default quota\"),\n placement: \"top\",\n taggable: true,\n options: _vm.quotaOptions,\n \"create-option\": _vm.validateQuota,\n placeholder: _vm.t(\"settings\", \"Select default quota\"),\n clearable: false\n },\n on: {\n \"option:selected\": _vm.setDefaultQuota\n },\n model: {\n value: _vm.defaultQuota,\n callback: function ($$v) {\n _vm.defaultQuota = $$v;\n },\n expression: \"defaultQuota\"\n }\n })], 1)], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy;\n return _c(\"table\", {\n staticClass: \"user-list\"\n }, [_vm._t(\"before\"), _vm._v(\" \"), _c(\"thead\", {\n ref: \"thead\",\n staticClass: \"user-list__header\",\n attrs: {\n role: \"rowgroup\"\n }\n }, [_vm._t(\"header\")], 2), _vm._v(\" \"), _c(\"tbody\", {\n staticClass: \"user-list__body\",\n style: _vm.tbodyStyle\n }, _vm._l(_vm.renderedItems, function (item, i) {\n return _c(_vm.dataComponent, _vm._b({\n key: item[_vm.dataKey],\n tag: \"component\",\n attrs: {\n user: item,\n visible: (i >= _vm.bufferItems || _vm.index <= _vm.bufferItems) && i < _vm.shownItems - _vm.bufferItems\n }\n }, \"component\", _vm.extraProps, false));\n }), 1), _vm._v(\" \"), _c(\"tfoot\", {\n directives: [{\n name: \"element-visibility\",\n rawName: \"v-element-visibility\",\n value: _vm.handleFooterVisibility,\n expression: \"handleFooterVisibility\"\n }],\n ref: \"tfoot\",\n staticClass: \"user-list__footer\",\n attrs: {\n role: \"rowgroup\"\n }\n }, [_vm._t(\"footer\")], 2)], 2);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy;\n return _c(\"NcAppContent\", {\n attrs: {\n \"page-heading\": _vm.pageHeading\n }\n }, [_c(\"UserList\", {\n attrs: {\n \"selected-group\": _vm.selectedGroupDecoded,\n \"external-actions\": _vm.externalActions\n }\n })], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","var render = function render() {\n var _vm = this,\n _c = _vm._self._c,\n _setup = _vm._self._setupProxy;\n return _c(_setup.NcAppNavigation, {\n attrs: {\n \"aria-label\": _setup.t(\"settings\", \"Account management\")\n },\n scopedSlots: _vm._u([{\n key: \"footer\",\n fn: function () {\n return [_c(_setup.NcButton, {\n staticClass: \"account-management__settings-toggle\",\n attrs: {\n type: \"tertiary\"\n },\n on: {\n click: function ($event) {\n _setup.isDialogOpen = true;\n }\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(_setup.NcIconSvgWrapper, {\n attrs: {\n path: _setup.mdiCog\n }\n })];\n },\n proxy: true\n }])\n }, [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_setup.t(\"settings\", \"Account management settings\")) + \"\\n\\t\\t\")]), _vm._v(\" \"), _c(_setup.UserSettingsDialog, {\n attrs: {\n open: _setup.isDialogOpen\n },\n on: {\n \"update:open\": function ($event) {\n _setup.isDialogOpen = $event;\n }\n }\n })];\n },\n proxy: true\n }])\n }, [_c(_setup.NcAppNavigationNew, {\n attrs: {\n \"button-id\": \"new-user-button\",\n text: _setup.t(\"settings\", \"New account\")\n },\n on: {\n click: _setup.showNewUserMenu,\n keyup: [function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")) return null;\n return _setup.showNewUserMenu.apply(null, arguments);\n }, function ($event) {\n if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])) return null;\n return _setup.showNewUserMenu.apply(null, arguments);\n }]\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(_setup.NcIconSvgWrapper, {\n attrs: {\n path: _setup.mdiPlus\n }\n })];\n },\n proxy: true\n }])\n }), _vm._v(\" \"), _c(_setup.NcAppNavigationList, {\n staticClass: \"account-management__system-list\",\n attrs: {\n \"data-cy-users-settings-navigation-groups\": \"system\"\n }\n }, [_c(_setup.NcAppNavigationItem, {\n attrs: {\n id: \"everyone\",\n exact: true,\n name: _setup.t(\"settings\", \"Active accounts\"),\n to: {\n name: \"users\"\n }\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(_setup.NcIconSvgWrapper, {\n attrs: {\n path: _setup.mdiAccount\n }\n })];\n },\n proxy: true\n }, {\n key: \"counter\",\n fn: function () {\n return [_setup.userCount ? _c(_setup.NcCounterBubble, {\n attrs: {\n type: !_setup.selectedGroupDecoded ? \"highlighted\" : undefined\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_setup.userCount) + \"\\n\\t\\t\\t\\t\")]) : _vm._e()];\n },\n proxy: true\n }])\n }), _vm._v(\" \"), _setup.isAdmin ? _c(_setup.NcAppNavigationItem, {\n attrs: {\n id: \"admin\",\n exact: true,\n name: _setup.t(\"settings\", \"Admins\"),\n to: {\n name: \"group\",\n params: {\n selectedGroup: \"admin\"\n }\n }\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(_setup.NcIconSvgWrapper, {\n attrs: {\n path: _setup.mdiShieldAccount\n }\n })];\n },\n proxy: true\n }, {\n key: \"counter\",\n fn: function () {\n return [_setup.adminGroup && _setup.adminGroup.count > 0 ? _c(_setup.NcCounterBubble, {\n attrs: {\n type: _setup.selectedGroupDecoded === \"admin\" ? \"highlighted\" : undefined\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_setup.adminGroup.count) + \"\\n\\t\\t\\t\\t\")]) : _vm._e()];\n },\n proxy: true\n }], null, false, 2218088905)\n }) : _vm._e(), _vm._v(\" \"), _setup.disabledGroup && (_setup.disabledGroup.usercount > 0 || _setup.disabledGroup.usercount === -1) ? _c(_setup.NcAppNavigationItem, {\n attrs: {\n id: \"disabled\",\n exact: true,\n name: _setup.t(\"settings\", \"Disabled accounts\"),\n to: {\n name: \"group\",\n params: {\n selectedGroup: \"disabled\"\n }\n }\n },\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(_setup.NcIconSvgWrapper, {\n attrs: {\n path: _setup.mdiAccountOff\n }\n })];\n },\n proxy: true\n }, _setup.disabledGroup.usercount > 0 ? {\n key: \"counter\",\n fn: function () {\n return [_c(_setup.NcCounterBubble, {\n attrs: {\n type: _setup.selectedGroupDecoded === \"disabled\" ? \"highlighted\" : undefined\n }\n }, [_vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(_setup.disabledGroup.usercount) + \"\\n\\t\\t\\t\\t\")])];\n },\n proxy: true\n } : null], null, true)\n }) : _vm._e()], 1), _vm._v(\" \"), _c(_setup.NcAppNavigationCaption, {\n attrs: {\n name: _setup.t(\"settings\", \"Groups\"),\n disabled: _setup.loadingAddGroup,\n \"aria-label\": _setup.loadingAddGroup ? _setup.t(\"settings\", \"Creating group…\") : _setup.t(\"settings\", \"Create group\"),\n \"force-menu\": \"\",\n \"is-heading\": \"\",\n open: _setup.isAddGroupOpen\n },\n on: {\n \"update:open\": function ($event) {\n _setup.isAddGroupOpen = $event;\n }\n },\n scopedSlots: _vm._u([{\n key: \"actionsTriggerIcon\",\n fn: function () {\n return [_setup.loadingAddGroup ? _c(_setup.NcLoadingIcon) : _c(_setup.NcIconSvgWrapper, {\n attrs: {\n path: _setup.mdiPlus\n }\n })];\n },\n proxy: true\n }, {\n key: \"actions\",\n fn: function () {\n return [_c(_setup.NcActionText, {\n scopedSlots: _vm._u([{\n key: \"icon\",\n fn: function () {\n return [_c(\"AccountGroup\", {\n attrs: {\n size: 20\n }\n })];\n },\n proxy: true\n }])\n }, [_vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_setup.t(\"settings\", \"Create group\")) + \"\\n\\t\\t\\t\")]), _vm._v(\" \"), _c(_setup.NcActionInput, {\n attrs: {\n label: _setup.t(\"settings\", \"Group name\"),\n \"data-cy-users-settings-new-group-name\": \"\",\n \"label-outside\": false,\n disabled: _setup.loadingAddGroup,\n value: _setup.newGroupName,\n error: _setup.hasAddGroupError,\n \"helper-text\": _setup.hasAddGroupError ? _setup.t(\"settings\", \"Please enter a valid group name\") : \"\"\n },\n on: {\n \"update:value\": function ($event) {\n _setup.newGroupName = $event;\n },\n submit: _setup.createGroup\n }\n })];\n },\n proxy: true\n }])\n }), _vm._v(\" \"), _c(_setup.NcAppNavigationList, {\n staticClass: \"account-management__group-list\",\n attrs: {\n \"data-cy-users-settings-navigation-groups\": \"custom\"\n }\n }, _vm._l(_setup.userGroups, function (group) {\n return _c(_setup.GroupListItem, {\n key: group.id,\n attrs: {\n id: group.id,\n active: _setup.selectedGroupDecoded === group.id,\n name: group.title,\n count: group.count\n }\n });\n }), 1)], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\nexport { render, staticRenderFns };","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.modal__header[data-v-b3f9b202] {\n margin: 0;\n}\n.modal__content[data-v-b3f9b202] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n gap: 4px 0;\n}\n.modal__button-row[data-v-b3f9b202] {\n display: flex;\n width: 100%;\n justify-content: space-between;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n.empty[data-v-6cba3aca] .icon-vue {\n width: 64px;\n height: 64px;\n}\n.empty[data-v-6cba3aca] .icon-vue svg {\n max-width: 64px;\n max-height: 64px;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.modal__form[data-v-7b45e5ac] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n gap: 4px 0;\n}\n.modal__item[data-v-7b45e5ac] {\n width: 100%;\n}\n.modal__item[data-v-7b45e5ac]:not(:focus):not(:active) {\n border-color: var(--color-border-dark);\n}\n.modal__hint[data-v-7b45e5ac] {\n color: var(--color-text-maxcontrast);\n margin-top: 8px;\n align-self: flex-start;\n}\n.modal__label[data-v-7b45e5ac] {\n display: block;\n padding: 4px 0;\n}\n.modal__select[data-v-7b45e5ac] {\n width: 100%;\n}\n.modal__submit[data-v-7b45e5ac] {\n margin-top: 20px;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n.footer[data-v-97a6cb68] {\n position: relative;\n display: flex;\n min-width: 100%;\n width: fit-content;\n height: var(--row-height);\n background-color: var(--color-main-background);\n}\n.footer__cell[data-v-97a6cb68] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0 var(--cell-padding);\n min-width: var(--cell-width);\n width: var(--cell-width);\n color: var(--color-main-text);\n}\n.footer__cell strong[data-v-97a6cb68],\n.footer__cell span[data-v-97a6cb68],\n.footer__cell label[data-v-97a6cb68] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow-wrap: anywhere;\n}\n@media (min-width: 670px) {\n.footer__cell[data-v-97a6cb68] { /* Show one &--large column between stickied columns */\n}\n.footer__cell--avatar[data-v-97a6cb68], .footer__cell--displayname[data-v-97a6cb68] {\n position: sticky;\n z-index: var(--sticky-column-z-index);\n background-color: var(--color-main-background);\n}\n.footer__cell--avatar[data-v-97a6cb68] {\n left: 0;\n}\n.footer__cell--displayname[data-v-97a6cb68] {\n left: var(--avatar-cell-width);\n border-right: 1px solid var(--color-border);\n}\n}\n.footer__cell--username[data-v-97a6cb68] {\n padding-left: calc(var(--default-grid-baseline) * 3);\n}\n.footer__cell--avatar[data-v-97a6cb68] {\n min-width: var(--avatar-cell-width);\n width: var(--avatar-cell-width);\n align-items: center;\n padding: 0;\n user-select: none;\n}\n.footer__cell--multiline span[data-v-97a6cb68] {\n line-height: 1.3em;\n white-space: unset;\n}\n@supports (-webkit-line-clamp: 2) {\n.footer__cell--multiline span[data-v-97a6cb68] {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n}\n.footer__cell--large[data-v-97a6cb68] {\n min-width: var(--cell-width-large);\n width: var(--cell-width-large);\n}\n.footer__cell--obfuscated[data-v-97a6cb68] {\n min-width: 400px;\n width: 400px;\n}\n.footer__cell--fill[data-v-97a6cb68] {\n min-width: var(--cell-width-large);\n width: 100%;\n}\n.footer__cell--actions[data-v-97a6cb68] {\n position: sticky;\n right: 0;\n z-index: var(--sticky-column-z-index);\n display: flex;\n flex-direction: row;\n align-items: center;\n min-width: 110px;\n width: 110px;\n background-color: var(--color-main-background);\n border-left: 1px solid var(--color-border);\n}\n.footer__subtitle[data-v-97a6cb68] {\n color: var(--color-text-maxcontrast);\n}\n.footer__cell[data-v-97a6cb68] {\n position: sticky;\n color: var(--color-text-maxcontrast);\n}\n.footer__cell--loading[data-v-97a6cb68] {\n left: 0;\n min-width: var(--avatar-cell-width);\n width: var(--avatar-cell-width);\n align-items: center;\n padding: 0;\n}\n.footer__cell--count[data-v-97a6cb68] {\n left: var(--avatar-cell-width);\n min-width: var(--cell-width);\n width: var(--cell-width);\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n.header[data-v-55420384] {\n position: relative;\n display: flex;\n min-width: 100%;\n width: fit-content;\n height: var(--row-height);\n background-color: var(--color-main-background);\n border-bottom: 1px solid var(--color-border);\n}\n.header__cell[data-v-55420384] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0 var(--cell-padding);\n min-width: var(--cell-width);\n width: var(--cell-width);\n color: var(--color-main-text);\n}\n.header__cell strong[data-v-55420384],\n.header__cell span[data-v-55420384],\n.header__cell label[data-v-55420384] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow-wrap: anywhere;\n}\n@media (min-width: 670px) {\n.header__cell[data-v-55420384] { /* Show one &--large column between stickied columns */\n}\n.header__cell--avatar[data-v-55420384], .header__cell--displayname[data-v-55420384] {\n position: sticky;\n z-index: var(--sticky-column-z-index);\n background-color: var(--color-main-background);\n}\n.header__cell--avatar[data-v-55420384] {\n left: 0;\n}\n.header__cell--displayname[data-v-55420384] {\n left: var(--avatar-cell-width);\n border-right: 1px solid var(--color-border);\n}\n}\n.header__cell--username[data-v-55420384] {\n padding-left: calc(var(--default-grid-baseline) * 3);\n}\n.header__cell--avatar[data-v-55420384] {\n min-width: var(--avatar-cell-width);\n width: var(--avatar-cell-width);\n align-items: center;\n padding: 0;\n user-select: none;\n}\n.header__cell--multiline span[data-v-55420384] {\n line-height: 1.3em;\n white-space: unset;\n}\n@supports (-webkit-line-clamp: 2) {\n.header__cell--multiline span[data-v-55420384] {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n}\n.header__cell--large[data-v-55420384] {\n min-width: var(--cell-width-large);\n width: var(--cell-width-large);\n}\n.header__cell--obfuscated[data-v-55420384] {\n min-width: 400px;\n width: 400px;\n}\n.header__cell--fill[data-v-55420384] {\n min-width: var(--cell-width-large);\n width: 100%;\n}\n.header__cell--actions[data-v-55420384] {\n position: sticky;\n right: 0;\n z-index: var(--sticky-column-z-index);\n display: flex;\n flex-direction: row;\n align-items: center;\n min-width: 110px;\n width: 110px;\n background-color: var(--color-main-background);\n border-left: 1px solid var(--color-border);\n}\n.header__subtitle[data-v-55420384] {\n color: var(--color-text-maxcontrast);\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n.user-list__row[data-v-11563777] {\n position: relative;\n display: flex;\n min-width: 100%;\n width: fit-content;\n height: var(--row-height);\n background-color: var(--color-main-background);\n}\n.user-list__row[data-v-11563777]:hover {\n background-color: var(--color-background-hover);\n}\n.user-list__row:hover .row__cell[data-v-11563777]:not(.row__cell--actions) {\n background-color: var(--color-background-hover);\n}\n.user-list__row .select--fill[data-v-11563777] {\n max-width: calc(var(--cell-width-large) - 2 * var(--cell-padding));\n}\n.row__cell[data-v-11563777] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0 var(--cell-padding);\n min-width: var(--cell-width);\n width: var(--cell-width);\n color: var(--color-main-text);\n}\n.row__cell strong[data-v-11563777],\n.row__cell span[data-v-11563777],\n.row__cell label[data-v-11563777] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow-wrap: anywhere;\n}\n@media (min-width: 670px) {\n.row__cell[data-v-11563777] { /* Show one &--large column between stickied columns */\n}\n.row__cell--avatar[data-v-11563777], .row__cell--displayname[data-v-11563777] {\n position: sticky;\n z-index: var(--sticky-column-z-index);\n background-color: var(--color-main-background);\n}\n.row__cell--avatar[data-v-11563777] {\n left: 0;\n}\n.row__cell--displayname[data-v-11563777] {\n left: var(--avatar-cell-width);\n border-right: 1px solid var(--color-border);\n}\n}\n.row__cell--username[data-v-11563777] {\n padding-left: calc(var(--default-grid-baseline) * 3);\n}\n.row__cell--avatar[data-v-11563777] {\n min-width: var(--avatar-cell-width);\n width: var(--avatar-cell-width);\n align-items: center;\n padding: 0;\n user-select: none;\n}\n.row__cell--multiline span[data-v-11563777] {\n line-height: 1.3em;\n white-space: unset;\n}\n@supports (-webkit-line-clamp: 2) {\n.row__cell--multiline span[data-v-11563777] {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n}\n.row__cell--large[data-v-11563777] {\n min-width: var(--cell-width-large);\n width: var(--cell-width-large);\n}\n.row__cell--obfuscated[data-v-11563777] {\n min-width: 400px;\n width: 400px;\n}\n.row__cell--fill[data-v-11563777] {\n min-width: var(--cell-width-large);\n width: 100%;\n}\n.row__cell--actions[data-v-11563777] {\n position: sticky;\n right: 0;\n z-index: var(--sticky-column-z-index);\n display: flex;\n flex-direction: row;\n align-items: center;\n min-width: 110px;\n width: 110px;\n background-color: var(--color-main-background);\n border-left: 1px solid var(--color-border);\n}\n.row__subtitle[data-v-11563777] {\n color: var(--color-text-maxcontrast);\n}\n.row__cell[data-v-11563777] {\n border-bottom: 1px solid var(--color-border);\n}\n.row__cell[data-v-11563777] .v-select.select {\n min-width: var(--cell-min-width);\n}\n.row__progress[data-v-11563777] {\n margin-top: 4px;\n}\n.row__progress--warn[data-v-11563777]::-moz-progress-bar {\n background: var(--color-warning) !important;\n}\n.row__progress--warn[data-v-11563777]::-webkit-progress-value {\n background: var(--color-warning) !important;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `fieldset[data-v-3eb7c73e] {\n font-weight: bold;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.user-list[data-v-51adeab1] {\n --avatar-cell-width: 48px;\n --cell-padding: 7px;\n --cell-width: 200px;\n --cell-width-large: 300px;\n --cell-min-width: calc(var(--cell-width) - (2 * var(--cell-padding)));\n --sticky-column-z-index: calc(var(--vs-dropdown-z-index) + 1);\n display: block;\n overflow: auto;\n height: 100%;\n}\n.user-list__header[data-v-51adeab1], .user-list__footer[data-v-51adeab1] {\n position: sticky;\n display: block;\n}\n.user-list__header[data-v-51adeab1] {\n top: 0;\n z-index: calc(var(--sticky-column-z-index) + 1);\n}\n.user-list__footer[data-v-51adeab1] {\n left: 0;\n}\n.user-list__body[data-v-51adeab1] {\n display: flex;\n flex-direction: column;\n width: 100%;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-content[data-v-4821d392] {\n display: flex;\n overflow: hidden;\n flex-direction: column;\n max-height: 100%;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.account-management__system-list[data-v-b127f0aa] {\n height: auto !important;\n overflow: visible !important;\n}\n.account-management__group-list[data-v-b127f0aa] {\n height: 100% !important;\n}\n.account-management__settings-toggle[data-v-b127f0aa] {\n margin-bottom: 12px;\n}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=style&index=0&id=b3f9b202&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=style&index=0&id=b3f9b202&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.vue?vue&type=style&index=0&id=7b45e5ac&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.vue?vue&type=style&index=0&id=7b45e5ac&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=style&index=0&id=97a6cb68&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=style&index=0&id=97a6cb68&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=style&index=0&id=55420384&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=style&index=0&id=55420384&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=11563777&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=11563777&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.vue?vue&type=style&index=0&id=3eb7c73e&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.vue?vue&type=style&index=0&id=3eb7c73e&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=style&index=0&id=51adeab1&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=style&index=0&id=51adeab1&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.vue?vue&type=style&index=0&id=4821d392&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.vue?vue&type=style&index=0&id=4821d392&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=style&index=0&id=b127f0aa&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=style&index=0&id=b127f0aa&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./GroupListItem.vue?vue&type=template&id=b3f9b202&scoped=true\"\nimport script from \"./GroupListItem.vue?vue&type=script&lang=js\"\nexport * from \"./GroupListItem.vue?vue&type=script&lang=js\"\nimport style0 from \"./GroupListItem.vue?vue&type=style&index=0&id=b3f9b202&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b3f9b202\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b3f9b202')) {\n api.createRecord('b3f9b202', component.options)\n } else {\n api.reload('b3f9b202', component.options)\n }\n module.hot.accept(\"./GroupListItem.vue?vue&type=template&id=b3f9b202&scoped=true\", function () {\n api.rerender('b3f9b202', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/GroupListItem.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=6cba3aca&scoped=true\"\nimport script from \"./UserList.vue?vue&type=script&lang=js\"\nexport * from \"./UserList.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserList.vue?vue&type=style&index=0&id=6cba3aca&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6cba3aca\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6cba3aca')) {\n api.createRecord('6cba3aca', component.options)\n } else {\n api.reload('6cba3aca', component.options)\n }\n module.hot.accept(\"./UserList.vue?vue&type=template&id=6cba3aca&scoped=true\", function () {\n api.rerender('6cba3aca', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/UserList.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./NewUserModal.vue?vue&type=template&id=7b45e5ac&scoped=true\"\nimport script from \"./NewUserModal.vue?vue&type=script&lang=js\"\nexport * from \"./NewUserModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./NewUserModal.vue?vue&type=style&index=0&id=7b45e5ac&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b45e5ac\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('7b45e5ac')) {\n api.createRecord('7b45e5ac', component.options)\n } else {\n api.reload('7b45e5ac', component.options)\n }\n module.hot.accept(\"./NewUserModal.vue?vue&type=template&id=7b45e5ac&scoped=true\", function () {\n api.rerender('7b45e5ac', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/NewUserModal.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserListFooter.vue?vue&type=template&id=97a6cb68&scoped=true\"\nimport script from \"./UserListFooter.vue?vue&type=script&lang=ts\"\nexport * from \"./UserListFooter.vue?vue&type=script&lang=ts\"\nimport style0 from \"./UserListFooter.vue?vue&type=style&index=0&id=97a6cb68&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"97a6cb68\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('97a6cb68')) {\n api.createRecord('97a6cb68', component.options)\n } else {\n api.reload('97a6cb68', component.options)\n }\n module.hot.accept(\"./UserListFooter.vue?vue&type=template&id=97a6cb68&scoped=true\", function () {\n api.rerender('97a6cb68', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/UserListFooter.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserListHeader.vue?vue&type=template&id=55420384&scoped=true\"\nimport script from \"./UserListHeader.vue?vue&type=script&lang=ts\"\nexport * from \"./UserListHeader.vue?vue&type=script&lang=ts\"\nimport style0 from \"./UserListHeader.vue?vue&type=style&index=0&id=55420384&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"55420384\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('55420384')) {\n api.createRecord('55420384', component.options)\n } else {\n api.reload('55420384', component.options)\n }\n module.hot.accept(\"./UserListHeader.vue?vue&type=template&id=55420384&scoped=true\", function () {\n api.rerender('55420384', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/UserListHeader.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=11563777&scoped=true\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=11563777&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11563777\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('11563777')) {\n api.createRecord('11563777', component.options)\n } else {\n api.reload('11563777', component.options)\n }\n module.hot.accept(\"./UserRow.vue?vue&type=template&id=11563777&scoped=true\", function () {\n api.rerender('11563777', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/UserRow.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserRowActions.vue?vue&type=template&id=34f3ef36\"\nimport script from \"./UserRowActions.vue?vue&type=script&lang=ts\"\nexport * from \"./UserRowActions.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('34f3ef36')) {\n api.createRecord('34f3ef36', component.options)\n } else {\n api.reload('34f3ef36', component.options)\n }\n module.hot.accept(\"./UserRowActions.vue?vue&type=template&id=34f3ef36\", function () {\n api.rerender('34f3ef36', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/UserRowActions.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserSettingsDialog.vue?vue&type=template&id=3eb7c73e&scoped=true\"\nimport script from \"./UserSettingsDialog.vue?vue&type=script&lang=js\"\nexport * from \"./UserSettingsDialog.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserSettingsDialog.vue?vue&type=style&index=0&id=3eb7c73e&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3eb7c73e\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3eb7c73e')) {\n api.createRecord('3eb7c73e', component.options)\n } else {\n api.reload('3eb7c73e', component.options)\n }\n module.hot.accept(\"./UserSettingsDialog.vue?vue&type=template&id=3eb7c73e&scoped=true\", function () {\n api.rerender('3eb7c73e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/UserSettingsDialog.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./VirtualList.vue?vue&type=template&id=51adeab1&scoped=true\"\nimport script from \"./VirtualList.vue?vue&type=script&lang=ts\"\nexport * from \"./VirtualList.vue?vue&type=script&lang=ts\"\nimport style0 from \"./VirtualList.vue?vue&type=style&index=0&id=51adeab1&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"51adeab1\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('51adeab1')) {\n api.createRecord('51adeab1', component.options)\n } else {\n api.reload('51adeab1', component.options)\n }\n module.hot.accept(\"./VirtualList.vue?vue&type=template&id=51adeab1&scoped=true\", function () {\n api.rerender('51adeab1', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/Users/VirtualList.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserManagement.vue?vue&type=template&id=4821d392&scoped=true\"\nimport script from \"./UserManagement.vue?vue&type=script&lang=js\"\nexport * from \"./UserManagement.vue?vue&type=script&lang=js\"\nimport style0 from \"./UserManagement.vue?vue&type=style&index=0&id=4821d392&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4821d392\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('4821d392')) {\n api.createRecord('4821d392', component.options)\n } else {\n api.reload('4821d392', component.options)\n }\n module.hot.accept(\"./UserManagement.vue?vue&type=template&id=4821d392&scoped=true\", function () {\n api.rerender('4821d392', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/views/UserManagement.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./UserManagementNavigation.vue?vue&type=template&id=b127f0aa&scoped=true\"\nimport script from \"./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./UserManagementNavigation.vue?vue&type=style&index=0&id=b127f0aa&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b127f0aa\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/git/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b127f0aa')) {\n api.createRecord('b127f0aa', component.options)\n } else {\n api.reload('b127f0aa', component.options)\n }\n module.hot.accept(\"./UserManagementNavigation.vue?vue&type=template&id=b127f0aa&scoped=true\", function () {\n api.rerender('b127f0aa', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/views/UserManagementNavigation.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=script&lang=ts\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=script&lang=ts\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowActions.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowActions.vue?vue&type=script&lang=ts\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=script&lang=ts\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=script&setup=true&lang=ts\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.vue?vue&type=script&lang=js\"","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.vue?vue&type=script&lang=js\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=template&id=b3f9b202&scoped=true\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=template&id=6cba3aca&scoped=true\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.vue?vue&type=template&id=7b45e5ac&scoped=true\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=template&id=97a6cb68&scoped=true\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=template&id=55420384&scoped=true\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=template&id=11563777&scoped=true\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowActions.vue?vue&type=template&id=34f3ef36\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.vue?vue&type=template&id=3eb7c73e&scoped=true\"","export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=template&id=51adeab1&scoped=true\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.vue?vue&type=template&id=4821d392&scoped=true\"","export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=template&id=b127f0aa&scoped=true\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./GroupListItem.vue?vue&type=style&index=0&id=b3f9b202&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=6cba3aca&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewUserModal.vue?vue&type=style&index=0&id=7b45e5ac&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListFooter.vue?vue&type=style&index=0&id=97a6cb68&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserListHeader.vue?vue&type=style&index=0&id=55420384&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.vue?vue&type=style&index=0&id=11563777&lang=scss&scoped=true\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserSettingsDialog.vue?vue&type=style&index=0&id=3eb7c73e&scoped=true&lang=scss\"","export * from \"-!../../../../../node_modules/style-loader/dist/cjs.js!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualList.vue?vue&type=style&index=0&id=51adeab1&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagement.vue?vue&type=style&index=0&id=4821d392&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/style-loader/dist/cjs.js!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserManagementNavigation.vue?vue&type=style&index=0&id=b127f0aa&scoped=true&lang=scss\"","import { N as f } from \"../chunks/NcAppNavigationCaption-DI7SIPdI.mjs\";\nexport {\n f as default\n};\n","import { N as f } from \"../chunks/NcAppSettingsDialog-BLOgrVCz.mjs\";\nexport {\n f as default\n};\n","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\nimport { getCurrentInstance, effectScope, shallowReactive, onUnmounted, computed, unref } from 'vue';\n\n// dev only warn if no current instance\n\nfunction throwNoCurrentInstance (method) {\n if (!getCurrentInstance()) {\n throw new Error(\n (\"[vue-router]: Missing current instance. \" + method + \"() must be called inside <script setup> or setup().\")\n )\n }\n}\n\nfunction useRouter () {\n if (process.env.NODE_ENV !== 'production') {\n throwNoCurrentInstance('useRouter');\n }\n\n return getCurrentInstance().proxy.$root.$router\n}\n\nfunction useRoute () {\n if (process.env.NODE_ENV !== 'production') {\n throwNoCurrentInstance('useRoute');\n }\n\n var root = getCurrentInstance().proxy.$root;\n if (!root._$route) {\n var route = effectScope(true).run(function () { return shallowReactive(Object.assign({}, root.$router.currentRoute)); }\n );\n root._$route = route;\n\n root.$router.afterEach(function (to) {\n Object.assign(route, to);\n });\n }\n\n return root._$route\n}\n\nfunction onBeforeRouteUpdate (guard) {\n if (process.env.NODE_ENV !== 'production') {\n throwNoCurrentInstance('onBeforeRouteUpdate');\n }\n\n return useFilteredGuard(guard, isUpdateNavigation)\n}\nfunction isUpdateNavigation (to, from, depth) {\n var toMatched = to.matched;\n var fromMatched = from.matched;\n return (\n toMatched.length >= depth &&\n toMatched\n .slice(0, depth + 1)\n .every(function (record, i) { return record === fromMatched[i]; })\n )\n}\n\nfunction isLeaveNavigation (to, from, depth) {\n var toMatched = to.matched;\n var fromMatched = from.matched;\n return toMatched.length < depth || toMatched[depth] !== fromMatched[depth]\n}\n\nfunction onBeforeRouteLeave (guard) {\n if (process.env.NODE_ENV !== 'production') {\n throwNoCurrentInstance('onBeforeRouteLeave');\n }\n\n return useFilteredGuard(guard, isLeaveNavigation)\n}\n\nvar noop = function () {};\nfunction useFilteredGuard (guard, fn) {\n var instance = getCurrentInstance();\n var router = useRouter();\n\n var target = instance.proxy;\n // find the nearest RouterView to know the depth\n while (\n target &&\n target.$vnode &&\n target.$vnode.data &&\n target.$vnode.data.routerViewDepth == null\n ) {\n target = target.$parent;\n }\n\n var depth =\n target && target.$vnode && target.$vnode.data\n ? target.$vnode.data.routerViewDepth\n : null;\n\n if (depth != null) {\n var removeGuard = router.beforeEach(function (to, from, next) {\n return fn(to, from, depth) ? guard(to, from, next) : next()\n });\n\n onUnmounted(removeGuard);\n return removeGuard\n }\n\n return noop\n}\n\n/* */\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction includesParams (outer, inner) {\n var loop = function ( key ) {\n var innerValue = inner[key];\n var outerValue = outer[key];\n if (typeof innerValue === 'string') {\n if (innerValue !== outerValue) { return { v: false } }\n } else {\n if (\n !Array.isArray(outerValue) ||\n outerValue.length !== innerValue.length ||\n innerValue.some(function (value, i) { return value !== outerValue[i]; })\n ) {\n return { v: false }\n }\n }\n };\n\n for (var key in inner) {\n var returned = loop( key );\n\n if ( returned ) return returned.v;\n }\n\n return true\n}\n\n// helpers from vue router 4\n\nfunction isSameRouteLocationParamsValue (a, b) {\n return Array.isArray(a)\n ? isEquivalentArray(a, b)\n : Array.isArray(b)\n ? isEquivalentArray(b, a)\n : a === b\n}\n\nfunction isEquivalentArray (a, b) {\n return Array.isArray(b)\n ? a.length === b.length && a.every(function (value, i) { return value === b[i]; })\n : a.length === 1 && a[0] === b\n}\n\nfunction isSameRouteLocationParams (a, b) {\n if (Object.keys(a).length !== Object.keys(b).length) { return false }\n\n for (var key in a) {\n if (!isSameRouteLocationParamsValue(a[key], b[key])) { return false }\n }\n\n return true\n}\n\nfunction useLink (props) {\n if (process.env.NODE_ENV !== 'production') {\n throwNoCurrentInstance('useLink');\n }\n\n var router = useRouter();\n var currentRoute = useRoute();\n\n var resolvedRoute = computed(function () { return router.resolve(unref(props.to), currentRoute); });\n\n var activeRecordIndex = computed(function () {\n var route = resolvedRoute.value.route;\n var matched = route.matched;\n var length = matched.length;\n var routeMatched = matched[length - 1];\n var currentMatched = currentRoute.matched;\n if (!routeMatched || !currentMatched.length) { return -1 }\n var index = currentMatched.indexOf(routeMatched);\n if (index > -1) { return index }\n // possible parent record\n var parentRecord = currentMatched[currentMatched.length - 2];\n\n return (\n // we are dealing with nested routes\n length > 1 &&\n // if the parent and matched route have the same path, this link is\n // referring to the empty child. Or we currently are on a different\n // child of the same parent\n parentRecord && parentRecord === routeMatched.parent\n )\n });\n\n var isActive = computed(\n function () { return activeRecordIndex.value > -1 &&\n includesParams(currentRoute.params, resolvedRoute.value.route.params); }\n );\n var isExactActive = computed(\n function () { return activeRecordIndex.value > -1 &&\n activeRecordIndex.value === currentRoute.matched.length - 1 &&\n isSameRouteLocationParams(currentRoute.params, resolvedRoute.value.route.params); }\n );\n\n var navigate = function (e) {\n var href = resolvedRoute.value.route;\n if (guardEvent(e)) {\n return props.replace\n ? router.replace(href)\n : router.push(href)\n }\n return Promise.resolve()\n };\n\n return {\n href: computed(function () { return resolvedRoute.value.href; }),\n route: computed(function () { return resolvedRoute.value.route; }),\n isExactActive: isExactActive,\n isActive: isActive,\n navigate: navigate\n }\n}\n\nexport { isSameRouteLocationParams, onBeforeRouteLeave, onBeforeRouteUpdate, useLink, useRoute, useRouter };\n"],"names":[],"sourceRoot":""}
|