!'0O1lI'.includes(c)).join('');
if (!pool) { this.values = []; return; }
const n = Math.max(1, Math.min(50, this.count));
const results = [];
for (let p = 0; p < n; p++) {
const arr = new Uint32Array(this.length);
crypto.getRandomValues(arr);
let out = '';
for (let i = 0; i < this.length; i++) out += pool[arr[i] % pool.length];
results.push(out);
}
this.values = results;
this.copiedIndex = -1;
},
get strength() {
let pool = 0;
if (this.upper) pool += 26; if (this.lower) pool += 26;
if (this.digits) pool += 10; if (this.symbols) pool += 18;
if (!pool) return 0;
return Math.round(this.length * Math.log2(pool));
},
get strengthPct() { return Math.min(100, Math.round(this.strength / 128 * 100)); },
get strengthLabel() { const s = this.strength; return s < 40 ? this.i18n.weak : s < 70 ? this.i18n.fair : s < 100 ? this.i18n.good : this.i18n.strong; },
get strengthClass() { const s = this.strength; return s < 40 ? 'progress-error' : s < 70 ? 'progress-warning' : s < 100 ? 'progress-info' : 'progress-success'; },
copy(idx) {
navigator.clipboard.writeText(this.values[idx]);
this.copiedIndex = idx;
setTimeout(() => this.copiedIndex = -1, 1500);
},
copyAll() {
navigator.clipboard.writeText(this.values.join('\n'));
this.copiedIndex = -2;
setTimeout(() => this.copiedIndex = -1, 1500);
}
}" x-init="generate()">
Passwort-Generator
Stärke
Entropie ca. ~ Bit