# blockenberg/2.0.7/blocks/value-proposition/frontend.js

Blockenberg — 600+ Advanced Gutenberg Blocks &amp; AI Agent for WordPress Block Editor, version 2.0.7. 216 lines.

- Page: https://pluginprobe.com/plugins/blockenberg/2.0.7/code/blocks/value-proposition/frontend.js
- Raw: https://pluginprobe.com/plugins/blockenberg/2.0.7/raw/blocks/value-proposition/frontend.js
- Modified: 2026-03-06T12:32:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/blockenberg/2.0.7/code/blocks/value-proposition/frontend.js#L10-L20`.

```javascript
(function () {
    'use strict';

    function mk(tag, cls, styles) {
        var d = document.createElement(tag);
        if (cls) d.className = cls;
        if (styles) Object.keys(styles).forEach(function (k) { d.style[k] = styles[k]; });
        return d;
    }
    function mkText(tag, cls, text, styles) {
        var d = mk(tag, cls, styles);
        d.textContent = text;
        return d;
    }
    function mkA(cls, href, styles) {
        var a = mk('a', cls, styles);
        a.href = href || '#';
        return a;
    }

    function init() {
        document.querySelectorAll('.bkbg-value-proposition-app').forEach(function (appEl) {
            if (appEl.dataset.rendered) return;
            appEl.dataset.rendered = '1';

            var opts; try { opts = JSON.parse(appEl.dataset.opts || '{}'); } catch (e) { opts = {}; }

            var o = {
                eyebrow:          opts.eyebrow          || '',
                showEyebrow:      opts.showEyebrow       !== false,
                headline:         opts.headline          || '',
                subheadline:      opts.subheadline       || '',
                showSubheadline:  opts.showSubheadline   !== false,
                benefits:         opts.benefits          || [],
                badges:           opts.badges            || [],
                showBadges:       opts.showBadges        !== false,
                ctaText:          opts.ctaText           || 'Get Started',
                ctaUrl:           opts.ctaUrl            || '#',
                ctaSecondaryText: opts.ctaSecondaryText  || '',
                ctaSecondaryUrl:  opts.ctaSecondaryUrl   || '#',
                showCta:          opts.showCta           !== false,
                showSecondaryCta: opts.showSecondaryCta  !== false,
                layout:           opts.layout            || 'center',
                benefitColumns:   opts.benefitColumns    || 2,
                style:            opts.style             || 'clean',
                borderRadius:     opts.borderRadius      !== undefined ? opts.borderRadius : 12,
                gap:              opts.gap               !== undefined ? opts.gap : 20,
                paddingV:         opts.paddingV          !== undefined ? opts.paddingV : 64,
                paddingH:         opts.paddingH          !== undefined ? opts.paddingH : 32,
                headlineFontSize: opts.headlineFontSize  !== undefined ? opts.headlineFontSize : 40,
                subFontSize:      opts.subFontSize       !== undefined ? opts.subFontSize : 18,
                benefitTitleSize: opts.benefitTitleSize  !== undefined ? opts.benefitTitleSize : 16,
                benefitTextSize:  opts.benefitTextSize   !== undefined ? opts.benefitTextSize : 14,
                bgColor:          opts.bgColor           || '#f8fafc',
                accentColor:      opts.accentColor       || '#6366f1',
                headlineColor:    opts.headlineColor     || '#0f172a',
                subColor:         opts.subColor          || '#475569',
                eyebrowColor:     opts.eyebrowColor      || '#6366f1',
                benefitBg:        opts.benefitBg         || '#ffffff',
                benefitBorderColor:opts.benefitBorderColor || '#e2e8f0',
                benefitTitleColor:opts.benefitTitleColor || '#1e293b',
                benefitTextColor: opts.benefitTextColor  || '#64748b',
                iconBg:           opts.iconBg            || '#ede9fe',
                badgeBg:          opts.badgeBg           || '#ffffff',
                badgeColor:       opts.badgeColor        || '#475569',
                ctaBg:            opts.ctaBg             || '#6366f1',
                ctaColor:         opts.ctaColor          || '#ffffff',
                ctaSecondaryColor:opts.ctaSecondaryColor || '#6366f1'
            };

            var textAlign   = o.layout === 'center' ? 'center' : 'left';
            var justifyContent = o.layout === 'center' ? 'center' : 'flex-start';
            var marginAuto  = o.layout === 'center' ? 'auto' : '0';
            var colTemplate = o.benefitColumns === 1 ? '1fr'
                            : o.benefitColumns === 3 ? '1fr 1fr 1fr'
                            : '1fr 1fr';

            /* ── Outer block ─────────────────────────────────── */
            var block = mk('div', 'bkbg-vp-block', {
                background: o.bgColor,
                padding: o.paddingV + 'px ' + o.paddingH + 'px',
                textAlign: textAlign,
                boxSizing: 'border-box'
            });

            /* ── Eyebrow ─────────────────────────────────────── */
            if (o.showEyebrow && o.eyebrow) {
                var eyebrow = mkText('div', 'bkbg-vp-eyebrow', o.eyebrow, {
                    background: o.accentColor + '18',
                    color: o.eyebrowColor
                });
                block.appendChild(eyebrow);
            }

            /* ── Headline ────────────────────────────────────── */
            if (o.headline) {
                var headline = mkText('h2', 'bkbg-vp-headline', o.headline, {
                    color: o.headlineColor,
                    maxWidth: '760px',
                    marginLeft: marginAuto,
                    marginRight: marginAuto
                });
                block.appendChild(headline);
            }

            /* ── Subheadline ─────────────────────────────────── */
            if (o.showSubheadline && o.subheadline) {
                var sub = mkText('p', 'bkbg-vp-sub', o.subheadline, {
                    color: o.subColor,
                    maxWidth: '620px',
                    marginLeft: marginAuto,
                    marginRight: marginAuto
                });
                block.appendChild(sub);
            }

            /* ── CTA buttons ─────────────────────────────────── */
            if (o.showCta || o.showSecondaryCta) {
                var ctas = mk('div', 'bkbg-vp-ctas', { justifyContent: justifyContent });

                if (o.showCta && o.ctaText) {
                    var ctaA = mkA('bkbg-vp-cta-primary', o.ctaUrl, {
                        background: o.ctaBg,
                        color: o.ctaColor,
                        borderRadius: o.borderRadius + 'px'
                    });
                    ctaA.textContent = o.ctaText;
                    ctas.appendChild(ctaA);
                }

                if (o.showSecondaryCta && o.ctaSecondaryText) {
                    var ctaB = mkA('bkbg-vp-cta-secondary', o.ctaSecondaryUrl, { color: o.ctaSecondaryColor });
                    ctaB.textContent = o.ctaSecondaryText;
                    ctas.appendChild(ctaB);
                }

                block.appendChild(ctas);
            }

            /* ── Benefits grid ───────────────────────────────── */
            if (o.benefits.length) {
                var grid = mk('div', 'bkbg-vp-benefits', {
                    gridTemplateColumns: colTemplate,
                    gap: o.gap + 'px'
                });

                o.benefits.forEach(function (ben) {
                    var card = mk('div', 'bkbg-vp-benefit', {
                        background: o.benefitBg,
                        borderRadius: o.borderRadius + 'px'
                    });

                    if (o.style === 'card') {
                        card.style.boxShadow = '0 2px 12px rgba(0,0,0,0.07)';
                        card.style.border = '1px solid ' + o.benefitBorderColor;
                    } else if (o.style === 'bordered') {
                        card.style.border = '1px solid ' + o.benefitBorderColor;
                    }

                    if (ben.icon) {
                        var iconWrap = mkText('div', 'bkbg-vp-benefit-icon', ben.icon, { background: o.iconBg });
                        card.appendChild(iconWrap);
                    }

                    var title = mkText('div', 'bkbg-vp-benefit-title', ben.title || '', {
                        color: o.benefitTitleColor
                    });
                    card.appendChild(title);

                    if (ben.description) {
                        var desc = mkText('div', 'bkbg-vp-benefit-text', ben.description, {
                            color: o.benefitTextColor
                        });
                        card.appendChild(desc);
                    }

                    grid.appendChild(card);
                });

                block.appendChild(grid);
            }

            /* ── Badges ──────────────────────────────────────── */
            if (o.showBadges && o.badges.length) {
                var badgesRow = mk('div', 'bkbg-vp-badges', { justifyContent: justifyContent });

                o.badges.forEach(function (badge) {
                    var b = mk('div', 'bkbg-vp-badge', {
                        background: o.badgeBg,
                        color: o.badgeColor,
                        borderColor: o.benefitBorderColor
                    });
                    if (badge.icon) {
                        var bIcon = document.createElement('span');
                        bIcon.textContent = badge.icon;
                        b.appendChild(bIcon);
                    }
                    var bText = document.createElement('span');
                    bText.textContent = badge.text || '';
                    b.appendChild(bText);
                    badgesRow.appendChild(b);
                });

                block.appendChild(badgesRow);
            }

            /* ── Insert ──────────────────────────────────────── */
            appEl.parentNode.insertBefore(block, appEl);
            appEl.style.display = 'none';
        });
    }

    if (document.readyState !== 'loading') { init(); }
    else { document.addEventListener('DOMContentLoaded', init); }
})();

```
