: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
wolfram: "Wolfram language",
'xml-doc': "XML doc (.net)",
xojo: "Xojo (REALbasic)",
label: data.options.theme,
label: data.options.code,
codeeditor: self.getStyleVal('lng') || 'javascript',
control: {event: 'change'}
fr = self.create(options),
lng = fr.querySelector('#lng'),
code = fr.querySelector('#code');
lng.tfOn('change', e => {
const mirror = code.tf_mirror;
api.Helper.codeMirror(code, e.currentTarget.value).then(obj => {
obj?.editor.on('change', () => {
Themify.triggerEvent(obj.el, 'change');
if (themifyBuilder.imgphp) {
const sizes = self.getOptions('image_size');
label: data.label || 'imgs',
wrap_class: data.wrap_class,
label: self.type.includes('product') ? 'productf' : 'postf',
wrap_class: 'tb_group_element_all tb_group_element_category',
'sort' /* WooCommerce Catalog Ordering */
wrap_class: 'ajax_filter_wrap tf_w',
hide: 'ajax_filter_cat_wrap'
show: 'ajax_filter_cat_wrap'
wrap_class: 'ajax_filter_cat_wrap tf_w',
id: 'ajax_filter_categories',
hide: 'ajax_filter_exclude',
show: 'ajax_filter_include'
hide: 'ajax_filter_include',
show: 'ajax_filter_exclude'
id: 'ajax_filter_exclude',
id: 'ajax_filter_include',
return self.radio.update(id, v, self);
const url=Themify.builder_url + 'css/editor/img/alignment.svg#';
icon:'<svg class="tb_align"><use href="'+url + 'vertical"/></svg>'
icon:'<svg class="tb_align"><use href="'+url + 'horizontal"/></svg>'
return self.icon_radio.render(data,self);
return self.slider_range.update(id, v, self);
const units = data.units || {
if(!data.units && prop !== 'row-gap'){
const clone={...data,...{
unit:self.getStyleVal(data.id+'_unit') || (units['%']!==undefined?'%':'px'),
data.label??=(prop === 'column-gap' ? 'ng' : (prop === 'row-gap' ? 'rg' : 'gap'));
return self.slider_range.render(clone,self);
update(id, v, self,prevbreakpoint){
newVals=api.Forms.parseSettings(el).v,
el.replaceWith(this.render(self._stylesData[id],self));
tmp[prevbreakpoint+'_'+k]=newVals[k];
self.values[id] = {...self.values[id],...tmp};
const vals=ThemifyConstructor.values[this.id];
return vals?{...vals}:null;
const self=ThemifyConstructor,
selectedGrid=el?.shadowRoot.querySelector('.grid_list .selected').dataset.grid,
size=vals[api.activeBreakPoint+'_size']?.toString();
self.values[id]={...vals};
if(size!==selectedGrid && el){
el.replaceWith(this.render(self._stylesData[id],self));
root=createElement('',{id:id,class:'tf_w tb_lb_option tb_grid_root'}),
tmp=createElement('',{id:'grid',class:'tb_field'}),
row=doc.tfId('tmpl-builder_row_action').content,
formStyle=row.querySelector('#module_form_fields_style').cloneNode(true),
gridStyle=row.querySelector('#module_row_grids_style').cloneNode(true),
gridCss=doc.tfId('module_lightbox_grid_style').cloneNode(true),
fr=createDocumentFragment();
sel=self.type==='subrow'?'module_subrow':self.type + '_inner',
inner=api.activeModel.el.tfClass(sel)[0];
computed=getComputedStyle(inner),
cols = computed.getPropertyValue('--col').replace(/\s\s+/g, ' ').trim();
if (!cols || cols==='none' || cols.includes('repeat')) {
const areaLength=computed.getPropertyValue('--area').replace(/[\r\n]/gm, '').replace(/ +/g, ' ').trim().split('" "')[0].trim().split(' ').length;
cols = ('1fr '.repeat(areaLength)).trim();
if(self._stylesData[id]===undefined){
self.values[id]={...api.activeModel.get('sizes')};
self._stylesData[id] = api.Helper.cloneObject(data);
gridCss.removeAttribute('type');
api.activeModel.gridMenu(tmp);
let item=tmp.querySelector('.'+sel),
let cl=sel==='right'?'gutter':sel;
wrap.className=cl+'_wrap';
wrap.className+=' alignment_wrap';
wrap.append(createElement('','tb_label',i18n[fields[sel]]),item);
for(let i=0;i<cols.length;++i){
let sl= self.slider_range.render({
label.className='tb_label';
label.textContent='Column '+(i+1);
col= api.Utils.getColumns(inner)[i].querySelector(':scope>.tb_drag_right');
obj=new api.columnResize();
}).append(api.ToolBar.getBaseCss(),formStyle,gridStyle,gridCss,tmp);
data.default=api.activeModel.id+new Date().getUTCMilliseconds()+ Math.random().toString(36).substr(2);
return self.hidden.render(data,self);
})(tb_app,_CLICK_,body,topBody,topBodyCl,topThemify,topWindowDoc);