@e280/authlocal
Version:
User-sovereign login system for everybody
88 lines (85 loc) • 2.27 kB
JavaScript
import { html, shadowView } from "@benev/slate";
import stylesCss from "./styles.css.js";
import themeCss from "../../../theme.css.js";
import { Flasher } from "../../../utils/flasher.js";
import { Downloader } from "../../../utils/downloader.js";
const demoSeed = `
"fakely.demoly"
midsen.picmyn.widrep.baclut
somreg.sivler.havrun.tapfeb
ticpem.hanlev.topbec.lorreb
sipsyp.sarred.dassyn.barlug
pitber
`.trim();
export const SeedReveal = shadowView(use => (seed, filename) => {
use.name("seed-viewer");
use.styles([themeCss, stylesCss]);
const reveal = use.signal(false);
function toggle() {
reveal.value = !reveal.value;
}
const seedDisplay = reveal.value
? seed // show real seed
: demoSeed; // show demo text before actual reveal
const downloader = use.once(() => new Downloader(seed));
const copier = use.once(() => new class Copier extends Flasher {
async copy(text) {
try {
await navigator.clipboard.writeText(text);
await this.flash("good");
}
catch (error) {
await this.flash("bad");
}
}
});
function selectTextarea() {
use.shadow.querySelector("textarea").select();
}
return html `
<div class=secretbox>
<textarea
theme-seed
readonly
autocorrect=off
autocapitalize=off
spellcheck=false
.value="${seedDisplay}"
?disabled="${!reveal.value}"
="${selectTextarea}"
></textarea>
<div class=blanket ?x-hide="${reveal.value}">
[TOP SECRET]
</div>
</div>
<footer theme-buttons>
<button
theme-button
theme-hush
class=reveal
="${toggle}">
${reveal.value
? "Conceal"
: "Reveal"}
</button>
<button
theme-button
theme-hush
class="copy button"
theme-flashing="${copier.flashing}"
="${() => copier.copy(seed)}">
Copy
</button>
<a class="download button"
theme-button
theme-flashing="${downloader.flashing}"
href="${downloader.url}"
download="${filename}"
title="${`Download "${filename}"`}"
="${() => downloader.flash()}">
Download
</a>
</footer>
`;
});
//# sourceMappingURL=view.js.map