( function () { var el = wp.element.createElement; var Fragment = wp.element.Fragment; var __ = wp.i18n.__; var useState = wp.element.useState; var registerBlockType = wp.blocks.registerBlockType; var InspectorControls = wp.blockEditor.InspectorControls; var useBlockProps = wp.blockEditor.useBlockProps; var RichText = wp.blockEditor.RichText; var PanelBody = wp.components.PanelBody; var PanelColorSettings = wp.blockEditor.PanelColorSettings; var ToggleControl = wp.components.ToggleControl; var RangeControl = wp.components.RangeControl; var SelectControl = wp.components.SelectControl; var TextControl = wp.components.TextControl; var _tc, _tvf; Object.defineProperty(window, '_bkbgTypoCtrlCache', { get: function () { if (!_tc) { _tc = window.bkbgTypographyControl; } return _tc; } }); Object.defineProperty(window, '_bkbgTypoVarsCache', { get: function () { if (!_tvf) { _tvf = window.bkbgTypoCssVars; } return _tvf; } }); function getTypoControl(props, attrName, label) { return window._bkbgTypoCtrlCache(props, attrName, label); } var icons = { chevron: '', plus: '', arrow: '' }; function getIconEl(type) { if (type === 'none') return null; return el('span', { className: 'bkbg-tgl-icon', 'aria-hidden': 'true', dangerouslySetInnerHTML: { __html: icons[type] || icons.chevron } }); } var iconTypeOptions = [ { label: __('Chevron', 'blockenberg'), value: 'chevron' }, { label: __('Plus / Minus', 'blockenberg'), value: 'plus' }, { label: __('Arrow', 'blockenberg'), value: 'arrow' }, { label: __('None', 'blockenberg'), value: 'none' } ]; var iconPositionOptions = [ { label: __('Right', 'blockenberg'), value: 'right' }, { label: __('Left', 'blockenberg'), value: 'left' } ]; var layoutOptions = [ { label: __('Default', 'blockenberg'), value: 'default' }, { label: __('Boxed', 'blockenberg'), value: 'boxed' }, { label: __('Minimal', 'blockenberg'), value: 'minimal' }, { label: __('Bordered Left', 'blockenberg'), value: 'bordered' } ]; var titleTagOptions = [ { label: 'H3', value: 'h3' }, { label: 'H4', value: 'h4' }, { label: 'H5', value: 'h5' }, { label: 'H6', value: 'h6' }, { label: 'p', value: 'p' }, { label: 'div', value: 'div' } ]; registerBlockType('blockenberg/toggle', { edit: function (props) { var a = props.attributes; var setAttributes = props.setAttributes; var isOpen = useState(a.defaultOpen)[0]; var wrapStyle = { '--bkbg-tgl-radius': a.borderRadius + 'px', '--bkbg-tgl-padding': a.padding + 'px', '--bkbg-tgl-speed': a.animationSpeed + 'ms', '--bkbg-tgl-title-color': a.titleColor, '--bkbg-tgl-title-bg': a.titleBg, '--bkbg-tgl-title-hover-bg': a.titleHoverBg, '--bkbg-tgl-active-title-bg': a.activeTitleBg, '--bkbg-tgl-active-title-color': a.activeTitleColor, '--bkbg-tgl-content-color': a.contentColor, '--bkbg-tgl-content-bg': a.contentBg, '--bkbg-tgl-icon-color': a.iconColor, '--bkbg-tgl-icon-active-color': a.iconActiveColor, '--bkbg-tgl-border-color': a.borderColor, '--bkbg-tgl-divider-color': a.dividerColor }; Object.assign(wrapStyle, window._bkbgTypoVarsCache(a.titleTypo, '--bktgl-tt-'), window._bkbgTypoVarsCache(a.contentTypo, '--bktgl-ct-')); var blockProps = useBlockProps({ className: 'bkbg-tgl-wrap bkbg-tgl-editor' + (isOpen ? ' is-open' : ''), style: wrapStyle, 'data-layout': a.layout, 'data-icon': a.iconType, 'data-icon-pos': a.iconPosition }); var inspector = el(InspectorControls, {}, el(PanelBody, { title: __('Toggle Settings', 'blockenberg'), initialOpen: true }, el(ToggleControl, { label: __('Open by default', 'blockenberg'), help: __('Start the toggle in expanded state on page load.', 'blockenberg'), checked: a.defaultOpen, __nextHasNoMarginBottom: true, onChange: function (v) { setAttributes({ defaultOpen: v }); } }), el(SelectControl, { label: __('Title Tag', 'blockenberg'), value: a.titleTag, options: titleTagOptions, onChange: function (v) { setAttributes({ titleTag: v }); } }) ), el(PanelBody, { title: __('Style', 'blockenberg'), initialOpen: false }, el(SelectControl, { label: __('Layout', 'blockenberg'), value: a.layout, options: layoutOptions, onChange: function (v) { setAttributes({ layout: v }); } }), el(SelectControl, { label: __('Icon Type', 'blockenberg'), value: a.iconType, options: iconTypeOptions, onChange: function (v) { setAttributes({ iconType: v }); } }), el(SelectControl, { label: __('Icon Position', 'blockenberg'), value: a.iconPosition, options: iconPositionOptions, onChange: function (v) { setAttributes({ iconPosition: v }); } }), el(RangeControl, { label: __('Border Radius (px)', 'blockenberg'), value: a.borderRadius, min: 0, max: 24, onChange: function (v) { setAttributes({ borderRadius: v }); } }), el(RangeControl, { label: __('Padding (px)', 'blockenberg'), value: a.padding, min: 8, max: 48, onChange: function (v) { setAttributes({ padding: v }); } }), el(RangeControl, { label: __('Animation Speed (ms)', 'blockenberg'), value: a.animationSpeed, min: 0, max: 800, step: 50, onChange: function (v) { setAttributes({ animationSpeed: v }); } }) ), el(PanelBody, { title: __('Typography', 'blockenberg'), initialOpen: false }, getTypoControl(props, 'titleTypo', __('Title', 'blockenberg')), getTypoControl(props, 'contentTypo', __('Content', 'blockenberg')) ), el(PanelBody, { title: __('Colors', 'blockenberg'), initialOpen: false }, el(PanelColorSettings, { title: __('Title Colors', 'blockenberg'), initialOpen: false, colorSettings: [ { value: a.titleColor, onChange: function (c) { setAttributes({ titleColor: c || '#111827' }); }, label: __('Text', 'blockenberg') }, { value: a.titleBg, onChange: function (c) { setAttributes({ titleBg: c || '#ffffff' }); }, label: __('Background', 'blockenberg') }, { value: a.titleHoverBg, onChange: function (c) { setAttributes({ titleHoverBg: c || '#f9fafb' }); }, label: __('Background (Hover)', 'blockenberg') }, { value: a.activeTitleColor, onChange: function (c) { setAttributes({ activeTitleColor: c || '#1d4ed8' }); }, label: __('Text (Open)', 'blockenberg') }, { value: a.activeTitleBg, onChange: function (c) { setAttributes({ activeTitleBg: c || '#eff6ff' }); }, label: __('Background (Open)', 'blockenberg') } ] }), el(PanelColorSettings, { title: __('Content Colors', 'blockenberg'), initialOpen: false, colorSettings: [ { value: a.contentColor, onChange: function (c) { setAttributes({ contentColor: c || '#374151' }); }, label: __('Text', 'blockenberg') }, { value: a.contentBg, onChange: function (c) { setAttributes({ contentBg: c || '#ffffff' }); }, label: __('Background', 'blockenberg') } ] }), el(PanelColorSettings, { title: __('Icon & Border Colors', 'blockenberg'), initialOpen: false, colorSettings: [ { value: a.iconColor, onChange: function (c) { setAttributes({ iconColor: c || '#6b7280' }); }, label: __('Icon', 'blockenberg') }, { value: a.iconActiveColor, onChange: function (c) { setAttributes({ iconActiveColor: c || '#2563eb' }); }, label: __('Icon (Open)', 'blockenberg') }, { value: a.borderColor, onChange: function (c) { setAttributes({ borderColor: c || '#e5e7eb' }); }, label: __('Border', 'blockenberg') }, { value: a.dividerColor, onChange: function (c) { setAttributes({ dividerColor: c || '#f3f4f6' }); }, label: __('Divider', 'blockenberg') } ] }) ) ); return el(Fragment, {}, inspector, el('div', blockProps, el('button', { className: 'bkbg-tgl-trigger', 'aria-expanded': isOpen ? 'true' : 'false' }, a.iconPosition === 'left' && getIconEl(a.iconType), el(a.titleTag, { className: 'bkbg-tgl-title' }, el(TextControl, { value: a.title, onChange: function (v) { setAttributes({ title: v }); }, placeholder: __('Toggle title...', 'blockenberg'), hideLabelFromVision: true, label: __('Toggle Title', 'blockenberg') }) ), a.iconPosition === 'right' && getIconEl(a.iconType) ), el('div', { className: 'bkbg-tgl-content', 'aria-hidden': isOpen ? 'false' : 'true' }, el('div', { className: 'bkbg-tgl-content-inner' }, el(RichText, { tagName: 'div', className: 'bkbg-tgl-body', value: a.content, onChange: function (v) { setAttributes({ content: v }); }, placeholder: __('Add toggle content here...', 'blockenberg') }) ) ) ) ); }, save: function (props) { var a = props.attributes; var RichTextContent = wp.blockEditor.RichText.Content; var wrapParts = [ '--bkbg-tgl-radius:' + a.borderRadius + 'px', '--bkbg-tgl-padding:' + a.padding + 'px', '--bkbg-tgl-speed:' + a.animationSpeed + 'ms', '--bkbg-tgl-title-color:' + a.titleColor, '--bkbg-tgl-title-bg:' + a.titleBg, '--bkbg-tgl-title-hover-bg:' + a.titleHoverBg, '--bkbg-tgl-active-title-bg:' + a.activeTitleBg, '--bkbg-tgl-active-title-color:' + a.activeTitleColor, '--bkbg-tgl-content-color:' + a.contentColor, '--bkbg-tgl-content-bg:' + a.contentBg, '--bkbg-tgl-icon-color:' + a.iconColor, '--bkbg-tgl-icon-active-color:' + a.iconActiveColor, '--bkbg-tgl-border-color:' + a.borderColor, '--bkbg-tgl-divider-color:' + a.dividerColor ]; var tv = Object.assign({}, window._bkbgTypoVarsCache(a.titleTypo, '--bktgl-tt-'), window._bkbgTypoVarsCache(a.contentTypo, '--bktgl-ct-')); Object.keys(tv).forEach(function (k) { wrapParts.push(k + ':' + tv[k]); }); var wrapStyle = wrapParts.join(';'); var iconSvgs = { chevron: '', plus: '', arrow: '' }; var iconEl = a.iconType !== 'none' ? el('span', { className: 'bkbg-tgl-icon', 'aria-hidden': 'true', dangerouslySetInnerHTML: { __html: iconSvgs[a.iconType] || iconSvgs.chevron } }) : null; var blockProps = wp.blockEditor.useBlockProps.save({ className: 'bkbg-tgl-wrap' + (a.defaultOpen ? ' is-open' : ''), style: wrapStyle, 'data-layout': a.layout, 'data-icon': a.iconType, 'data-icon-pos': a.iconPosition, 'data-default-open': a.defaultOpen ? '1' : '0', 'data-speed': a.animationSpeed }); return el('div', blockProps, el('button', { className: 'bkbg-tgl-trigger', 'aria-expanded': a.defaultOpen ? 'true' : 'false' }, a.iconPosition === 'left' && iconEl, el(a.titleTag, { className: 'bkbg-tgl-title' }, a.title), a.iconPosition === 'right' && iconEl ), el('div', { className: 'bkbg-tgl-content', 'aria-hidden': a.defaultOpen ? 'false' : 'true' }, el('div', { className: 'bkbg-tgl-content-inner' }, el(RichTextContent, { tagName: 'div', className: 'bkbg-tgl-body', value: a.content }) ) ) ); } }); }() );