{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "generate-qr-code", "type": "registry:item", "description": "Generate QR codes for URLs, text, or structured data", "dependencies": [ "qrcode" ], "files": [ { "path": "steps/generate-qr-code.ts", "content": "import { FatalError } from \"workflow\"\n\ninterface GenerateQRCodeOptions {\n data: string\n size?: number\n errorCorrectionLevel?: \"L\" | \"M\" | \"Q\" | \"H\"\n margin?: number\n}\n\n/**\n * Generate QR codes for URLs, text, or structured data\n *\n * @example\n * const qrCode = await generateQRCode({\n * data: 'https://example.com',\n * size: 300,\n * errorCorrectionLevel: 'H'\n * });\n */\nexport async function generateQRCode(options: GenerateQRCodeOptions) {\n \"use step\"\n\n const { data, size = 200, errorCorrectionLevel = \"M\", margin = 4 } = options\n\n if (!data) {\n throw new FatalError(\"data is required\")\n }\n\n if (size < 100 || size > 2000) {\n throw new FatalError(\"size must be between 100 and 2000 pixels\")\n }\n\n // Dynamic import QR code library\n const QRCode = (await import(\"qrcode\")).default\n\n try {\n // Generate QR code as data URL\n const qrDataUrl = await QRCode.toDataURL(data, {\n errorCorrectionLevel,\n margin,\n width: size,\n color: {\n dark: \"#000000\",\n light: \"#FFFFFF\",\n },\n })\n\n // Also generate as buffer for storage\n const qrBuffer = await QRCode.toBuffer(data, {\n errorCorrectionLevel,\n margin,\n width: size,\n })\n\n return {\n dataUrl: qrDataUrl,\n buffer: qrBuffer,\n size,\n data,\n errorCorrectionLevel,\n }\n } catch (error) {\n throw new FatalError(`Failed to generate QR code: ${error instanceof Error ? error.message : \"Unknown error\"}`)\n }\n}\n", "type": "registry:file", "target": "steps/generate-qr-code.ts" } ] }