folk-canvas/demo/qr-code.html

96 lines
2.3 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>QR Code</title>
<style>
html {
height: 100%;
}
body {
min-height: 100%;
position: relative;
margin: 0;
}
textarea {
resize: none;
field-sizing: content;
}
event-propagator {
display: block;
position: absolute;
inset: 0 0 0 0;
pointer-events: none;
}
body:not([rope-mode]) event-propagator {
display: none;
}
body > label {
display: block;
padding: 0.5rem;
}
</style>
</head>
<body rope-mode>
<label>Rope Mode: <input type="checkbox" checked /></label>
<fc-geometry x="275" y="25">
<textarea>https://folk-canvas.github.io/folk-canvas/</textarea>
</fc-geometry>
<fc-geometry x="300" y="75">
<label>Radius: <input type="range" min="0" max="0.5" step="0.05" value="0" /></label>
</fc-geometry>
<fc-geometry x="325" y="175">
<label>Color: <input type="color" /></label>
</fc-geometry>
<fc-geometry x="50" y="50">
<sl-qr-code size="200"></sl-qr-code>
</fc-geometry>
<event-propagator
source="textarea"
target="sl-qr-code"
triggers="input"
expression="value: from.value"
></event-propagator>
<event-propagator
source="input[type='range']"
target="sl-qr-code"
triggers="input"
expression="radius: from.value"
></event-propagator>
<event-propagator
source="input[type='color']"
target="sl-qr-code"
triggers="input"
expression="fill: from.value"
></event-propagator>
<script type="module">
import 'https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/components/qr-code/qr-code.js';
import { FolkGeometry } from '../src/canvas/fc-geometry.ts';
import { EventPropagator } from '../src/arrows/event-propagator.ts';
FolkGeometry.define();
EventPropagator.define();
const ropeMode = document.querySelector('input[type="checkbox"]');
ropeMode.addEventListener('input', () => {
document.body.toggleAttribute('rope-mode');
});
</script>
</body>
</html>