(function(){
var DEBUG = true;
function log(){ if(DEBUG) console.log.apply(console, ["[CALC]"].concat([].slice.call(arguments))); }
function warn(){ console.warn.apply(console, ["[CALC]"].concat([].slice.call(arguments))); }
function err(){ console.error.apply(console, ["[CALC]"].concat([].slice.call(arguments))); }
var providers={"QueryParams":{render:e=>{let{item:n,state:t}=e;if("QueryParams"!==n.type)return null;try{var l,r;if(!(null==window?void 0:null===(l=window.location)||void 0===l?void 0:l.href)||!(null==window?void 0:null===(r=window.history)||void 0===r?void 0:r.replaceState))return null;let e=new URL(window.location.href),a=!1;(n.data||[]).forEach(n=>{var l;let r=String(null!==(l=null==n?void 0:n[0])&&void 0!==l?l:"").trim();if(!r)return;let s=null==n?void 0:n[1],i="";i="string"==typeof s&&Object.prototype.hasOwnProperty.call(t||{},s)?t[s]:s,i=null==i?"":String(i),e.searchParams.get(r)!==i&&(e.searchParams.set(r,i),a=!0)}),a&&window.history.replaceState(null,"",e.toString())}catch(e){console.log("[CALC] QueryParams error",e)}return null}},"Header":{render:e=>{let{item:n,h:t}=e;if("Header"!==n.type)return null;let l={};return n.bgColor&&(l.background=n.bgColor,l.padding=".5rem .6rem",l.borderRadius=".6rem"),n.textColor&&(l.color=n.textColor),t("div",{class:"header",style:l},n.text||"")}},"SaveResult":{render:e=>{let{item:n,h:t}=e;if("SaveResult"!==n.type)return null;let l={};return n.bgColor&&(l.background=n.bgColor),n.textColor&&(l.color=n.textColor),t("button",{class:"save-btn",style:l,onMouseEnter:e=>{n.hoverBg&&(e.currentTarget.style.background=n.hoverBg)},onMouseLeave:e=>{n.bgColor?e.currentTarget.style.background=n.bgColor:e.currentTarget.style.background=""},onClick:r},n.text||"Скачать");async function r(){let e=document.querySelector(".cbs-calc-runtime");if(e)try{let t=await (window.html2canvas?Promise.resolve(window.html2canvas):new Promise((e,n)=>{let t=document.createElement("script");t.src="https://unpkg.com/html2canvas@1.4.1/dist/html2canvas.min.js",t.onload=()=>e(window.html2canvas),t.onerror=n,document.head.appendChild(t)})),l=await t(e,{backgroundColor:"#ffffff",useCORS:!0}),r=await a(n.topImage),s=await a(n.bottomImage),i=l.width,o=r?Math.round(r.height*(i/r.width)):0,c=s?Math.round(s.height*(i/s.width)):0,d=o+l.height+c,u=document.createElement("canvas");u.width=i,u.height=d;let x=u.getContext("2d"),p=0;r&&(x.drawImage(r,0,p,i,o),p+=o),x.drawImage(l,0,p),p+=l.height,s&&x.drawImage(s,0,p,i,c);let m=document.createElement("a");m.download="result.png",m.href=u.toDataURL("image/png"),m.click()}catch(e){console.error(e),alert("Ошибка сохранения")}}function a(e){return new Promise(n=>{if(!e)return n(null);let t=new Image;t.crossOrigin="anonymous",t.onload=()=>n(t),t.onerror=()=>n(null),t.src=e})}}},"Image":{render:e=>{let{item:n,h:t}=e;if("Image"!==n.type||!n.src)return null;let l="";l="wide"===n.aspect?"image-wide":"square"===n.aspect?"image-square":"image-free";let r=(n.aspect,"image");return t("div",{class:"image-wrap "+l},t("img",{class:r,src:n.src}))}},"Text":{render:e=>{let{item:n,h:t}=e;if("Text"!==n.type||!n.text)return null;let l=String(n.text).split(/\n+/);return t("div",{class:"text-block"},l.map(e=>t("p",{},e)))}},"DataSelect":{render:e=>{let{item:n,state:t,set:l,get:r,h:a}=e;if("DataSelect"!==n.type)return null;let s={};try{s=JSON.parse(n.data||"{}")}catch(e){}let i=Object.keys(s||{}),o=n.default||i[0]||"",c=r(n.key,o),d=s[c];return d&&"object"==typeof d&&Object.entries(d).forEach(e=>{let[n,t]=e;l(n,t)}),a("div",{class:"field"},n.name?a("div",{class:"field-label"},n.name):null,a("select",{value:c||"",onChange:e=>l(n.key,e.target.value)},i.map(e=>a("option",{value:e},e))))}},"Input":{render:e=>{var n;let{item:t,state:l,set:r,get:a,h:s}=e;if("Input"!==t.type)return null;let i=a(t.key,null!==(n=t.default)&&void 0!==n?n:0);return s("div",{class:"field"},t.name?s("div",{class:"field-label"},t.name):null,s("input",{value:null!=i?i:"",onInput:e=>r(t.key,parseFloat(e.target.value)||0)}))}},"Select":{render:e=>{var n,t,l,r;let{item:a,state:s,set:i,get:o,h:c}=e;if("Select"!==a.type)return null;let d=null!==(r=a.default)&&void 0!==r?r:null!==(l=null===(n=a.variants)||void 0===n?void 0:null===(t=n[0])||void 0===t?void 0:t.value)&&void 0!==l?l:0,u=o(a.key,d);return c("div",{class:"field"},a.name?c("div",{class:"field-label"},a.name):null,c("select",{value:u,onChange:e=>i(a.key,parseFloat(e.target.value)||0)},(a.variants||[]).map(e=>c("option",{value:e.value},e.name))))}},"Radio":{render:e=>{var n,t,l,r;let{item:a,state:s,set:i,get:o,h:c}=e;if("Radio"!==a.type)return null;let d=null!==(r=a.default)&&void 0!==r?r:null!==(l=null===(n=a.variants)||void 0===n?void 0:null===(t=n[0])||void 0===t?void 0:t.value)&&void 0!==l?l:0,u=o(a.key,d);return c("div",{},a.name?c("div",{class:"field-label"},a.name):null,c("div",{class:"radio-group",style:{gridTemplateColumns:"repeat("+(a.cols||4)+",1fr)"}},(a.variants||[]).map(e=>{let n="wide"===e.imageRatio?"radio-ratio-wide":"square"===e.imageRatio?"radio-ratio-square":"";return c("div",{class:"radio-card"+(u===e.value?" active":""),onClick:()=>i(a.key,e.value)},e.image?c("img",{class:"radio-img "+n,src:e.image}):null,c("div",{class:"radio-card-label"},e.name))})))}},"Calc":{render:e=>{let{item:n,calc:t,set:l}=e;if("Calc"!==n.type)return null;let r=t(n.formula||"");return l(n.key,r),null}},"Range":{render:e=>{var n,t,l,r;let{item:a,state:s,set:i,get:o,h:c}=e;if("Range"!==a.type)return null;let d=Number(null!==(n=a.min)&&void 0!==n?n:0),u=Number(null!==(t=a.max)&&void 0!==t?t:100),x=Number(null!==(l=a.step)&&void 0!==l?l:1),p=null!==(r=a.default)&&void 0!==r?r:d,m=o(a.key,p),h=g(m,d,u,x),f=Math.abs(h-d)<=x?d:Math.abs(h-u)<=x?u:h;return c("div",{class:"field"},c("div",{class:"range-head"},a.name?c("div",{class:"field-label"},a.name):c("div",{}),c("div",{class:"range-value"},f)),c("input",{type:"range",class:"range-input",min:d,max:u,step:"any",value:f,onInput:e=>{let n=parseFloat(e.target.value)||0,t=g(n,d,u,x);i(a.key,t)}}));function g(e,n,t,l){return e<=n?n:e>=t?t:Number((n+Math.round((e-n)/l)*l).toFixed(6))}}},"Result":{render:e=>{let{item:n,state:t,h:l}=e;if("Result"!==n.type)return null;let r=[];return(n.data||[]).forEach(e=>{let n=(e||[]).map(e=>{let n=t[e];if("number"==typeof n&&isFinite(n)){let e=Number.isInteger(n)?n:Number(n.toFixed(2));return l("td",{},e)}return null!=n?l("td",{},String(n)):l("td",{},e)});r.push(l("tr",{},n))}),l("div",{class:"results-card"},n.title?l("div",{class:"header"},n.title):null,l("table",{},r))}}};
var PREACT_URL='https://unpkg.com/preact@10.19.3/dist/preact.umd.js';
var HOOKS_URL='https://unpkg.com/preact@10.19.3/hooks/dist/hooks.umd.js';
function showError(container,title,text){
if(!container) return;
container.innerHTML="";
var wrap=document.createElement("div");
wrap.className="calc-error";
var h=document.createElement("div");
h.className="calc-error-title";
h.textContent=title || "Ошибка";
var ta=document.createElement("textarea");
ta.value=text || "";
wrap.appendChild(h);
wrap.appendChild(ta);
container.appendChild(wrap);
}
function load(src){
return new Promise(function(res,rej){
var s=document.createElement('script');
s.src=src;
s.onload=res;
s.onerror=function(e){
rej(e);
};
document.head.appendChild(s);
});
}
function calcExpr(expr,state){
try{
if(!expr) return 0;
if(expr[0]==='=') expr = expr.slice(1);
var keys=Object.keys(state||{});
var vals=keys.map(function(k){return state[k];});
return Function.apply(null, keys.concat(["return "+expr])).apply(null, vals);
}catch(e){
err("CALC ERROR", expr, e);
return 0;
}
}
function extractDeps(expr){
if(!expr) return [];
if(expr[0]==='=') expr = expr.slice(1);
var m = expr.match(/[A-Z]+[0-9_]+/g);
return m || [];
}
function detectCycles(elements){
var graph={};
var keys={};
for(var i=0;i0;
});
if(!cols.length) return null;
var content = h('div',{class:'grid'},
cols.map(function(col,c){ return renderCol(col,c); })
);
var viewMode = block && block.viewMode ? block.viewMode : "full";
if(viewMode === "dropdown"){
var style={};
if(block.dropdownBg) style.background=block.dropdownBg;
if(block.dropdownColor) style.color=block.dropdownColor;
return h('details',{key:i},
h('summary',{style:style},
block.dropdownTitle || "Подробнее"
),
content
);
}
return h('div',{class:'grid',key:i},
cols.map(function(col,c){ return renderCol(col,c); })
);
}
var layout=(schema && schema.layout) ? schema.layout : [];
return h('div',{class:'cbs-calc-runtime'},
layout.map(function(b,i){ return renderBlock(b,i); })
);
}
try{
render(h(App),container);
}catch(e){
err("Render crash", e);
showError(container,"Ошибка рендера схемы",e.stack || e.message);
}
}
(function init(){
var p = Promise.resolve();
if(!window.preact) p = p.then(function(){ return load(PREACT_URL); });
if(!window.preactHooks) p = p.then(function(){ return load(HOOKS_URL); });
p.then(start).catch(function(e){
var container=document.getElementById('data-calc');
if(container){
showError(container,"Ошибка рендера схемы",e.stack || e.message);
}
err("Init failed", e);
});
})();
})();
Lorem ipsum
test
Показать калькулятор