@php
$style = \App\Support\Qr\QrStyleDefaults::merge($style ?? null);
$moduleStyles = $moduleStyles ?? \App\Support\Qr\QrModuleStyleCatalog::visible();
$cornerOuterStyles = $cornerOuterStyles ?? \App\Support\Qr\QrCornerStyleCatalog::outerStyles();
$cornerInnerStyles = $cornerInnerStyles ?? \App\Support\Qr\QrCornerStyleCatalog::innerStyles();
$frameStyles = $frameStyles ?? \App\Support\Qr\QrFrameStyleCatalog::visible();
$qrBits = [1,0,1,0,1, 0,1,1,0,0, 1,1,0,1,1, 0,0,1,0,1, 1,0,1,1,0];
@endphp
@include('qr-codes.partials.qr-customizer-script')
{{-- ── Quick style presets ──────────────────────────────────────────── --}}
@foreach([
[
'key' => 'classic',
'label' => 'Classic',
'fg' => '#000000',
'bg' => '#ffffff',
'outer' => 'square',
'inner' => 'square',
'dot' => false,
],
[
'key' => 'rounded',
'label' => 'Rounded',
'fg' => '#111827',
'bg' => '#ffffff',
'outer' => 'rounded',
'inner' => 'square',
'dot' => false,
],
[
'key' => 'branded',
'label' => 'Branded',
'fg' => '#1d4ed8',
'bg' => '#ffffff',
'outer' => 'rounded',
'inner' => 'square',
'dot' => false,
],
[
'key' => 'dots',
'label' => 'Dots',
'fg' => '#0f172a',
'bg' => '#ffffff',
'outer' => 'square',
'inner' => 'dot',
'dot' => true,
],
] as $preset)
@php
$outerRadius = match($preset['outer']) { 'rounded' => '3px', 'circle' => '50%', default => '1px' };
$innerRadius = $preset['inner'] === 'dot' ? '50%' : '1px';
$dotRadius = $preset['dot'] ? '50%' : '1px';
@endphp
{{-- Mini QR illustration --}}
{{-- Top-left finder --}}
{{-- Top-right finder --}}
{{-- Bottom-left finder --}}
{{-- Data dots (5×3 grid, avoiding finder corners) --}}
@foreach([1,0,1,0,1,0,1,1,0] as $bit)
@endforeach
{{ $preset['label'] }}
@endforeach
{{-- Pill tab nav --}}
@foreach([
['id' => 'body', 'label' => 'Body'],
['id' => 'colors', 'label' => 'Colors'],
['id' => 'eyes', 'label' => 'Eyes'],
['id' => 'logo', 'label' => 'Logo'],
['id' => 'frame', 'label' => 'Frame'],
] as $tab)
{{ $tab['label'] }}
@endforeach
{{-- ── Body ─────────────────────────────────────────────────────── --}}
{{-- ── Colors ───────────────────────────────────────────────────── --}}
Quick presets
@foreach([
['fg' => '#000000', 'bg' => '#ffffff', 'label' => 'Classic'],
['fg' => '#1d4ed8', 'bg' => '#ffffff', 'label' => 'Blue'],
['fg' => '#047857', 'bg' => '#ffffff', 'label' => 'Green'],
['fg' => '#7c3aed', 'bg' => '#ffffff', 'label' => 'Purple'],
['fg' => '#c2410c', 'bg' => '#fff7ed', 'label' => 'Orange'],
['fg' => '#be185d', 'bg' => '#fdf4ff', 'label' => 'Pink'],
['fg' => '#0f172a', 'bg' => '#ecfdf5', 'label' => 'Dark teal'],
] as $preset)
@endforeach
Gradient
@foreach([['none', 'None'], ['linear', 'Linear'], ['radial', 'Radial']] as [$val, $lbl])
{{ $lbl }}
@endforeach
{{-- ── Eyes ─────────────────────────────────────────────────────── --}}
{{-- ── Logo ─────────────────────────────────────────────────────── --}}
Center logo
Placed in the center. Error correction is raised automatically when a logo is present.
Click to upload
PNG, JPG, GIF, WebP · max 2 MB
{{-- Logo options: shown when a logo is present (uploaded or existing) --}}
{{-- Size --}}
Logo size
{{-- Padding --}}
Padding
{{-- White background toggle --}}
White background
{{-- Shape --}}
Shape
{{-- Original: landscape rectangle — logo keeps its natural aspect ratio --}}
Original
{{-- Rounded: square crop with rounded corners --}}
Rounded
{{-- Circle: square crop clipped to circle --}}
Circle
@if(!empty($showRemoveLogo))
Remove current logo
@endif
{{-- ── Frame ────────────────────────────────────────────────────── --}}
{{-- Frame colour --}}
{{-- Frame text -- only for frames that show a CTA label --}}
Label text