shield-qr-styler 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +273 -0
- package/dist/index.cjs +1364 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +155 -0
- package/dist/index.js +1334 -0
- package/dist/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.js"],"sourcesContent":["/**\n * Shield QR Styler - Custom Shaped QR Code Generator\n * ===================================================\n *\n * A framework-agnostic library for generating beautifully shaped\n * QR codes as SVG strings. Works in Node.js, browsers, and edge runtimes.\n *\n * Shape Categories:\n * none, square, rectangle, circle, oval, diamond, heart, hexagon, shield\n * Each category has 2-4 variations (e.g. shield → classic, badge, modern, emblem).\n *\n * Features:\n * - 9 shape categories with 22+ variations\n * - 7 module styles: circle, roundedSquare, diamond, dot, square, barH, barV, pond\n * - 7 color presets (or fully custom colours)\n * - 6 gradient presets\n * - Linear & radial gradient support\n * - Glow effects, inner borders\n * - Finder pattern accent colors with solid/pattern modes\n * - Center-clear area for logo overlay\n * - Decorative fill with controllable density, opacity, margins\n * - High error correction (H) for reliable scanning\n * - Extensible: register custom shapes at runtime\n *\n * Usage:\n * import { generateShapeQR } from 'shield-qr-styler';\n * const svg = await generateShapeQR('https://example.com', {\n * shapeCategory: 'circle',\n * shapeVariation: 'squircle',\n * preset: 'cyber',\n * });\n *\n * @module shield-qr-styler\n */\n\nimport QRCode from 'qrcode';\n\n// ═════════════════════════════════════════════════\n// Shape Library\n// ═════════════════════════════════════════════════\n\nexport const SHAPE_LIBRARY = {\n\n // ────────────────── NONE (bare QR) ──────────────────\n none: {\n label: 'None',\n icon: '⊞',\n description: 'Plain QR code with no shape or border',\n variations: {\n default: {\n label: 'Default',\n description: 'Raw QR code, no framing',\n viewBox: '0 0 300 300',\n width: 300, height: 300,\n path: 'M 0 0 H 300 V 300 H 0 Z',\n qrArea: { x: 8, y: 8, size: 284 },\n bare: true,\n },\n },\n },\n\n // ────────────────── SQUARE ──────────────────\n square: {\n label: 'Square',\n icon: '⬜',\n description: 'Square shapes with corner variations',\n variations: {\n sharp: {\n label: 'Sharp',\n description: 'Clean sharp edges',\n viewBox: '0 0 300 300',\n width: 300, height: 300,\n path: 'M 8 8 H 292 V 292 H 8 Z',\n qrArea: { x: 18, y: 18, size: 264 },\n },\n rounded: {\n label: 'Rounded',\n description: 'Softly rounded corners',\n viewBox: '0 0 300 300',\n width: 300, height: 300,\n path: 'M 30 8 H 270 Q 292 8 292 30 V 270 Q 292 292 270 292 H 30 Q 8 292 8 270 V 30 Q 8 8 30 8 Z',\n qrArea: { x: 18, y: 18, size: 264 },\n },\n pill: {\n label: 'Pill',\n description: 'Very rounded corners',\n viewBox: '0 0 300 300',\n width: 300, height: 300,\n path: 'M 60 8 H 240 Q 292 8 292 60 V 240 Q 292 292 240 292 H 60 Q 8 292 8 240 V 60 Q 8 8 60 8 Z',\n qrArea: { x: 24, y: 24, size: 252 },\n },\n },\n },\n\n // ────────────────── RECTANGLE ──────────────────\n rectangle: {\n label: 'Rectangle',\n icon: '▬',\n description: 'Rectangular portrait and landscape shapes',\n variations: {\n portrait: {\n label: 'Portrait',\n description: 'Tall rounded rectangle',\n viewBox: '0 0 260 360',\n width: 260, height: 360,\n path: 'M 26 8 H 234 Q 252 8 252 26 V 334 Q 252 352 234 352 H 26 Q 8 352 8 334 V 26 Q 8 8 26 8 Z',\n qrArea: { x: 14, y: 64, size: 232 },\n },\n landscape: {\n label: 'Landscape',\n description: 'Wide rounded rectangle',\n viewBox: '0 0 360 260',\n width: 360, height: 260,\n path: 'M 26 8 H 334 Q 352 8 352 26 V 234 Q 352 252 334 252 H 26 Q 8 252 8 234 V 26 Q 8 8 26 8 Z',\n qrArea: { x: 64, y: 14, size: 232 },\n },\n ticket: {\n label: 'Ticket',\n description: 'Rounded rectangle with decorative notches',\n viewBox: '0 0 260 360',\n width: 260, height: 360,\n path: [\n 'M 26 8 H 234 Q 252 8 252 26 V 148',\n 'Q 242 158 242 170 Q 242 182 252 192',\n 'V 334 Q 252 352 234 352 H 26 Q 8 352 8 334',\n 'V 192 Q 18 182 18 170 Q 18 158 8 148',\n 'V 26 Q 8 8 26 8 Z',\n ].join(' '),\n qrArea: { x: 22, y: 64, size: 216 },\n },\n },\n },\n\n // ────────────────── CIRCLE ──────────────────\n circle: {\n label: 'Circle',\n icon: '⭕',\n description: 'Circular and squircle shapes',\n variations: {\n perfect: {\n label: 'Perfect',\n description: 'True circle',\n viewBox: '0 0 300 300',\n width: 300, height: 300,\n path: 'M 150 8 A 142 142 0 0 1 292 150 A 142 142 0 0 1 150 292 A 142 142 0 0 1 8 150 A 142 142 0 0 1 150 8 Z',\n qrArea: { x: 52, y: 52, size: 196 },\n },\n squircle: {\n label: 'Squircle',\n description: 'Superellipse / iOS icon shape',\n viewBox: '0 0 300 300',\n width: 300, height: 300,\n path: 'M 150 8 C 260 8 292 40 292 150 C 292 260 260 292 150 292 C 40 292 8 260 8 150 C 8 40 40 8 150 8 Z',\n qrArea: { x: 40, y: 40, size: 220 },\n },\n },\n },\n\n // ────────────────── OVAL ──────────────────\n oval: {\n label: 'Oval',\n icon: '⬮',\n description: 'Elliptical shapes',\n variations: {\n vertical: {\n label: 'Vertical',\n description: 'Tall oval',\n viewBox: '0 0 280 360',\n width: 280, height: 360,\n path: 'M 140 8 A 132 172 0 0 1 272 180 A 132 172 0 0 1 140 352 A 132 172 0 0 1 8 180 A 132 172 0 0 1 140 8 Z',\n qrArea: { x: 38, y: 78, size: 204 },\n },\n horizontal: {\n label: 'Horizontal',\n description: 'Wide oval',\n viewBox: '0 0 360 280',\n width: 360, height: 280,\n path: 'M 180 8 A 172 132 0 0 1 352 140 A 172 132 0 0 1 180 272 A 172 132 0 0 1 8 140 A 172 132 0 0 1 180 8 Z',\n qrArea: { x: 78, y: 38, size: 204 },\n },\n },\n },\n\n // ────────────────── DIAMOND ──────────────────\n diamond: {\n label: 'Diamond',\n icon: '◆',\n description: 'Diamond / rhombus shapes',\n variations: {\n classic: {\n label: 'Classic',\n description: 'Sharp diamond',\n viewBox: '0 0 300 340',\n width: 300, height: 340,\n path: 'M 150 8 L 292 170 L 150 332 L 8 170 Z',\n qrArea: { x: 76, y: 96, size: 148 },\n },\n soft: {\n label: 'Soft',\n description: 'Rounded diamond corners',\n viewBox: '0 0 300 340',\n width: 300, height: 340,\n path: 'M 150 18 Q 224 90 282 170 Q 224 250 150 322 Q 76 250 18 170 Q 76 90 150 18 Z',\n qrArea: { x: 78, y: 98, size: 144 },\n },\n },\n },\n\n // ────────────────── HEART ──────────────────\n heart: {\n label: 'Heart',\n icon: '❤️',\n description: 'Heart shapes',\n variations: {\n classic: {\n label: 'Classic',\n description: 'Traditional heart',\n viewBox: '0 0 300 280',\n width: 300, height: 280,\n path: [\n 'M 150 268',\n 'C 75 218 8 165 8 112',\n 'C 8 55 50 18 100 18',\n 'C 130 18 150 48 150 48',\n 'C 150 48 170 18 200 18',\n 'C 250 18 292 55 292 112',\n 'C 292 165 225 218 150 268 Z',\n ].join(' '),\n qrArea: { x: 62, y: 42, size: 176 },\n },\n rounded: {\n label: 'Rounded',\n description: 'Softer, fuller heart',\n viewBox: '0 0 300 280',\n width: 300, height: 280,\n path: [\n 'M 150 258',\n 'C 68 204 14 158 14 108',\n 'C 14 52 55 18 105 18',\n 'C 135 18 150 45 150 45',\n 'C 150 45 165 18 195 18',\n 'C 245 18 286 52 286 108',\n 'C 286 158 232 204 150 258 Z',\n ].join(' '),\n qrArea: { x: 58, y: 38, size: 184 },\n },\n },\n },\n\n // ────────────────── HEXAGON ──────────────────\n hexagon: {\n label: 'Hexagon',\n icon: '⬡',\n description: 'Six-sided shapes',\n variations: {\n sharp: {\n label: 'Sharp',\n description: 'Clean hex edges',\n viewBox: '0 0 300 340',\n width: 300, height: 340,\n path: 'M 150 8 L 290 88 L 290 252 L 150 332 L 10 252 L 10 88 Z',\n qrArea: { x: 56, y: 72, size: 188 },\n },\n rounded: {\n label: 'Rounded',\n description: 'Softly rounded hex corners',\n viewBox: '0 0 300 340',\n width: 300, height: 340,\n path: [\n 'M 150 14',\n 'Q 220 14 284 90',\n 'L 284 250',\n 'Q 220 326 150 326',\n 'Q 80 326 16 250',\n 'L 16 90',\n 'Q 80 14 150 14 Z',\n ].join(' '),\n qrArea: { x: 58, y: 74, size: 184 },\n },\n },\n },\n\n // ────────────────── SHIELD ──────────────────\n shield: {\n label: 'Shield',\n icon: '🛡️',\n description: 'Protective shield shapes',\n variations: {\n classic: {\n label: 'Classic',\n description: 'Heraldic shield with pointed base',\n viewBox: '0 0 300 340',\n width: 300, height: 340,\n path: [\n 'M 150 8',\n 'C 100 8, 18 18, 8 24',\n 'L 8 170',\n 'C 8 240, 65 295, 150 332',\n 'C 235 295, 292 240, 292 170',\n 'L 292 24',\n 'C 282 18, 200 8, 150 8',\n 'Z',\n ].join(' '),\n qrArea: { x: 46, y: 36, size: 208 },\n },\n badge: {\n label: 'Badge',\n description: 'Rounded badge with soft curves',\n viewBox: '0 0 300 330',\n width: 300, height: 330,\n path: [\n 'M 150 10',\n 'C 90 10, 28 18, 18 24',\n 'Q 10 30, 10 40',\n 'L 10 185',\n 'C 10 245, 60 290, 150 322',\n 'C 240 290, 290 245, 290 185',\n 'L 290 40',\n 'Q 290 30, 282 24',\n 'C 272 18, 210 10, 150 10',\n 'Z',\n ].join(' '),\n qrArea: { x: 44, y: 42, size: 212 },\n },\n modern: {\n label: 'Modern',\n description: 'Clean with rounded bottom',\n viewBox: '0 0 300 310',\n width: 300, height: 310,\n path: [\n 'M 150 10',\n 'C 100 10, 25 18, 15 24',\n 'L 15 205',\n 'Q 15 248, 42 268',\n 'Q 80 292, 150 300',\n 'Q 220 292, 258 268',\n 'Q 285 248, 285 205',\n 'L 285 24',\n 'C 275 18, 200 10, 150 10',\n 'Z',\n ].join(' '),\n qrArea: { x: 36, y: 30, size: 228 },\n },\n emblem: {\n label: 'Emblem',\n description: 'Angular military chevron',\n viewBox: '0 0 300 350',\n width: 300, height: 350,\n path: [\n 'M 150 5',\n 'L 292 22',\n 'L 292 195',\n 'C 292 258, 234 310, 150 342',\n 'C 66 310, 8 258, 8 195',\n 'L 8 22',\n 'Z',\n ].join(' '),\n qrArea: { x: 42, y: 34, size: 216 },\n },\n },\n },\n};\n\n// ─────────────────────────────────────────────\n// Backward-compatible alias\n// ─────────────────────────────────────────────\nexport const SHIELD_PATHS = SHAPE_LIBRARY.shield.variations;\n\n// ═════════════════════════════════════════════════\n// Color Presets\n// ═════════════════════════════════════════════════\n\nexport const COLOR_PRESETS = {\n cyber: {\n label: 'Cyber', description: 'Neon cyan on navy', icon: '💠',\n background: '#0a0e27', foreground: '#00d4ff', outline: '#00d4ff',\n finderOuter: '#00ff88', finderInner: '#00d4ff', outlineWidth: 3,\n category: 'dark',\n },\n stealth: {\n label: 'Stealth', description: 'Grey on black, minimal', icon: '🌑',\n background: '#1a1a1a', foreground: '#c8c8c8', outline: '#555555',\n finderOuter: '#ffffff', finderInner: '#999999', outlineWidth: 2,\n category: 'dark',\n },\n royal: {\n label: 'Royal', description: 'Purple & gold, luxurious', icon: '👑',\n background: '#1a0a3e', foreground: '#c9a0ff', outline: '#ffd700',\n finderOuter: '#ffd700', finderInner: '#c9a0ff', outlineWidth: 3,\n category: 'dark',\n },\n military: {\n label: 'Military', description: 'Green on olive, tactical', icon: '🎖️',\n background: '#1a2e1a', foreground: '#4caf50', outline: '#66bb6a',\n finderOuter: '#a5d6a7', finderInner: '#4caf50', outlineWidth: 2.5,\n category: 'dark',\n },\n fire: {\n label: 'Fire', description: 'Red & orange, bold', icon: '🔥',\n background: '#1a0000', foreground: '#ff4444', outline: '#ff6600',\n finderOuter: '#ffaa00', finderInner: '#ff4444', outlineWidth: 3,\n category: 'dark',\n },\n ocean: {\n label: 'Ocean', description: 'Blue tones, professional', icon: '🌊',\n background: '#001a33', foreground: '#0088cc', outline: '#00aaff',\n finderOuter: '#00ddff', finderInner: '#0088cc', outlineWidth: 2.5,\n category: 'dark',\n },\n monochrome: {\n label: 'Monochrome', description: 'Classic black on white', icon: '⬛',\n background: '#ffffff', foreground: '#000000', outline: '#222222',\n finderOuter: '#000000', finderInner: '#000000', outlineWidth: 2.5,\n category: 'light',\n },\n};\n\n// ═════════════════════════════════════════════════\n// Module Styles\n// ═════════════════════════════════════════════════\n\nexport const MODULE_STYLES = {\n circle: { label: 'Circle', icon: '●', description: 'Circular dots' },\n roundedSquare: { label: 'Rounded', icon: '▢', description: 'Rounded squares' },\n diamond: { label: 'Diamond', icon: '◆', description: 'Diamond shapes' },\n square: { label: 'Square', icon: '■', description: 'Sharp squares' },\n barH: { label: 'H-Bars', icon: '≡', description: 'Horizontal flowing bars' },\n barV: { label: 'V-Bars', icon: '⫿', description: 'Vertical flowing bars' },\n pond: { label: 'Pond', icon: '⬬', description: 'Connected organic blobs' },\n};\n\n// ═════════════════════════════════════════════════\n// Finder Pattern Styles\n// ═════════════════════════════════════════════════\n\nexport const FINDER_PATTERNS = {\n pattern: { label: 'Pattern', description: 'Individual modules' },\n solid: { label: 'Solid', description: 'Solid concentric shapes' },\n};\n\nexport const FINDER_STYLES = {\n rounded: { label: 'Rounded', icon: '▢', description: 'Rounded square' },\n square: { label: 'Square', icon: '■', description: 'Sharp square' },\n circle: { label: 'Circle', icon: '●', description: 'Circle' },\n diamond: { label: 'Diamond', icon: '◆', description: 'Diamond' },\n};\n\n// ═════════════════════════════════════════════════\n// Gradient Presets\n// ═════════════════════════════════════════════════\n\nexport const GRADIENT_PRESETS = {\n none: { label: 'None', value: null },\n neonPulse: {\n label: 'Neon Pulse',\n value: { type: 'linear', colors: ['#00d4ff', '#7b2ff7'], angle: 135, stops: [0, 100] },\n },\n sunset: {\n label: 'Sunset',\n value: { type: 'linear', colors: ['#ff6b6b', '#ffd93d'], angle: 180, stops: [0, 100] },\n },\n aurora: {\n label: 'Aurora',\n value: { type: 'linear', colors: ['#00ff88', '#00d4ff', '#7b2ff7'], angle: 135, stops: [0, 50, 100] },\n },\n golden: {\n label: 'Golden',\n value: { type: 'radial', colors: ['#ffd700', '#ff8c00'], stops: [0, 100] },\n },\n ice: {\n label: 'Ice',\n value: { type: 'linear', colors: ['#e0f7ff', '#00aaff'], angle: 180, stops: [0, 100] },\n },\n};\n\n// ═════════════════════════════════════════════════\n// Default Options\n// ═════════════════════════════════════════════════\n\nexport const DEFAULT_OPTIONS = {\n // --- Shape & Layout ---\n shapeCategory: 'shield',\n shapeVariation: 'classic',\n shape: null, // DEPRECATED – old single-key format\n moduleStyle: 'circle',\n moduleScale: 0.82,\n finderScale: 1.0,\n finderPattern: 'pattern',\n finderOuterStyle: 'rounded',\n finderInnerStyle: 'rounded',\n\n // --- QR Settings ---\n errorCorrection: 'H',\n\n // --- Colors ---\n colors: {\n background: '#0a0e27',\n foreground: '#00d4ff',\n outline: '#00d4ff',\n finderOuter: null,\n finderInner: null,\n outlineWidth: 3,\n },\n\n // --- Gradient ---\n gradient: null,\n\n // --- Effects ---\n glowEffect: false,\n glowColor: null,\n glowIntensity: 8,\n\n innerBorder: false,\n innerBorderWidth: 1,\n innerBorderColor: null,\n innerBorderOffset: 8,\n\n // --- Center Clear ---\n centerClear: false,\n centerSize: 0.22,\n\n // --- Decorative Fill ---\n decorativeFill: true,\n decorativeDensity: 0.35,\n decorativeOpacity: 0.25,\n decorativeSafeMargin: 6,\n decorativeShieldInset: 8,\n decorativeScale: 0.65,\n\n // --- Preset ---\n preset: null,\n};\n\n/** Default design config for UI components */\nexport const DEFAULT_DESIGN = {\n shapeCategory: 'shield',\n shapeVariation: 'classic',\n shape: null,\n preset: 'cyber',\n moduleStyle: 'circle',\n moduleScale: 0.82,\n finderScale: 1.0,\n finderPattern: 'pattern',\n finderOuterStyle: 'rounded',\n finderInnerStyle: 'rounded',\n glowEffect: true,\n innerBorder: false,\n centerClear: false,\n centerSize: 0.22,\n decorativeFill: true,\n decorativeDensity: 0.35,\n decorativeOpacity: 0.25,\n decorativeSafeMargin: 6,\n decorativeShieldInset: 8,\n decorativeScale: 0.65,\n gradient: null,\n customColors: null,\n};\n\n// ═════════════════════════════════════════════════\n// Shape Resolution\n// ═════════════════════════════════════════════════\n\n/**\n * Resolve a design config into a concrete shape definition.\n * Handles both the new (shapeCategory + shapeVariation) and old (shape) formats.\n *\n * @param {object} design\n * @returns {{ category: string, variation: string, shape: object }}\n */\nexport function resolveShape(design) {\n if (design?.shapeCategory && SHAPE_LIBRARY[design.shapeCategory]) {\n const cat = SHAPE_LIBRARY[design.shapeCategory];\n const varKey = design.shapeVariation || Object.keys(cat.variations)[0];\n const shape = cat.variations[varKey] || Object.values(cat.variations)[0];\n return { category: design.shapeCategory, variation: varKey, shape };\n }\n\n if (design?.shape) {\n if (SHIELD_PATHS[design.shape]) {\n return { category: 'shield', variation: design.shape, shape: SHIELD_PATHS[design.shape] };\n }\n if (SHAPE_LIBRARY[design.shape]) {\n const cat = SHAPE_LIBRARY[design.shape];\n const firstKey = Object.keys(cat.variations)[0];\n return { category: design.shape, variation: firstKey, shape: cat.variations[firstKey] };\n }\n }\n\n return { category: 'shield', variation: 'classic', shape: SHIELD_PATHS.classic };\n}\n\n// ═════════════════════════════════════════════════\n// Color Resolution\n// ═════════════════════════════════════════════════\n\n/**\n * Resolve a design object into full colors.\n * @param {object} design\n * @returns {object} Color object with background, foreground, outline, etc.\n */\nexport function resolveColors(design) {\n if (design?.customColors) {\n return { ...design.customColors };\n }\n const preset = COLOR_PRESETS[design?.preset || 'cyber'];\n return preset\n ? {\n background: preset.background,\n foreground: preset.foreground,\n outline: preset.outline,\n finderOuter: preset.finderOuter,\n finderInner: preset.finderInner,\n outlineWidth: preset.outlineWidth,\n }\n : { ...COLOR_PRESETS.cyber };\n}\n\n/**\n * Build a serializable design config (for saving/sharing).\n * @param {object} design\n * @returns {object}\n */\nexport function serializeDesign(design) {\n const out = {\n shapeCategory: design.shapeCategory || 'shield',\n shapeVariation: design.shapeVariation || 'classic',\n moduleStyle: design.moduleStyle || 'circle',\n finderScale: design.finderScale ?? 1.0,\n finderPattern: design.finderPattern || 'pattern',\n finderOuterStyle: design.finderOuterStyle || 'rounded',\n finderInnerStyle: design.finderInnerStyle || 'rounded',\n glowEffect: !!design.glowEffect,\n innerBorder: !!design.innerBorder,\n centerClear: !!design.centerClear,\n decorativeFill: design.decorativeFill ?? true,\n decorativeDensity: design.decorativeDensity || 0.35,\n decorativeOpacity: design.decorativeOpacity ?? 0.25,\n decorativeSafeMargin: design.decorativeSafeMargin ?? 6,\n decorativeShieldInset: design.decorativeShieldInset ?? 8,\n decorativeScale: design.decorativeScale ?? 0.65,\n };\n\n if (design.preset && !design.customColors) {\n out.preset = design.preset;\n } else if (design.customColors) {\n out.colors = { ...design.customColors };\n }\n\n if (design.gradient) {\n out.gradient = { ...design.gradient };\n }\n\n return out;\n}\n\n// ═════════════════════════════════════════════════\n// Public API - QR Generation\n// ═════════════════════════════════════════════════\n\n/**\n * Generate a shaped QR code as an SVG string.\n *\n * @param {string} data - The data to encode (URL, text, etc.)\n * @param {object} [options] - Customization options (see DEFAULT_OPTIONS)\n * @returns {Promise<string>} Complete SVG markup\n *\n * @example\n * const svg = await generateShapeQR('https://example.com', {\n * shapeCategory: 'circle',\n * shapeVariation: 'squircle',\n * preset: 'cyber',\n * });\n *\n * @example\n * const svg = await generateShapeQR('https://example.com', {\n * shapeCategory: 'heart',\n * shapeVariation: 'classic',\n * preset: 'fire',\n * moduleStyle: 'diamond',\n * glowEffect: true,\n * });\n */\nexport async function generateShapeQR(data, options = {}) {\n const opts = mergeOptions(DEFAULT_OPTIONS, options);\n\n // Apply color preset\n if (opts.preset && COLOR_PRESETS[opts.preset]) {\n const p = COLOR_PRESETS[opts.preset];\n opts.colors = {\n ...opts.colors,\n background: p.background,\n foreground: p.foreground,\n outline: p.outline,\n finderOuter: p.finderOuter,\n finderInner: p.finderInner,\n outlineWidth: p.outlineWidth,\n };\n }\n\n // Resolve shape from the library\n const { shape: shapeDefinition } = resolveShape(opts);\n\n // Generate QR matrix\n const qrData = QRCode.create(data, { errorCorrectionLevel: opts.errorCorrection });\n const modules = qrData.modules;\n const moduleCount = modules.size;\n const moduleSize = shapeDefinition.qrArea.size / moduleCount;\n\n return buildSVG(modules, moduleCount, moduleSize, shapeDefinition, opts);\n}\n\n/** Legacy alias */\nexport const generateShieldQR = generateShapeQR;\n\n/**\n * Generate shaped QR as a UTF-8 Buffer (Node.js) or Uint8Array (browser).\n */\nexport async function generateShapeQRBuffer(data, options = {}) {\n const svg = await generateShapeQR(data, options);\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(svg, 'utf-8');\n }\n return new TextEncoder().encode(svg);\n}\n\nexport const generateShieldQRBuffer = generateShapeQRBuffer;\n\n/**\n * Generate shaped QR as a base64 data URI.\n */\nexport async function generateShapeQRDataURI(data, options = {}) {\n const svg = await generateShapeQR(data, options);\n let base64;\n if (typeof Buffer !== 'undefined') {\n base64 = Buffer.from(svg, 'utf-8').toString('base64');\n } else if (typeof btoa !== 'undefined') {\n base64 = btoa(unescape(encodeURIComponent(svg)));\n } else {\n throw new Error('No base64 encoder available');\n }\n return `data:image/svg+xml;base64,${base64}`;\n}\n\nexport const generateShieldQRDataURI = generateShapeQRDataURI;\n\n// ═════════════════════════════════════════════════\n// Library Access API\n// ═════════════════════════════════════════════════\n\n/** @returns {object} The full SHAPE_LIBRARY */\nexport function getShapeLibrary() {\n return SHAPE_LIBRARY;\n}\n\n/** @returns {string[]} Available shape category keys */\nexport function getShapeCategories() {\n return Object.keys(SHAPE_LIBRARY);\n}\n\n/** @returns {string[]} Variation keys for a given category */\nexport function getShapeVariations(category) {\n return SHAPE_LIBRARY[category] ? Object.keys(SHAPE_LIBRARY[category].variations) : [];\n}\n\n/** Legacy: returns shield variation names */\nexport function getShieldShapes() {\n return Object.keys(SHIELD_PATHS);\n}\n\n/** @returns {string[]} Color preset names */\nexport function getColorPresets() {\n return Object.keys(COLOR_PRESETS);\n}\n\n/** Get colors for a named preset */\nexport function getPresetColors(name) {\n return COLOR_PRESETS[name] ? { ...COLOR_PRESETS[name] } : null;\n}\n\n/** Legacy: get a shield variation by name */\nexport function getShieldPath(name) {\n return SHIELD_PATHS[name] ? { ...SHIELD_PATHS[name] } : null;\n}\n\n/**\n * Register a custom shape category or add variations to an existing one.\n *\n * @param {string} categoryKey\n * @param {object} categoryDef - { label, icon, description, variations: { ... } }\n * @param {boolean} [merge=true] - If true, merges variations into existing category\n *\n * @example\n * registerShape('star', {\n * label: 'Star',\n * icon: '⭐',\n * description: 'Star shapes',\n * variations: {\n * fivePoint: {\n * label: '5 Point',\n * viewBox: '0 0 300 300',\n * width: 300, height: 300,\n * path: '...',\n * qrArea: { x: 60, y: 60, size: 180 },\n * }\n * }\n * });\n */\nexport function registerShape(categoryKey, categoryDef, merge = true) {\n if (merge && SHAPE_LIBRARY[categoryKey]) {\n SHAPE_LIBRARY[categoryKey] = {\n ...SHAPE_LIBRARY[categoryKey],\n ...categoryDef,\n variations: {\n ...SHAPE_LIBRARY[categoryKey].variations,\n ...(categoryDef.variations || {}),\n },\n };\n } else {\n SHAPE_LIBRARY[categoryKey] = categoryDef;\n }\n}\n\n// ═════════════════════════════════════════════════\n// SVG Builder (internal)\n// ═════════════════════════════════════════════════\n\nfunction buildSVG(modules, moduleCount, moduleSize, shapeDefinition, opts) {\n const { width, height, viewBox, path, qrArea, bare } = shapeDefinition;\n const colors = opts.colors;\n const finderOuter = colors.finderOuter || colors.foreground;\n const finderInner = colors.finderInner || colors.foreground;\n\n const quietModules = 1.5;\n const quietPx = quietModules * moduleSize;\n const dataOriginX = qrArea.x + quietPx;\n const dataOriginY = qrArea.y + quietPx;\n const dataSize = qrArea.size - quietPx * 2;\n const cellSize = dataSize / moduleCount;\n\n const svg = [];\n\n svg.push(`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"${viewBox}\" width=\"${width}\" height=\"${height}\" role=\"img\" aria-label=\"QR Code\">`);\n\n svg.push(' <defs>');\n svg.push(` <clipPath id=\"shapeClip\"><path d=\"${path}\"/></clipPath>`);\n\n if (opts.gradient) {\n svg.push(buildGradientDef(opts.gradient, ' '));\n }\n\n if (!bare && opts.glowEffect) {\n const gc = opts.glowColor || colors.outline;\n svg.push(' <filter id=\"glow\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">');\n svg.push(` <feGaussianBlur stdDeviation=\"${opts.glowIntensity}\" result=\"blur\"/>`);\n svg.push(` <feFlood flood-color=\"${gc}\" flood-opacity=\"0.5\" result=\"color\"/>`);\n svg.push(' <feComposite in=\"color\" in2=\"blur\" operator=\"in\" result=\"shadow\"/>');\n svg.push(' <feMerge><feMergeNode in=\"shadow\"/><feMergeNode in=\"SourceGraphic\"/></feMerge>');\n svg.push(' </filter>');\n }\n\n svg.push(' </defs>');\n\n if (bare) {\n svg.push(` <rect x=\"0\" y=\"0\" width=\"${width}\" height=\"${height}\" fill=\"${colors.background}\"/>`);\n } else {\n const filterAttr = opts.glowEffect ? ' filter=\"url(#glow)\"' : '';\n svg.push(` <path d=\"${path}\" fill=\"${colors.background}\"${filterAttr}/>`);\n }\n\n const qzRx = fmt(cellSize * 1.5);\n svg.push(` <rect x=\"${fmt(qrArea.x)}\" y=\"${fmt(qrArea.y)}\" width=\"${fmt(qrArea.size)}\" height=\"${fmt(qrArea.size)}\" rx=\"${qzRx}\" ry=\"${qzRx}\" fill=\"${colors.background}\" clip-path=\"url(#shapeClip)\"/>`);\n\n svg.push(bare ? ' <g>' : ' <g clip-path=\"url(#shapeClip)\">');\n\n const finderPositions = getFinderPatternPositions(moduleCount);\n const fillColor = opts.gradient ? 'url(#qrGradient)' : colors.foreground;\n\n const qrCenterX = dataOriginX + dataSize / 2;\n const qrCenterY = dataOriginY + dataSize / 2;\n const clearRadius = opts.centerClear ? (dataSize * opts.centerSize) : 0;\n\n const isBarStyle = opts.moduleStyle === 'barH' || opts.moduleStyle === 'barV';\n const isPondStyle = opts.moduleStyle === 'pond';\n\n const isCleared = (row, col) => {\n if (!opts.centerClear) return false;\n const x = dataOriginX + col * cellSize;\n const y = dataOriginY + row * cellSize;\n const dx = (x + cellSize / 2) - qrCenterX;\n const dy = (y + cellSize / 2) - qrCenterY;\n return Math.sqrt(dx * dx + dy * dy) < clearRadius;\n };\n\n // ── Finder patterns ──\n const fScale = opts.finderScale ?? 1.0;\n const fOuterStyle = opts.finderOuterStyle || 'rounded';\n const fInnerStyle = opts.finderInnerStyle || 'rounded';\n\n if (opts.finderPattern === 'solid') {\n for (const pos of finderPositions) {\n const fpX = dataOriginX + pos.col * cellSize;\n const fpY = dataOriginY + pos.row * cellSize;\n const cxF = fpX + 3.5 * cellSize;\n const cyF = fpY + 3.5 * cellSize;\n\n const outerSz = 7 * cellSize * fScale;\n const spaceSz = 5 * cellSize * fScale;\n const innerSz = 3 * cellSize * fScale;\n\n const outerRR = outerSz * 0.15;\n const gap1 = (outerSz - spaceSz) / 2;\n const spaceRR = Math.max(outerRR - gap1, 0);\n const gap2 = (spaceSz - innerSz) / 2;\n const innerRR = Math.max(spaceRR - gap2, 0);\n\n svg.push(' ' + renderSolidFinderShape(cxF - outerSz / 2, cyF - outerSz / 2, outerSz, fOuterStyle, finderOuter, outerRR));\n svg.push(' ' + renderSolidFinderShape(cxF - spaceSz / 2, cyF - spaceSz / 2, spaceSz, fOuterStyle, colors.background, spaceRR));\n svg.push(' ' + renderSolidFinderShape(cxF - innerSz / 2, cyF - innerSz / 2, innerSz, fInnerStyle, finderInner, innerRR));\n }\n } else {\n for (let row = 0; row < moduleCount; row++) {\n for (let col = 0; col < moduleCount; col++) {\n if (!modules.get(row, col)) continue;\n const finderType = classifyFinderModule(row, col, finderPositions);\n if (!finderType || finderType === 'space') continue;\n const x = dataOriginX + col * cellSize;\n const y = dataOriginY + row * cellSize;\n let modFill = fillColor;\n if (finderType === 'outer') modFill = finderOuter;\n else if (finderType === 'inner') modFill = finderInner;\n svg.push(' ' + renderModule(x, y, cellSize, finderType === 'outer' ? fOuterStyle : fInnerStyle, fScale, modFill));\n }\n }\n }\n\n // ── Data modules ──\n if (isPondStyle) {\n const inset = cellSize * (1 - opts.moduleScale) / 2;\n const rr = Math.max(inset * 0.85, 0.3);\n const grid = [];\n for (let r = 0; r < moduleCount; r++) {\n grid[r] = [];\n for (let c = 0; c < moduleCount; c++) {\n grid[r][c] = modules.get(r, c) && !classifyFinderModule(r, c, finderPositions) && !isCleared(r, c);\n }\n }\n const gd = (r, c) => r >= 0 && r < moduleCount && c >= 0 && c < moduleCount && grid[r][c];\n const parts = [];\n for (let r = 0; r < moduleCount; r++) {\n for (let c = 0; c < moduleCount; c++) {\n if (!grid[r][c]) continue;\n const x0 = dataOriginX + c * cellSize;\n const y0 = dataOriginY + r * cellSize;\n const tD = gd(r - 1, c), rD = gd(r, c + 1), bD = gd(r + 1, c), lD = gd(r, c - 1);\n const t = tD ? y0 : y0 + inset;\n const ri = rD ? x0 + cellSize : x0 + cellSize - inset;\n const b = bD ? y0 + cellSize : y0 + cellSize - inset;\n const l = lD ? x0 : x0 + inset;\n const tlR = !tD && !lD, trR = !tD && !rD, brR = !bD && !rD, blR = !bD && !lD;\n let d = `M ${fmt(l + (tlR ? rr : 0))} ${fmt(t)}`;\n d += ` H ${fmt(ri - (trR ? rr : 0))}`;\n if (trR) d += ` Q ${fmt(ri)} ${fmt(t)} ${fmt(ri)} ${fmt(t + rr)}`;\n d += ` V ${fmt(b - (brR ? rr : 0))}`;\n if (brR) d += ` Q ${fmt(ri)} ${fmt(b)} ${fmt(ri - rr)} ${fmt(b)}`;\n d += ` H ${fmt(l + (blR ? rr : 0))}`;\n if (blR) d += ` Q ${fmt(l)} ${fmt(b)} ${fmt(l)} ${fmt(b - rr)}`;\n d += ` V ${fmt(t + (tlR ? rr : 0))}`;\n if (tlR) d += ` Q ${fmt(l)} ${fmt(t)} ${fmt(l + rr)} ${fmt(t)}`;\n d += ' Z';\n parts.push(d);\n }\n }\n if (parts.length) {\n svg.push(` <path d=\"${parts.join(' ')}\" fill=\"${fillColor}\"/>`);\n }\n } else if (isBarStyle) {\n const s = cellSize * opts.moduleScale;\n const halfGap = (cellSize - s) / 2;\n const rr = fmt(s * 0.45);\n if (opts.moduleStyle === 'barH') {\n for (let row = 0; row < moduleCount; row++) {\n let runStart = -1;\n for (let col = 0; col <= moduleCount; col++) {\n const isDark = col < moduleCount && modules.get(row, col);\n const finderType = col < moduleCount ? classifyFinderModule(row, col, finderPositions) : null;\n const shouldConnect = isDark && !finderType && !isCleared(row, col);\n if (shouldConnect) { if (runStart === -1) runStart = col; }\n else if (runStart !== -1) {\n const runLen = col - runStart;\n svg.push(` <rect x=\"${fmt(dataOriginX + runStart * cellSize + halfGap)}\" y=\"${fmt(dataOriginY + row * cellSize + halfGap)}\" width=\"${fmt(runLen * cellSize - 2 * halfGap)}\" height=\"${fmt(s)}\" rx=\"${rr}\" ry=\"${rr}\" fill=\"${fillColor}\"/>`);\n runStart = -1;\n }\n }\n }\n } else {\n for (let col = 0; col < moduleCount; col++) {\n let runStart = -1;\n for (let row = 0; row <= moduleCount; row++) {\n const isDark = row < moduleCount && modules.get(row, col);\n const finderType = row < moduleCount ? classifyFinderModule(row, col, finderPositions) : null;\n const shouldConnect = isDark && !finderType && !isCleared(row, col);\n if (shouldConnect) { if (runStart === -1) runStart = row; }\n else if (runStart !== -1) {\n const runLen = row - runStart;\n svg.push(` <rect x=\"${fmt(dataOriginX + col * cellSize + halfGap)}\" y=\"${fmt(dataOriginY + runStart * cellSize + halfGap)}\" width=\"${fmt(s)}\" height=\"${fmt(runLen * cellSize - 2 * halfGap)}\" rx=\"${rr}\" ry=\"${rr}\" fill=\"${fillColor}\"/>`);\n runStart = -1;\n }\n }\n }\n }\n } else {\n for (let row = 0; row < moduleCount; row++) {\n for (let col = 0; col < moduleCount; col++) {\n if (!modules.get(row, col)) continue;\n if (isCleared(row, col)) continue;\n const finderType = classifyFinderModule(row, col, finderPositions);\n if (finderType) continue;\n const x = dataOriginX + col * cellSize;\n const y = dataOriginY + row * cellSize;\n svg.push(' ' + renderModule(x, y, cellSize, opts.moduleStyle, opts.moduleScale, fillColor));\n }\n }\n }\n\n svg.push(' </g>');\n\n // ── Decorative fill ──\n if (!bare && opts.decorativeFill) {\n const safeMargin = opts.decorativeSafeMargin ?? 6;\n const shieldInset = opts.decorativeShieldInset ?? 8;\n const density = opts.decorativeDensity || 0.35;\n const opacity = opts.decorativeOpacity ?? 0.25;\n const decoFill = opts.gradient ? colors.foreground : fillColor;\n const decoSize = cellSize;\n const decoScale = opts.decorativeScale ?? 0.65;\n\n const exclLeft = qrArea.x - safeMargin;\n const exclTop = qrArea.y - safeMargin;\n const exclRight = qrArea.x + qrArea.size + safeMargin;\n const exclBottom = qrArea.y + qrArea.size + safeMargin;\n\n const insetSx = ((width - shieldInset * 2) / width).toFixed(4);\n const insetSy = ((height - shieldInset * 2) / height).toFixed(4);\n svg.push(` <clipPath id=\"shapeClipInset\"><path d=\"${path}\" transform=\"translate(${shieldInset},${shieldInset}) scale(${insetSx},${insetSy})\"/></clipPath>`);\n svg.push(` <g clip-path=\"url(#shapeClipInset)\" opacity=\"${opacity}\">`);\n\n const dCols = Math.ceil(width / decoSize);\n const dRows = Math.ceil(height / decoSize);\n const decoGrid = [];\n for (let dr = 0; dr < dRows; dr++) {\n decoGrid[dr] = [];\n for (let dc = 0; dc < dCols; dc++) {\n const gx = dc * decoSize;\n const gy = dr * decoSize;\n const cx = gx + decoSize / 2;\n const cy = gy + decoSize / 2;\n if (cx >= exclLeft && cx <= exclRight && cy >= exclTop && cy <= exclBottom) {\n decoGrid[dr][dc] = false;\n continue;\n }\n const hash = ((Math.imul(gx * 2654435761 | 0, gy * 2246822519 | 0)) >>> 0) / 4294967296;\n decoGrid[dr][dc] = hash <= density;\n }\n }\n\n if (opts.moduleStyle === 'pond') {\n const pInset = decoSize * (1 - decoScale) / 2;\n const pRR = Math.max(pInset * 0.85, 0.3);\n const dgd = (r, c) => r >= 0 && r < dRows && c >= 0 && c < dCols && decoGrid[r][c];\n const parts = [];\n for (let r = 0; r < dRows; r++) {\n for (let c = 0; c < dCols; c++) {\n if (!decoGrid[r][c]) continue;\n const x0 = c * decoSize, y0 = r * decoSize;\n const tD = dgd(r - 1, c), rD = dgd(r, c + 1), bD = dgd(r + 1, c), lD = dgd(r, c - 1);\n const t = tD ? y0 : y0 + pInset;\n const ri = rD ? x0 + decoSize : x0 + decoSize - pInset;\n const b = bD ? y0 + decoSize : y0 + decoSize - pInset;\n const l = lD ? x0 : x0 + pInset;\n const tlR = !tD && !lD, trR = !tD && !rD, brR = !bD && !rD, blR = !bD && !lD;\n let d = `M ${fmt(l + (tlR ? pRR : 0))} ${fmt(t)}`;\n d += ` H ${fmt(ri - (trR ? pRR : 0))}`;\n if (trR) d += ` Q ${fmt(ri)} ${fmt(t)} ${fmt(ri)} ${fmt(t + pRR)}`;\n d += ` V ${fmt(b - (brR ? pRR : 0))}`;\n if (brR) d += ` Q ${fmt(ri)} ${fmt(b)} ${fmt(ri - pRR)} ${fmt(b)}`;\n d += ` H ${fmt(l + (blR ? pRR : 0))}`;\n if (blR) d += ` Q ${fmt(l)} ${fmt(b)} ${fmt(l)} ${fmt(b - pRR)}`;\n d += ` V ${fmt(t + (tlR ? pRR : 0))}`;\n if (tlR) d += ` Q ${fmt(l)} ${fmt(t)} ${fmt(l + pRR)} ${fmt(t)}`;\n d += ' Z';\n parts.push(d);\n }\n }\n if (parts.length) svg.push(` <path d=\"${parts.join(' ')}\" fill=\"${decoFill}\"/>`);\n } else if (opts.moduleStyle === 'barH') {\n const s = decoSize * decoScale;\n const halfGap = (decoSize - s) / 2;\n const bRR = fmt(s * 0.45);\n for (let dr = 0; dr < dRows; dr++) {\n let runStart = -1;\n for (let dc = 0; dc <= dCols; dc++) {\n if (dc < dCols && decoGrid[dr][dc]) { if (runStart === -1) runStart = dc; }\n else if (runStart !== -1) {\n const len = dc - runStart;\n svg.push(` <rect x=\"${fmt(runStart * decoSize + halfGap)}\" y=\"${fmt(dr * decoSize + halfGap)}\" width=\"${fmt(len * decoSize - 2 * halfGap)}\" height=\"${fmt(s)}\" rx=\"${bRR}\" ry=\"${bRR}\" fill=\"${decoFill}\"/>`);\n runStart = -1;\n }\n }\n }\n } else if (opts.moduleStyle === 'barV') {\n const s = decoSize * decoScale;\n const halfGap = (decoSize - s) / 2;\n const bRR = fmt(s * 0.45);\n for (let dc = 0; dc < dCols; dc++) {\n let runStart = -1;\n for (let dr = 0; dr <= dRows; dr++) {\n if (dr < dRows && decoGrid[dr][dc]) { if (runStart === -1) runStart = dr; }\n else if (runStart !== -1) {\n const len = dr - runStart;\n svg.push(` <rect x=\"${fmt(dc * decoSize + halfGap)}\" y=\"${fmt(runStart * decoSize + halfGap)}\" width=\"${fmt(s)}\" height=\"${fmt(len * decoSize - 2 * halfGap)}\" rx=\"${bRR}\" ry=\"${bRR}\" fill=\"${decoFill}\"/>`);\n runStart = -1;\n }\n }\n }\n } else {\n for (let dr = 0; dr < dRows; dr++) {\n for (let dc = 0; dc < dCols; dc++) {\n if (!decoGrid[dr][dc]) continue;\n svg.push(' ' + renderModule(dc * decoSize, dr * decoSize, decoSize, opts.moduleStyle, decoScale, decoFill));\n }\n }\n }\n\n svg.push(' </g>');\n }\n\n if (!bare) {\n if (opts.innerBorder) {\n const ibColor = opts.innerBorderColor || colors.outline;\n const off = opts.innerBorderOffset;\n const sx = (width - off * 2) / width;\n const sy = (height - off * 2) / height;\n svg.push(` <path d=\"${path}\" fill=\"none\" stroke=\"${ibColor}\" stroke-width=\"${opts.innerBorderWidth}\" opacity=\"0.35\" transform=\"translate(${off},${off}) scale(${sx.toFixed(4)},${sy.toFixed(4)})\"/>`);\n }\n svg.push(` <path d=\"${path}\" fill=\"none\" stroke=\"${colors.outline}\" stroke-width=\"${colors.outlineWidth}\" stroke-linejoin=\"round\"/>`);\n }\n\n svg.push('</svg>');\n return svg.join('\\n');\n}\n\n// ═════════════════════════════════════════════════\n// Module Renderers (internal)\n// ═════════════════════════════════════════════════\n\nfunction renderSolidFinderShape(x, y, size, style, fill, cornerRadius) {\n const cx = x + size / 2;\n const cy = y + size / 2;\n const r = size / 2;\n\n switch (style) {\n case 'circle':\n case 'dot':\n return `<circle cx=\"${fmt(cx)}\" cy=\"${fmt(cy)}\" r=\"${fmt(r)}\" fill=\"${fill}\"/>`;\n case 'rounded':\n case 'roundedSquare': {\n const rr = (cornerRadius !== undefined ? Math.max(cornerRadius, 0) : size * 0.15).toFixed(2);\n return `<rect x=\"${fmt(x)}\" y=\"${fmt(y)}\" width=\"${fmt(size)}\" height=\"${fmt(size)}\" rx=\"${rr}\" ry=\"${rr}\" fill=\"${fill}\"/>`;\n }\n case 'diamond': {\n const pts = [\n `${fmt(cx)},${fmt(cy - r)}`,\n `${fmt(cx + r)},${fmt(cy)}`,\n `${fmt(cx)},${fmt(cy + r)}`,\n `${fmt(cx - r)},${fmt(cy)}`,\n ].join(' ');\n return `<polygon points=\"${pts}\" fill=\"${fill}\"/>`;\n }\n case 'square':\n default:\n return `<rect x=\"${fmt(x)}\" y=\"${fmt(y)}\" width=\"${fmt(size)}\" height=\"${fmt(size)}\" fill=\"${fill}\"/>`;\n }\n}\n\nfunction renderModule(x, y, size, style, scale, fill) {\n const s = size * scale;\n const offset = (size - s) / 2;\n const cx = x + size / 2;\n const cy = y + size / 2;\n const r = s / 2;\n\n switch (style) {\n case 'circle':\n case 'dot':\n return `<circle cx=\"${fmt(cx)}\" cy=\"${fmt(cy)}\" r=\"${fmt(r)}\" fill=\"${fill}\"/>`;\n case 'rounded':\n case 'roundedSquare': {\n const rr = (s * 0.35).toFixed(2);\n return `<rect x=\"${fmt(x + offset)}\" y=\"${fmt(y + offset)}\" width=\"${fmt(s)}\" height=\"${fmt(s)}\" rx=\"${rr}\" ry=\"${rr}\" fill=\"${fill}\"/>`;\n }\n case 'diamond': {\n const pts = [\n `${fmt(cx)},${fmt(cy - r)}`,\n `${fmt(cx + r)},${fmt(cy)}`,\n `${fmt(cx)},${fmt(cy + r)}`,\n `${fmt(cx - r)},${fmt(cy)}`,\n ].join(' ');\n return `<polygon points=\"${pts}\" fill=\"${fill}\"/>`;\n }\n case 'square':\n default:\n return `<rect x=\"${fmt(x + offset)}\" y=\"${fmt(y + offset)}\" width=\"${fmt(s)}\" height=\"${fmt(s)}\" fill=\"${fill}\"/>`;\n }\n}\n\nfunction fmt(n) {\n return Number(n.toFixed(2));\n}\n\n// ═════════════════════════════════════════════════\n// Finder Pattern Detection (internal)\n// ═════════════════════════════════════════════════\n\nfunction getFinderPatternPositions(moduleCount) {\n return [\n { row: 0, col: 0 },\n { row: 0, col: moduleCount - 7 },\n { row: moduleCount - 7, col: 0 },\n ];\n}\n\nfunction classifyFinderModule(row, col, positions) {\n for (const pos of positions) {\n if (row >= pos.row && row < pos.row + 7 && col >= pos.col && col < pos.col + 7) {\n const lr = row - pos.row;\n const lc = col - pos.col;\n if (lr === 0 || lr === 6 || lc === 0 || lc === 6) return 'outer';\n if (lr >= 2 && lr <= 4 && lc >= 2 && lc <= 4) return 'inner';\n return 'space';\n }\n }\n return null;\n}\n\n// ═════════════════════════════════════════════════\n// Gradient Builder (internal)\n// ═════════════════════════════════════════════════\n\nfunction buildGradientDef(gradient, indent = '') {\n const { type, colors, angle = 135, stops } = gradient;\n\n const stopElements = colors.map((color, i) => {\n const pct = stops ? stops[i] : Math.round((i / (colors.length - 1)) * 100);\n return `${indent} <stop offset=\"${pct}%\" stop-color=\"${color}\"/>`;\n }).join('\\n');\n\n if (type === 'radial') {\n return [\n `${indent}<radialGradient id=\"qrGradient\" cx=\"50%\" cy=\"50%\" r=\"60%\">`,\n stopElements,\n `${indent}</radialGradient>`,\n ].join('\\n');\n }\n\n const rad = ((angle - 90) * Math.PI) / 180;\n const x1 = Math.round(50 + Math.sin(rad + Math.PI) * 50);\n const y1 = Math.round(50 + Math.cos(rad + Math.PI) * 50);\n const x2 = Math.round(50 + Math.sin(rad) * 50);\n const y2 = Math.round(50 + Math.cos(rad) * 50);\n\n return [\n `${indent}<linearGradient id=\"qrGradient\" x1=\"${x1}%\" y1=\"${y1}%\" x2=\"${x2}%\" y2=\"${y2}%\">`,\n stopElements,\n `${indent}</linearGradient>`,\n ].join('\\n');\n}\n\n// ═════════════════════════════════════════════════\n// Utility (internal)\n// ═════════════════════════════════════════════════\n\nfunction mergeOptions(defaults, overrides) {\n const result = { ...defaults };\n for (const key of Object.keys(overrides)) {\n if (overrides[key] === undefined) continue;\n if (overrides[key] !== null && typeof overrides[key] === 'object' && !Array.isArray(overrides[key])) {\n result[key] = mergeOptions(defaults[key] || {}, overrides[key]);\n } else {\n result[key] = overrides[key];\n }\n }\n return result;\n}\n\n// ═════════════════════════════════════════════════\n// Default Export\n// ═════════════════════════════════════════════════\n\nexport default {\n // Generation\n generateShapeQR,\n generateShapeQRBuffer,\n generateShapeQRDataURI,\n generateShieldQR,\n generateShieldQRBuffer,\n generateShieldQRDataURI,\n // Library access\n getShapeLibrary,\n getShapeCategories,\n getShapeVariations,\n getShieldShapes,\n getColorPresets,\n getPresetColors,\n getShieldPath,\n registerShape,\n resolveShape,\n resolveColors,\n serializeDesign,\n // Constants\n SHAPE_LIBRARY,\n SHIELD_PATHS,\n COLOR_PRESETS,\n MODULE_STYLES,\n FINDER_PATTERNS,\n FINDER_STYLES,\n GRADIENT_PRESETS,\n DEFAULT_OPTIONS,\n DEFAULT_DESIGN,\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shield QR Styler - TypeScript Declarations
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export interface ShapeVariation {
|
|
6
|
+
label: string;
|
|
7
|
+
description: string;
|
|
8
|
+
viewBox: string;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
path: string;
|
|
12
|
+
qrArea: { x: number; y: number; size: number };
|
|
13
|
+
bare?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ShapeCategory {
|
|
17
|
+
label: string;
|
|
18
|
+
icon: string;
|
|
19
|
+
description: string;
|
|
20
|
+
variations: Record<string, ShapeVariation>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ColorPreset {
|
|
24
|
+
label: string;
|
|
25
|
+
description: string;
|
|
26
|
+
icon: string;
|
|
27
|
+
background: string;
|
|
28
|
+
foreground: string;
|
|
29
|
+
outline: string;
|
|
30
|
+
finderOuter: string;
|
|
31
|
+
finderInner: string;
|
|
32
|
+
outlineWidth: number;
|
|
33
|
+
category: 'dark' | 'light';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface GradientConfig {
|
|
37
|
+
type: 'linear' | 'radial';
|
|
38
|
+
colors: string[];
|
|
39
|
+
angle?: number;
|
|
40
|
+
stops?: number[];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface GradientPreset {
|
|
44
|
+
label: string;
|
|
45
|
+
value: GradientConfig | null;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface StyleInfo {
|
|
49
|
+
label: string;
|
|
50
|
+
icon: string;
|
|
51
|
+
description: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface FinderPatternInfo {
|
|
55
|
+
label: string;
|
|
56
|
+
description: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface GenerateOptions {
|
|
60
|
+
shapeCategory?: string;
|
|
61
|
+
shapeVariation?: string;
|
|
62
|
+
shape?: string | null;
|
|
63
|
+
moduleStyle?: 'circle' | 'roundedSquare' | 'diamond' | 'dot' | 'square' | 'barH' | 'barV' | 'pond';
|
|
64
|
+
moduleScale?: number;
|
|
65
|
+
finderScale?: number;
|
|
66
|
+
finderPattern?: 'pattern' | 'solid';
|
|
67
|
+
finderOuterStyle?: 'rounded' | 'square' | 'circle' | 'diamond';
|
|
68
|
+
finderInnerStyle?: 'rounded' | 'square' | 'circle' | 'diamond';
|
|
69
|
+
errorCorrection?: 'L' | 'M' | 'Q' | 'H';
|
|
70
|
+
colors?: {
|
|
71
|
+
background?: string;
|
|
72
|
+
foreground?: string;
|
|
73
|
+
outline?: string;
|
|
74
|
+
finderOuter?: string | null;
|
|
75
|
+
finderInner?: string | null;
|
|
76
|
+
outlineWidth?: number;
|
|
77
|
+
};
|
|
78
|
+
gradient?: GradientConfig | null;
|
|
79
|
+
glowEffect?: boolean;
|
|
80
|
+
glowColor?: string | null;
|
|
81
|
+
glowIntensity?: number;
|
|
82
|
+
innerBorder?: boolean;
|
|
83
|
+
innerBorderWidth?: number;
|
|
84
|
+
innerBorderColor?: string | null;
|
|
85
|
+
innerBorderOffset?: number;
|
|
86
|
+
centerClear?: boolean;
|
|
87
|
+
centerSize?: number;
|
|
88
|
+
decorativeFill?: boolean;
|
|
89
|
+
decorativeDensity?: number;
|
|
90
|
+
decorativeOpacity?: number;
|
|
91
|
+
decorativeSafeMargin?: number;
|
|
92
|
+
decorativeShieldInset?: number;
|
|
93
|
+
decorativeScale?: number;
|
|
94
|
+
preset?: string | null;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface DesignConfig extends GenerateOptions {
|
|
98
|
+
customColors?: {
|
|
99
|
+
background: string;
|
|
100
|
+
foreground: string;
|
|
101
|
+
outline: string;
|
|
102
|
+
finderOuter: string;
|
|
103
|
+
finderInner: string;
|
|
104
|
+
outlineWidth?: number;
|
|
105
|
+
} | null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface ResolvedShape {
|
|
109
|
+
category: string;
|
|
110
|
+
variation: string;
|
|
111
|
+
shape: ShapeVariation;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Constants
|
|
115
|
+
export const SHAPE_LIBRARY: Record<string, ShapeCategory>;
|
|
116
|
+
export const SHIELD_PATHS: Record<string, ShapeVariation>;
|
|
117
|
+
export const COLOR_PRESETS: Record<string, ColorPreset>;
|
|
118
|
+
export const MODULE_STYLES: Record<string, StyleInfo>;
|
|
119
|
+
export const FINDER_PATTERNS: Record<string, FinderPatternInfo>;
|
|
120
|
+
export const FINDER_STYLES: Record<string, StyleInfo>;
|
|
121
|
+
export const GRADIENT_PRESETS: Record<string, GradientPreset>;
|
|
122
|
+
export const DEFAULT_OPTIONS: GenerateOptions;
|
|
123
|
+
export const DEFAULT_DESIGN: DesignConfig;
|
|
124
|
+
|
|
125
|
+
// Generation
|
|
126
|
+
export function generateShapeQR(data: string, options?: GenerateOptions): Promise<string>;
|
|
127
|
+
export function generateShapeQRBuffer(data: string, options?: GenerateOptions): Promise<Buffer | Uint8Array>;
|
|
128
|
+
export function generateShapeQRDataURI(data: string, options?: GenerateOptions): Promise<string>;
|
|
129
|
+
|
|
130
|
+
// Legacy aliases
|
|
131
|
+
export const generateShieldQR: typeof generateShapeQR;
|
|
132
|
+
export const generateShieldQRBuffer: typeof generateShapeQRBuffer;
|
|
133
|
+
export const generateShieldQRDataURI: typeof generateShapeQRDataURI;
|
|
134
|
+
|
|
135
|
+
// Library access
|
|
136
|
+
export function getShapeLibrary(): Record<string, ShapeCategory>;
|
|
137
|
+
export function getShapeCategories(): string[];
|
|
138
|
+
export function getShapeVariations(category: string): string[];
|
|
139
|
+
export function getShieldShapes(): string[];
|
|
140
|
+
export function getColorPresets(): string[];
|
|
141
|
+
export function getPresetColors(name: string): ColorPreset | null;
|
|
142
|
+
export function getShieldPath(name: string): ShapeVariation | null;
|
|
143
|
+
export function registerShape(categoryKey: string, categoryDef: Partial<ShapeCategory>, merge?: boolean): void;
|
|
144
|
+
|
|
145
|
+
// Helpers
|
|
146
|
+
export function resolveShape(design: Partial<DesignConfig>): ResolvedShape;
|
|
147
|
+
export function resolveColors(design: Partial<DesignConfig>): {
|
|
148
|
+
background: string;
|
|
149
|
+
foreground: string;
|
|
150
|
+
outline: string;
|
|
151
|
+
finderOuter: string;
|
|
152
|
+
finderInner: string;
|
|
153
|
+
outlineWidth: number;
|
|
154
|
+
};
|
|
155
|
+
export function serializeDesign(design: DesignConfig): Record<string, any>;
|