aboutsummaryrefslogtreecommitdiffstats
path: root/dist/settings-users-settings-users.js.map
blob: 6285e3a28abdbd7fb6bcefe7bf477a1412328f8d (plain)
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":""}