viewPattern = (code = []) => {
const view = html`<div></div>`;
const ui = html`
<div><style>
svg.pattern-lock g.lock-lines line {
stroke-width: 1.5;
stroke: black;
opacity: 0.5;
}
svg.pattern-lock g.lock-dots circle {
stroke: transparent;
fill: black;
stroke-width: 13.5;
}
svg.pattern-lock g.lock-actives circle {
fill: black;
opacity: .2;
animation: lock-activate-dot .15s 0s ease 1;
transform-origin: center;
}
svg.pattern-lock g.lock-lines line {
stroke-width: 1.5;
stroke-linecap: round;
}
svg.pattern-lock.success g.lock-actives circle {
fill: green;
}
svg.pattern-lock.error g.lock-actives circle {
fill: red;
}
@keyframes lock-activate-dot {
0% {
transform: scale(0);
}
75% {
transform: scale(1.1);
}
100% {
transform: scale(1.0);
}
}
</style>${view}</div>`;
const controller = new PLock({});
controller.render(view);
const canvas = controller.lineCanvas;
const dots = canvas.availableDots;
let line = null;
for (const digit of code) {
if (line) {
canvas.stopTrack(line, dots[digit - 1]);
}
line = canvas.beginTrack(dots[digit - 1]);
}
return Object.assign(ui, { controller });
}