16You can try a demo at <https://pomdtr-lastloginhonoexample.web.val.run> (see @pomdtr/lastLoginHonoExample for code)
17
18
19
20## Usage
8
9<div align="center">
10<img src="https://imagedelivery.net/iHX6Ovru0O7AjmyT5yZRoA/67a1d35e-c37c-41a4-0e5a-03a9ba585d00/public" width="500px"/>
11</div>
3This is a lightweight Blob Admin interface to view and debug your Blob data.
4
5
6
7Use this button to install the val:
1const image =
2 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=";
3
4function base64ToUint8Array(base64: string): Uint8Array {
13
14export default async function(req: Request): Promise<Response> {
15 const imageData = base64ToUint8Array(image);
16 return new Response(imageData, {
17 headers: {
18 "Content-Type": "image/jpeg",
19 "Content-Length": imageData.length.toString(),
20 // "Access-Control-Allow-Origin": "null",
21 },
517 margin: 0;
518 background-color: var(--page);
519 background-image: radial-gradient(#222 1px, transparent 0px);
520 background-size: 1rem 1rem;
521 color: var(-text);
562
563canvas {
564 image-rendering: pixelated;
565 width: 100%;
566 pointer-events: none;
90 margin: [12, 12, 12, 12], // top, right, bottom, left in mm
91 filename: "resume.pdf",
92 image: { type: "jpeg", quality: 0.98 },
93 html2canvas: {
94 scale: 3,
7 margin: 0.2,
8 filename: 'resume.pdf',
9 image: { type: 'jpeg', quality: 0.98 },
10 html2canvas: { scale: 2 },
11 jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }
420 margin: 0;
421 background-color: var(--page);
422 background-image: radial-gradient(#222 1px, transparent 0px);
423 background-size: 1rem 1rem;
424 color: var(-text);
465
466canvas {
467 image-rendering: pixelated;
468 width: 100%;
469 pointer-events: none;
13 // IIIF Presentation Manifest URL
14 "manifestId": "https://collections.leventhalmap.org/search/commonwealth:9s161881v/manifest",
15 // IIIF Image URL (first image in the manifest)
16 "imageId": "https://iiif.digitalcommonwealth.org/iiif/2/commonwealth:9s1618824"
17}
18```
81 const generateBowTie = () => {
82 const svgString = new XMLSerializer().serializeToString(svgRef.current);
83 const img = new Image();
84 img.onload = () => {
85 const canvas = canvasRef.current;
86 const ctx = canvas.getContext("2d");
87 ctx.clearRect(0, 0, canvas.width, canvas.height);
88 ctx.drawImage(img, (canvas.width - size) / 2, (canvas.height - size) / 2, size, size);
89
90 const collectionCanvas = collectionCanvasRef.current;
96 collectionCtx.translate(x + smallSize / 2, y + smallSize / 2);
97 collectionCtx.rotate(rotation * Math.PI / 180);
98 collectionCtx.drawImage(img, -smallSize / 2, -smallSize / 2, smallSize, smallSize);
99 collectionCtx.restore();
100 };
101 img.src = "data:image/svg+xml;base64," + btoa(svgString);
102 const name = generateName();
103 setGeneratedBowTies([...generatedBowTies, {