From cfa9e85d05a325ff1e71cb7b1afb029cd7211b58 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Thu, 12 Mar 2026 19:23:21 -0400 Subject: [PATCH] feat(badges): add demo background pattern toggle in edit mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a 🎨 button to the badge debug bar (edit-mode only) that cycles through 5 SVG background patterns keyed by badge type color palette: stripes, dots, diamonds, grid, swirls. Swirl tile is 64×64 with corner-to-corner cubic bezier S-curves so edges align seamlessly when tiled. Off by default; never prints. --- .../ae_comp__badge_obj_view_v2.svelte | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view_v2.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view_v2.svelte index 9138b0d5..c60a81d8 100644 --- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view_v2.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_obj_view_v2.svelte @@ -223,6 +223,45 @@ let qr_data_url: any = $state(''); let qr_error_message = $state(''); + // --- Demo background pattern (edit mode only, for preview/demo purposes) --- + // 0 = off, 1–4 = pattern variants. Cycles on each button click. + let demo_bg_state = $state(0); + const DEMO_BG_PATTERNS = 5; + + function cycle_demo_bg() { + demo_bg_state = (demo_bg_state + 1) % (DEMO_BG_PATTERNS + 1); + } + + let demo_bg_style = $derived.by(() => { + if (demo_bg_state === 0) return ''; + // Colors keyed by badge type code — bg tint + accent + const palettes: Record = { + member: ['#dbeafe', '#3b82f6'], + staff: ['#dcfce7', '#16a34a'], + guest: ['#f3e8ff', '#9333ea'], + exhibitor: ['#ffedd5', '#ea580c'], + 'non-member': ['#fce7f3', '#db2777'], + test: ['#fef9c3', '#ca8a04'], + }; + const [bg, fg] = palettes[effective_badge_type_code?.toLowerCase() ?? ''] ?? ['#f1f5f9', '#64748b']; + // Each entry: [svg string, tile size]. Swirls use a larger tile for smoother repeats. + const patterns: [string, string][] = [ + // 1: diagonal stripes + [``, '24px 24px'], + // 2: polka dots + [``, '24px 24px'], + // 3: diamonds + [``, '24px 24px'], + // 4: grid + [``, '24px 24px'], + // 5: swirls — two crossing S-curves (yin-yang tiling) + echo curves for depth. + // Paths use corner-to-corner cubic beziers so opposite tile edges match perfectly. + [``, '64px 64px'], + ]; + const [svg, size] = patterns[(demo_bg_state - 1) % DEMO_BG_PATTERNS]; + return `background-image: url("data:image/svg+xml,${encodeURIComponent(svg)}"); background-repeat: repeat; background-size: ${size};`; + }); + $effect(() => { if (browser && $lq__event_badge_obj?.event_badge_id) { qr_error_message = ''; @@ -281,6 +320,16 @@ {$lq__event_badge_template_obj?.layout ?? '(no layout)'} | v2 + {#if $ae_loc.edit_mode} + | + + {/if}