PageSourceSearch

https://atcom.ro/assets/Configuratoare-CnNU7Z-h.js

js atcom.ro collected 2026-10-10 01:31:32 UTC 67,146 bytes, 2 lines download raw bytes

1import{J as Na,q as p,f as J,o as e,r as ka,R as kt,e as Ct}from"./index-CHGZ0aK0.js";import{I as We}from"./InfoBtn-DBLXJRIK.js";import{u as Qe,C as Ye}from"./ConfirmCloseBar-BQ_xSSND.js";import{f as He}from"./text-BStBp238.js";const St={name:"",description:""};function Ca({fields:y,viewMode:W,adminMode:$=!0}){const S=y.find(d=>d.type==="set-toggle");function T(d){if(!d)return[];const v=d.items.filter(b=>b.defaultChecked);return v.length>0?v.map(b=>b.key):d.items.map(b=>b.key)}const[N,P]=p.useState(()=>T(S)),[he,re]=p.useState({}),oe=JSON.stringify(S);p.useEffect(()=>{P(T(S)),re({})},[oe]);function L(d){P(v=>v.includes(d)?v.length<=(S?.minSelected??1)?v:v.filter(b=>b!==d):[...v,d])}function de(d,v,b){re(B=>({...B,[d]:{...B[d]||{},[v]:b}}))}function ee(d,v){return he[d]?.[v]??""}function F(d,v){return!d.conditions||d.conditions.length===0?!0:d.conditions.every(b=>{const B=ee(v,b.field),C=parseFloat(B);return b.operator===">="?!isNaN(C)&&C>=b.value:b.operator==="<="?!isNaN(C)&&C<=b.value:b.operator===">"?!isNaN(C)&&C>b.value:b.operator==="<"?!isNaN(C)&&C<b.value:b.operator==="=="?String(B)===String(b.value):b.operator==="!="?String(B)!==String(b.value):!0})}function Q(d){return d.type==="select"&&(!d.options||d.options.length===0)}function K(d,v){return!$&&Q(d)?!1:F(d,v)}const G=y.filter(d=>d.perItem&&d.type!=="set-toggle"),te=y.filter(d=>!d.perItem&&d.type!=="set-toggle"),_=S?S.items.filter(d=>N.includes(d.key)):[],ae=W==="mobile";function q(d,v){if(!K(d,v))return null;const b=`prev-${d.key}-${v}`,B=ee(v,d.key),C=Q(d);return e.jsxs("div",{className:`prev-field ${C?"prev-field--empty":""}`,children:[e.jsxs("label",{className:"prev-label",htmlFor:b,children:[d.label,d.required?e.jsx("span",{className:"prev-req",children:" *"}):"",$&&C&&e.jsx("span",{className:"prev-unconfigured",children:" — neconfigurat"})]}),d.type==="select"&&C&&$&&e.jsx("div",{className:"prev-input prev-input--empty",children:"fără opțiuni"}),d.type==="select"&&!C&&e.jsxs("select",{id:b,className:"prev-input",value:B,onChange:w=>de(v,d.key,w.target.value),children:[e.jsx("option",{value:"",children:"— alege —"}),d.options.map((w,le)=>{const pe=String(typeof w=="object"?w.value??"":w);let Y="";if(typeof w=="object"&&w.price!=null&&w.price!==0){const r=w.price>0?"+":"";Y=w.priceType==="percent"?` (${r}${w.price}%)`:` (${r}${w.price} lei)`}const M=d.unit?`${pe} ${d.unit}${Y}`:`${pe}${Y}`;return e.jsx("option",{value:pe,children:M},le)})]}),d.type==="text"&&e.jsx("input",{id:b,type:"text",className:"prev-input",placeholder:d.placeholder||d.label,maxLength:d.maxLength,value:B,onChange:w=>de(v,d.key,w.target.value)}),d.type==="checkbox"&&e.jsxs("label",{className:"prev-checkbox",children:[e.jsx("input",{type:"checkbox",checked:!!B,onChange:w=>de(v,d.key,w.target.checked)})," ",d.label]})]},b)}function ue(d){return G.filter(v=>K(v,d))}return e.jsxs("div",{className:`prev-root ${ae?"prev-mobile":"prev-desktop"}`,children:[S&&e.jsx("div",{className:"prev-set-toggle",children:S.items.map(d=>e.jsxs("button",{type:"button",className:`prev-toggle-btn ${N.includes(d.key)?"prev-toggle-btn--on":""}`,onClick:()=>L(d.key),children:[e.jsx("span",{className:"prev-toggle-check",children:N.includes(d.key)?"✓":"○"}),d.label]},d.key))}),_.length>0&&(ae?e.jsx("div",{className:"prev-mobile-fields",children:G.map(d=>{const v=_.filter(b=>K(d,b.key));return v.length===0?null:e.jsxs("div",{className:"prev-pair",children:[e.jsx("div",{className:"prev-pair-label",children:d.label}),v.map(b=>e.jsxs("div",{className:"prev-pair-item",children:[e.jsx("span",{className:"prev-pair-item-label",children:b.label}),q(d,b.key)]},b.key))]},d.key)})}):e.jsx("div",{className:"prev-desktop-cols",style:{gridTemplateColumns:`repeat(${_.length}, 1fr)`},children:_.map(d=>e.jsxs("div",{className:"prev-col",children:[e.jsx("div",{className:"prev-col-header",children:d.label}),ue(d.key).map(v=>q(v,d.key)),ue(d.key).length===0&&e.jsx("div",{className:"prev-empty",children:"Niciun câmp disponibil."})]},d.key))})),te.filter(d=>K(d,"global")).length>0&&e.jsxs("div",{className:"prev-global",children:[e.jsx("div",{className:"prev-global-label",children:"Opțiuni comandă"}),te.map(d=>q(d,"global"))]}),G.length===0&&te.length===0&&!S&&e.jsx("div",{className:"prev-empty",children:"Niciun câmp definit încă."})]})}function qe(y){return String(y||"").toLowerCase().replace(/ă/g,"a").replace(/â/g,"a").replace(/î/g,"i").replace(/ș/g,"s").replace(/ț/g,"t").replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function Ce(y){return typeof y=="object"&&y!==null?{value:String(y.value??""),price:Number(y.price??0),priceType:y.priceType||"fixed",children:Array.isArray(y.children)?y.children:[],image:y.image||"",active:y.active}:{value:String(y),price:0,priceType:"fixed",children:[],image:"",active:void 0}}function wt(y){const W=Array.isArray(y.children)&&y.children.length>0,$=!!y.image,S=y.active===!1,T=Number(y.price)||0;if(T===0&&y.priceType==="fixed"&&!W&&!$&&!S)return y.value;const N={value:y.value,price:T,priceType:y.priceType||"fixed"};return W&&(N.children=y.children),$&&(N.image=y.image),S&&(N.active=!1),N}function Xe({value:y,onChange:W,depth:$=0,reorderMode:S=!1,openGallery:T=null}){const N=Array.isArray(y)?y:[],[P,he]=p.useState({}),[re,oe]=p.useState(""),[L,de]=p.useState({}),ee=r=>W(r),F=(r,u)=>ee(N.map((g,f)=>f===r?{...g,...u}:g)),Q=()=>ee([...N,{key:"",label:"",type:"select",required:!1,options:[]}]),K=r=>ee(N.filter((u,g)=>g!==r)),G=(r,u)=>{const g=r+u;if(g<0||g>=N.length)return;const f=[...N];[f[r],f[g]]=[f[g],f[r]],ee(f)},te=r=>r==="select"||r==="icons-h"||r==="icons-v";function _(r,u){F(r,{options:u})}function ae(r){const u=N[r];_(r,[...u.options||[],""])}function q(r,u,g){const x=(N[r].options||[]).map((z,D)=>D===u?wt({...Ce(z),...g}):z);_(r,x)}function ue(r,u){const g=N[r];_(r,(g.options||[]).filter((f,x)=>x!==u))}function d(r){try{localStorage.setItem("cfg_opts_clipboard",JSON.stringify((N[r].options||[]).map(Ce)))}catch{}}function v(r){try{const u=localStorage.getItem("cfg_opts_clipboard");if(!u)return;const g=JSON.parse(u);if(!Array.isArray(g))return;const f=new Set((N[r].options||[]).map(z=>Ce(z).value)),x=g.filter(z=>z&&!f.has(String(z.value??""))).map(z=>wt(Ce(z)));x.length&&_(r,[...N[r].options||[],...x])}catch{}}function b(r,u,g){const f=[...N[r].options||[]],x=u+g;x<0||x>=f.length||([f[u],f[x]]=[f[x],f[u]],_(r,f))}function B(r){try{localStorage.setItem("cfg_subattr_clipboard",JSON.stringify(N[r])),W([...N])}catch{}}function C(){try{const r=localStorage.getItem("cfg_subattr_clipboard");if(!r)return;const u=JSON.parse(r);if(!u||typeof u!="object")return;const g=new Set(N.map(O=>O.key)),f=u.key||qe(u.label||"subatribut")||"subatribut";let x=f,z=2;for(;g.has(x);)x=`${f}_${z++}`;const D=JSON.parse(JSON.stringify(u));D.key=x,ee([...N,D])}catch{}}const w=(()=>{try{return!!localStorage.getItem("cfg_subattr_clipboard")}catch{return!1}})();async function le(r,u,g){if(g){oe(`${r}:${u}`);try{const f=new FormData;f.append("icon",g);const x=await J.post("/api/configuratoare/upload-icon",f);q(r,u,{image:x.data.url})}catch{}finally{oe("")}}}const[pe,Y]=p.useState("");async function M(r,u){if(u){Y(`c${r}`);try{const g=new FormData;g.append("icon",u);const f=await J.post("/api/configuratoare/upload-icon",g);F(r,{image:f.data.url})}catch{}finally{Y("")}}}return e.jsxs("div",{className:"sae",style:{marginLeft:$?10:0},children:[N.length===0&&e.jsx("div",{className:"sae-empty",children:"Niciun sub-atribut. Adaugă mai jos."}),N.map((r,u)=>e.jsxs("div",{className:"sae-child",children:[e.jsxs("div",{className:"sae-child-head",children:[e.jsx("button",{type:"button",className:"sae-collapse",title:L[u]?"Desfă":"Pliază",onClick:()=>de(g=>({...g,[u]:!g[u]})),children:L[u]?"▸":"▾"}
1),e.jsx("button",{type:"button",className:`cfg-active-toggle ${r.active===!1?"cfg-active-toggle--off":""}`,title:r.active===!1?"Inactiv — click pentru activare":"Activ — click pentru dezactivare",onClick:()=>F(u,{active:r.active===!1?void 0:!1}),children:r.active===!1?"○":"●"}),e.jsx("input",{className:"sae-input",placeholder:"Nume sub-atribut (ex: Număr pietre)",value:r.label,onChange:g=>F(u,{label:g.target.value,key:r.key&&r._km?r.key:qe(g.target.value)})}),e.jsxs("select",{className:"sae-select",value:r.type,onChange:g=>F(u,{type:g.target.value}),children:[e.jsx("option",{value:"select",children:"Listă (select)"}),e.jsx("option",{value:"text",children:"Text"}),e.jsx("option",{value:"textarea",children:"Text lung"}),e.jsx("option",{value:"checkbox",children:"Bifă"}),e.jsx("option",{value:"info",children:"Text info (needitabil, doar afișare)"}),e.jsx("option",{value:"font",children:"Font (din bibliotecă)"})]}),e.jsxs("label",{className:"cfg-opt-icon",title:r.image?"Schimbă iconița":"Iconiță sub-atribut",children:[pe===`c${u}`?e.jsx("span",{className:"cfg-opt-icon-load",children:"…"}):r.image?e.jsx("img",{src:r.image,alt:"",className:"cfg-opt-icon-img"}):e.jsx("span",{className:"cfg-opt-icon-add",children:"+"}),e.jsx("input",{type:"file",accept:"image/*",hidden:!0,onChange:g=>{const f=g.target.files?.[0];f&&M(u,f),g.target.value=""}})]}),T&&e.jsx("button",{type:"button",className:"cfg-opt-gallery",title:"Alege din galerie (fără upload nou)",onClick:()=>T(g=>F(u,{image:g}),r.label||"sub-atribut"),children:"📁"}),r.image&&e.jsx("button",{className:"cfg-opt-icon-del",title:"Șterge iconița",onClick:()=>F(u,{image:""}),children:"×"}),e.jsxs("label",{className:"sae-req",title:"Obligatoriu",children:[e.jsx("input",{type:"checkbox",checked:!!r.required,onChange:g=>F(u,{required:g.target.checked})})," oblig."]}),r.type==="select"&&e.jsxs("label",{className:"sae-req",title:"Permite «Altul — scriere liberă»: vânzătorul logat poate scrie manual o valoare care nu e în listă (ex. markiză, oval 6×8, onyx). Doar admin/vânzător pe site.",children:[e.jsx("input",{type:"checkbox",checked:!!r.allowCustom,onChange:g=>F(u,{allowCustom:g.target.checked})})," ✍ altul"]}),e.jsx("button",{className:"sae-clone",onClick:()=>B(u),title:"Clonează sub-atributul întreg (de lipit în alt atribut)",children:"⎘"}),e.jsx("button",{className:"sae-del",onClick:()=>K(u),title:"Șterge sub-atributul",children:"×"}),S&&e.jsxs("div",{className:"ro-arrows",children:[e.jsx("button",{className:"ro-arrow",onClick:()=>G(u,-1),disabled:u===0,children:"▲"}),e.jsx("button",{className:"ro-arrow",onClick:()=>G(u,1),disabled:u===N.length-1,children:"▼"})]})]}),!L[u]&&te(r.type)&&e.jsxs("div",{className:"sae-opts",children:[(r.options||[]).map((g,f)=>{const x=Ce(g),z=`${u}:${f}`,D=!!P[z];return e.jsxs("div",{className:"sae-opt",children:[e.jsxs("div",{className:"sae-opt-row",children:[e.jsx("button",{type:"button",className:`cfg-active-toggle ${x.active===!1?"cfg-active-toggle--off":""}`,title:x.active===!1?"Inactiv — click pentru activare":"Activ — click pentru dezactivare",onClick:()=>q(u,f,{active:x.active===!1?void 0:!1}),children:x.active===!1?"○":"●"}),e.jsx("input",{className:"sae-input",value:x.value,placeholder:"Opțiune nouă",onChange:O=>q(u,f,{value:O.target.value})}),e.jsxs("label",{className:"cfg-opt-icon",title:x.image?"Schimbă iconița":"Încarcă iconiță",children:[re===z?e.jsx("span",{className:"cfg-opt-icon-load",children:"…"}):x.image?e.jsx("img",{src:x.image,alt:"",className:"cfg-opt-icon-img"}):e.jsx("span",{className:"cfg-opt-icon-add",children:"+"}),e.jsx("input",{type:"file",accept:"image/*",hidden:!0,onChange:O=>{const H=O.target.files?.[0];H&&le(u,f,H),O.target.value=""}})]}),T&&e.jsx("button",{type:"button",className:"cfg-opt-gallery",title:"Alege din galerie (fără upload nou)",onClick:()=>T(O=>q(u,f,{image:O}),x.value||"opțiune"),children:"📁"}),x.image&&e.jsx("button",{className:"cfg-opt-icon-del",title:"Șterge iconița",onClick:()=>q(u,f,{image:""}),children:"×"}
1),e.jsx("button",{type:"button",className:`cfg-opt-star ${r.defaultValue===x.value&&x.value?"cfg-opt-star--on":""}`,title:r.defaultValue===x.value?"Standard (click pentru eliminare)":"Setează ca standard (preluat implicit)",onClick:()=>F(u,{defaultValue:r.defaultValue===x.value?void 0:x.value}),children:r.defaultValue===x.value&&x.value?"★":"☆"}),e.jsx("input",{className:"sae-price",type:"text",inputMode:"decimal",placeholder:"0",title:"Poți pune minus pentru reducere (ex: -2000)",value:x.price===0?"":x.price,onChange:O=>{const H=O.target.value.replace(/[^0-9.\-]/g,""),ge=H===""?0:H==="-"?"-":parseFloat(H)||(H.endsWith(".")?H:0);q(u,f,{price:ge})}}),e.jsx("button",{className:"sae-typebtn",onClick:()=>q(u,f,{priceType:x.priceType==="percent"?"fixed":"percent"}),children:x.priceType==="percent"?"%":"lei"}),e.jsxs("button",{className:`sae-childbtn ${x.children.length?"sae-childbtn--on":""}`,onClick:()=>he(O=>({...O,[z]:!D})),title:"Sub-atribute pentru această opțiune",children:["🌿 ",x.children.length||"+"]}),e.jsx("button",{className:"sae-del",onClick:()=>ue(u,f),children:"×"}),S&&e.jsxs("div",{className:"ro-arrows",children:[e.jsx("button",{className:"ro-arrow",onClick:()=>b(u,f,-1),disabled:f===0,children:"▲"}),e.jsx("button",{className:"ro-arrow",onClick:()=>b(u,f,1),disabled:f===(r.options||[]).length-1,children:"▼"})]})]}),D&&e.jsx("div",{className:"sae-nested",children:e.jsx(Xe,{depth:$+1,value:x.children,reorderMode:S,openGallery:T,onChange:O=>q(u,f,{children:O})})})]},f)}),e.jsxs("div",{className:"sae-opt-tools",children:[e.jsx("button",{className:"sae-addopt",onClick:()=>ae(u),children:"+ Opțiune"}),e.jsxs("button",{className:"sae-addopt sae-addopt--clip",onClick:()=>d(u),title:"Copiază opțiunile acestui sub-atribut (le poți lipi în alt atribut/sub-atribut)",children:["📋 Copiază (",(r.options||[]).length,")"]}),e.jsx("button",{className:"sae-addopt sae-addopt--clip",onClick:()=>v(u),title:"Lipește opțiunile copiate anterior",children:"📥 Lipește"})]})]}),!L[u]&&r.type==="info"&&e.jsx("div",{className:"sae-info",children:e.jsx("textarea",{className:"sae-input sae-info-text",rows:2,placeholder:"Caracteristicile pietrei — text afișat clientului cu iconiță ℹ când alege această opțiune",value:r.content||"",onChange:g=>F(u,{content:g.target.value})})}),!L[u]&&(r.type==="text"||r.type==="textarea")&&e.jsx("div",{className:"sae-info",children:e.jsx("input",{className:"sae-input",type:"number",min:"1",max:"500",style:{maxWidth:240},placeholder:"Max caractere (gol = nelimitat)",value:r.maxLength||"",onChange:g=>F(u,{maxLength:g.target.value})})}),!L[u]&&r.type==="font"&&e.jsxs("div",{className:"sae-info",style:{fontSize:"0.78rem",color:"#999"},children:["🔤 Fonturile se iau automat din ",e.jsx("strong",{children:"Setări → Fonturi Gravură"}),". Clientul alege, iar textul gravurii se afișează în fontul ales (live)."]})]},u)),e.jsxs("div",{className:"sae-addchild-row",children:[e.jsx("button",{className:"sae-addchild",onClick:Q,children:"+ Adaugă sub-atribut"}),w&&e.jsx("button",{className:"sae-addchild sae-addchild--clip",onClick:C,title:"Lipește sub-atributul clonat (cu tot: tip, opțiuni, iconițe)",children:"📥 Lipește sub-atribut"})]})]})}function $a(){const{can:y,isMaster:W}=Na(),[$,S]=p.useState([]),[T,N]=p.useState(()=>{try{return localStorage.getItem("cfg_list_search")||""}catch{return""}}),[P,he]=p.useState(()=>{try{return JSON.parse(localStorage.getItem("cfg_list_sort")||"null")}catch{return null}}),[re,oe]=p.useState(null),[L,de]=p.useState(()=>{try{return JSON.parse(localStorage.getItem("cfg_attr_clipboard")||"null")}catch{return null}}),[ee,F]=p.useState(!0),[Q,K]=p.useState(null),[G,te]=p.useState(St),[_,ae]=p.useState(null),[q,ue]=p.useState(!1),[d,v]=p.useState(""),[b,B]=p.useState(""),[C,w]=p.useState(null),[le,pe]=p.useState(""),[Y,M]=p.useState(""),[r,u]=p.useState(!1),[g,f]=p.useState(!1),[x,z]=p.useState("atribute"),[D,O]=p.useState(null),H=p.useRef(null),ge=p.useRef("");function R(t){ge.current=t,pe(t)}const Ze=p.useMemo(()=>{try{return JSON.parse(le)}catch{return null}},[le]),[At,Se]=p.useState(!1),[et,tt]=p.useState([]),[Be,at]=p.useState(""),[lt,It]=p.useState(""),we=p.useRef(null);async function Ae(t,a=""){we.current=t,at(""),It(a);try{const s=await J.get("/api/configuratoare/gallery");tt(s.data.items||[])}catch{tt([])}Se(!0)}function Ot(t){we.current&&we.current(t),Se(!1),we.current=null}const st={key:"",label:"",type:"select",perItem:!0,required:!0,unit:"",maxLength:"",placeholder:"",infoNote:"",conditions:[],price:0,priceType:"fixed",complex:!1,childrenAfterText:!1,showBadge:!0,badgeIcon:"",image:""},[me,ve]=p.useState(null),[o,A]=p.useState(st),[Sa,it]=p.useState(!1),[$t,De]=p.useState(!1),[nt,se]=p.useState(""),[Pe,ye]=p.useState(null),[Me,Ie]=p.useState(null),[ct,rt]=p.useState([]);function Tt(t){const a=I()[t];rt(Array.isArray(a.children)?a.children:[]),Ie({attrIdx:t})}async function zt(){const a=I().map((l,c)=>c===Me.attrIdx?{...l,children:ct}:l),s=JSON.stringify(a,null,2);R(s),Ie(null),await X(s)}const[ce,ot]=p.useState(!1),[Oe,$e]=p.useState(null),[U,V]=p.useState([]),[Te,Ve]=p.useState(""),[dt,ie]=p.useState(""),[ne,ze]=p.useState(null),[ut,_t]=p.useState(null),[Et,pt]=p.useState(null),[gt,mt]=p.useState(()=>{try{const t=localStorage.getItem("cfg_opts_clipboard");return t?(JSON.parse(t)||[]).length:0}catch{return 0}}),fe=Qe(()=>K(null)),xe=Qe(()=>ve(null)),je=Qe(()=>$e(null));function Jt(t){return t.toLowerCase().replace(/ă/g,"a").replace(/â/g,"a").replace(/î/g,"i").replace(/ș/g,"s").replace(/ț/g,"t").replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"").replace(/_+/g,"_").replace(/^_+|_+$/g,"")}function I(){try{return JSON.parse(ge.current)}catch{return[]}}function Ft(){A(st),De(!1),se(""),it(!1),xe.reset(),ve("add")}function Lt(t){const a=I()[t];it(Array.isArray(a.conditions)&&a.conditions.length>0),A({key:a.key,label:a.label,type:a.type,perItem:a.perItem??!0,required:a.required??!1,unit:a.unit||"",maxLength:a.maxLength||"",placeholder:a.placeholder||"",infoNote:a.infoNote||"",conditions:a.conditions||[],price:Number(a.price??0),priceType:a.priceType||"fixed",complex:!!a.complex,childrenAfterText:!!a.childrenAfterText,showBadge:a.showBadge==="icon"?"icon":a.showBadge!==!1,badgeIcon:a.badgeIcon||"",image:a.image||"",allowCustom:!!a.allowCustom}),De(!0),se(""),xe.reset(),ve({type:"edit",index:t})}function qt(t){A(a=>({...a,label:t,key:$t?a.key:Jt(t)}))}async function Bt(){if(!o.label.trim()){se("Numele este obligatoriu.");return}if(!o.key.trim()){se("Cheia este obligatorie.");return}const t=I();if(t.some((m,h)=>m.key===o.key&&(me==="add"||h!==me.index))){se("Există deja un atribut cu această cheie.");return}const s={key:o.key.trim(),type:o.type,label:o.label.trim(),perItem:o.perItem,required:o.required};o.unit.trim()&&(s.unit=o.unit.trim()),["select","icons-h","icons-v"].includes(o.type)&&(s.options=[]),(o.type==="text"||o.type==="textarea")&&o.maxLength&&(s.maxLength=parseInt(o.maxLength)),(o.type==="text"||o.type==="textarea")&&o.placeholder?.trim()&&(s.placeholder=o.placeholder.trim()),o.infoNote?.trim()&&(s.infoNote=o.infoNote.trim());const l=(o.conditions||[]).filter(m=>m&&m.field&&Array.isArray(m.values)&&m.values.length>0);l.length>0&&(s.conditions=l),o.complex&&(s.complex=!0),o.complex&&o.childrenAfterText&&(s.childrenAfterText=!0),o.showBadge===!1&&(s.showBadge=!1),o.showBadge==="icon"&&(s.showBadge="icon",o.badgeIcon&&(s.badgeIcon=o.badgeIcon)),o.allowCustom&&["select","icons-h","icons-v"].includes(o.type)&&(s.allowCustom=!0),o.image&&(s.image=o.image),o.type==="checkbox"&&(s.price=Number(o.price)||0,s.priceType=o.priceType||"fixed");let c;me==="add"?c=[...t,s]:c=t.map((m,h)=>
1{if(h!==me.index)return m;const n={...m,...s,options:m.options??[]};return o.complex||delete n.complex,o.showBadge!==!1&&delete n.showBadge,o.image||delete n.image,o.infoNote?.trim()||delete n.infoNote,l.length||delete n.conditions,o.unit?.trim()||delete n.unit,o.placeholder?.trim()||delete n.placeholder,(o.type==="text"||o.type==="textarea")&&o.maxLength||delete n.maxLength,o.complex&&o.childrenAfterText||delete n.childrenAfterText,n});const i=JSON.stringify(c,null,2);R(i),ve(null),await X(i)}async function Dt(){const t=I().filter((s,l)=>l!==Pe),a=JSON.stringify(t,null,2);R(a),ye(null),await X(a)}function Pt(t){const a=I()[t],s=(a.options||[]).map(l=>typeof l=="object"&&l!==null?{value:String(l.value??""),price:Number(l.price??0),priceType:l.priceType||"fixed",children:Array.isArray(l.children)?l.children:[],image:l.image||"",qty:l.qty,qtyByItem:l.qtyByItem&&typeof l.qtyByItem=="object"?{...l.qtyByItem}:void 0,_orig:String(l.value??"")}:{value:String(l),price:0,priceType:"fixed",children:[],image:"",_orig:String(l)});V(s),Ve(""),ie(""),ze(a.defaultValue??null);try{const l=localStorage.getItem("cfg_opts_clipboard");mt(l?(JSON.parse(l)||[]).length:0)}catch{}je.reset(),$e({attrIdx:t})}function ht(){if(!Te.trim()){ie("Valoarea este obligatorie.");return}if(U.some(t=>t.value===Te.trim())){ie("Opțiunea există deja.");return}V(t=>[...t,{value:Te.trim(),price:0,priceType:"fixed"}]),Ve(""),ie("")}async function Mt(t,a){if(a){pt(t),ie("");try{const s=new FormData;s.append("icon",a);const l=await J.post("/api/configuratoare/upload-icon",s);V(c=>c.map((i,m)=>m===t?{...i,image:l.data.url}:i))}catch{ie("Eroare la încărcarea iconiței.")}finally{pt(null)}}}function Vt(t){V(a=>a.map((s,l)=>l===t?{...s,image:""}:s))}const[Rt,ft]=p.useState(!1);async function Ut(t){if(t){ft(!0),se("");try{const a=new FormData;a.append("icon",t);const s=await J.post("/api/configuratoare/upload-icon",a);A(l=>({...l,image:s.data.url}))}catch{se("Eroare la încărcarea iconiței.")}finally{ft(!1)}}}const[Kt,xt]=p.useState(!1);async function Gt(t){if(t){xt(!0),se("");try{const a=new FormData;a.append("icon",t);const s=await J.post("/api/configuratoare/upload-icon",a);A(l=>({...l,badgeIcon:s.data.url}))}catch{se("Eroare la încărcarea iconiței.")}finally{xt(!1)}}}function Wt(){try{localStorage.setItem("cfg_opts_clipboard",JSON.stringify(U)),mt(U.length),ie("")}catch{}}function Qt(){try{const t=localStorage.getItem("cfg_opts_clipboard");if(!t)return;const a=JSON.parse(t);if(!Array.isArray(a))return;V(s=>{const l=new Set(s.map(i=>i.value)),c=a.filter(i=>i&&!l.has(String(i.value??""))).map(i=>({value:String(i.value??""),price:Number(i.price??0),priceType:i.priceType||"fixed",children:Array.isArray(i.children)?i.children:[],image:i.image||""}));return[...s,...c]}),ie("")}catch{}}function Yt(t){V(a=>a.filter((s,l)=>l!==t))}function bt(t,a){const s=t+a;if(s<0||s>=U.length)return;const l=[...U];[l[t],l[s]]=[l[s],l[t]],V(l)}async function Ht(){const t=I(),a=U.map(n=>{const j=Array.isArray(n.children)&&n.children.length>0,k=!!n.image,Z=Number(n.price)||0,be=n.qty!=null&&n.qty!==""&&!isNaN(Number(n.qty)),Ge=n.qtyByItem&&typeof n.qtyByItem=="object"?Object.fromEntries(Object.entries(n.qtyByItem).filter(([,ke])=>ke!=null&&ke!==""&&!isNaN(Number(ke))).map(([ke,ja])=>[ke,Number(ja)])):null,Nt=Ge&&Object.keys(Ge).length>0;if(Z===0&&n.priceType==="fixed"&&!j&&!k&&!be&&!Nt)return n.value;const Ne={value:n.value,price:Z,priceType:n.priceType||"fixed"};return j&&(Ne.children=n.children),k&&(Ne.image=n.image),be&&(Ne.qty=Number(n.qty)),Nt&&(Ne.qtyByItem=Ge),Ne}),s=t[Oe.attrIdx]?.key,l=U.filter(n=>n._orig!==void 0&&n._orig!==""&&n._orig!==n.value).map(n=>({fieldKey:s,from:n._orig,to:n.value})),c={};l.forEach(n=>{c[n.from]=n.to});let i=ne;i&&c[i]&&(i=c[i]);const m=t.map((n,j)=>{if(j!==Oe.attrIdx)return n;const k={...n,options:a};return i?k.defaultValue=i:delete k.defaultValue,k}),h=JSON.stringify(m,null,2);R(h),$e(null),await X(h,!1,l)}async function vt(t,a){const s=I(),l=t+a;if(l<0||l>=s.length||s[l]?.type==="set-toggle")return;const c=[...s];[c[t],c[l]]=[c[l],c[t]];const i=JSON.stringify(c,null,2);R(i),await X(i)}async function Xt(t){const a=I().map((l,c)=>{if(c!==t)return l;if(l.active===!1){const{active:i,...m}=l;return m}return{...l,active:!1}}),s=JSON.stringify(a,null,2);R(s),await X(s)}async function Zt(t){const a=I(),s=a[t];if(!s)return;const l=new Set(a.map(k=>k.key)),c=(s.key||qe(s.label||"atribut")||"atribut")+"_copie";let i=c,m=2;for(;l.has(i);)i=`${c}_${m++}`;const h=JSON.parse(JSON.stringify(s));h.key=i,h.label=(s.label||"")+" (copie)";const n=[...a];n.splice(t+1,0,h);const j=JSON.stringify(n,null,2);R(j),await X(j)}function ea(t){const a=I()[t];a&&(localStorage.setItem("cfg_attr_clipboard",JSON.stringify(a)),de(a))}async function ta(){const t=L||(()=>{try{return JSON.parse(localStorage.getItem("cfg_attr_clipboard")||"null")}catch{return null}})();if(!t)return;const a=I(),s=new Set(a.map(h=>h.key));let l=t.key||qe(t.label||"atribut")||"atribut";if(s.has(l)){const h=l+"_copie";let n=2,j=h;for(;s.has(j);)j=`${h}_${n++}`;l=j}const c=JSON.parse(JSON.stringify(t));c.key=l;const i=[...a,c],m=JSON.stringify(i,null,2);R(m),await X(m)}const _e=W()||y("configurator.create"),Re=W()||y("configurator.edit"),aa=W()||y("configurator.delete");p.useEffect(()=>{Ee()},[]);async function Ee(){try{const t=await J.get("/api/configuratoare");S(t.data.configuratoare)}finally{F(!1)}}function E(t,a=3e3){B(t),setTimeout(()=>B(""),a)}const[la,sa]=p.useState(()=>{try{return!!localStorage.getItem("cfg_template_clipboard")}catch{return!1}});function ia(t){try{localStorage.setItem("cfg_template_clipboard",JSON.stringify({name:t.name,fields:t.fields||[]})),sa(!0),E(`Template „${t.name}" copiat — acum apasă „Lipește" pe altul ✓`)}catch{}}async function na(t){try{const a=localStorage.getItem("cfg_template_clipboard");if(!a)return;const s=JSON.parse(a),l=s?.fields;if(!Array.isArray(l)||!await Ct(`Lipești atributele din „${s.name}" în „${t.name}"?
2Atributele actuale ale lui „${t.name}" vor fi ÎNLOCUITE (adaugi după aceea ce lipsește).`))return;await J.put(`/api/configuratoare/${t.id}`,{fields:l}),await Ee(),E(`Lipit în „${t.name}" ✓`)}catch(a){E(a.response?.data?.error||"Eroare la lipire.")}}function ca(t){try{const a=JSON.stringify(t,null,2),s=new Blob([a],{type:"application/json"}),l=URL.createObjectURL(s),c=document.createElement("a"),i=(t.name||`config-${t.id}`).replace(/[^a-z0-9]+/gi,"-").replace(/^-|-$/g,"");c.href=l,c.download=`backup-configurator-${t.id}-${i}.json`,document.body.appendChild(c),c.click(),c.remove(),setTimeout(()=>URL.revokeObjectURL(l),1e3)}catch{E("Eroare la export.")}}async function ra(t){try{const a=await t.text(),s=JSON.parse(a);if(!s||!Array.isArray(s.fields)){E("Fișier invalid (nu e backup de configurator).");return}const l={name:(s.name||"Configurator")+" (restaurat)",description:s.description||"",fields:s.fields};await J.post("/api/configuratoare",l),await Ee(),E(`Restaurat „${l.name}" ✓`)}catch(a){E(a.response?.data?.error||"Eroare la import.")}}async function oa(t){try{const a=new Date,s=c=>String(c).padStart(2,"0"),l=`${s(a.getDate())}.${s(a.getMonth()+1)}.${a.getFullYear()} ${s(a.getHours())}:${s(a.getMinutes())}`;await J.post("/api/admin/templates",{type:"configurator",name:`${t.name} — ${l}`,description:`Backup configurator „${t.name}" · ${(t.fields||[]).length} câmpuri · ${l}`,content:t}),E("✓ Backup salvat în modulul Template — îl găsești acolo, nu mai descarci fișier")}catch(a){E(a.response?.data?.error||"Eroare la backup în Template.")}}
2async function da(t){oe(t.id);try{const a=new Set($.map(m=>m.name));let s=`${t.name} (copie)`,l=2;for(;a.has(s);)s=`${t.name} (copie ${l})`,l++;const i=(await J.post("/api/configuratoare",{name:s,description:t.description||""})).data.configurator.id;Array.isArray(t.fields)&&t.fields.length&&await J.put(`/api/configuratoare/${i}`,{fields:t.fields}),await Ee(),E(`Duplicat: „${s}" ✓`)}catch(a){E(a.response?.data?.error||"Eroare la duplicare.")}finally{oe(null)}}async function ua(t){if(C===t.id){const s=JSON.stringify(t.fields??[],null,2);if(ge.current&&ge.current!==s&&await Ct({title:"Ai modificări în acest configurator",msg:"Le salvezi (rescrie pe server) sau le lași deoparte? Dacă renunți, rămâne ce e pe server — nu pierzi datele salvate.",okText:"Salvează modificările",cancelText:"Nu salva",tone:"danger",icon:"💾"}))try{await X(ge.current)}catch{}w(null),R(""),M("");return}let a=t;try{const l=(await J.get("/api/configuratoare")).data.configuratoare||[];S(l);const c=l.find(i=>i.id===t.id);c&&(a=c)}catch{}w(t.id),R(JSON.stringify(a.fields??[],null,2)),M(""),f(!1),O(null),setTimeout(()=>H.current?.scrollIntoView({behavior:"smooth",block:"nearest"}),80)}function pa(t){R(t),M("");try{JSON.parse(t)}catch{M("JSON invalid — verifică sintaxa.")}}async function X(t,a=!1,s=null){let l;try{l=JSON.parse(t)}catch{M("JSON invalid.");return}if(Array.isArray(l)){u(!0),M("");try{const c={fields:l};s&&s.length&&(c.renames=s);const i=await J.put(`/api/configuratoare/${C}`,c);S(m=>m.map(h=>h.id===C?i.data.configurator:h)),a||E(s&&s.length?"Salvat ✓ (redenumiri propagate la produse)":"Salvat ✓")}catch(c){const i=c.response?.status===401?"⚠️ Sesiune expirată — reloghează-te (logout/login). Modificarea NU s-a salvat!":c.response?.data?.error||"⚠️ Eroare la salvare — modificarea NU s-a salvat pe server!";M(i),E(i,6e3)}finally{u(!1)}}}async function ga(){let t;try{t=JSON.parse(le)}catch{M("JSON invalid — nu se poate salva.");return}if(!Array.isArray(t)){M("Structura trebuie să fie un array [ ... ]");return}await X(le)}const Ue=$.find(t=>t.id===C);function yt(){te(St),v(""),fe.reset(),K("create")}function ma(t){te({name:t.name,description:t.description||""}),v(""),fe.reset(),K({type:"edit",id:t.id})}async function ha(){if(!G.name.trim()){v("Numele este obligatoriu.");return}ue(!0),v("");try{if(Q==="create"){const t=await J.post("/api/configuratoare",G);S(a=>[...a,t.data.configurator]),E(`Configuratorul „${t.data.configurator.name}" a fost adăugat.`)}else{const t=await J.put(`/api/configuratoare/${Q.id}`,G);S(a=>a.map(s=>s.id===Q.id?t.data.configurator:s)),E("Modificări salvate.")}K(null)}catch(t){v(t.response?.data?.error||"Eroare la salvare.")}finally{ue(!1)}}async function fa(){try{await J.delete(`/api/configuratoare/${_.id}`),S(t=>t.filter(a=>a.id!==_.id)),C===_.id&&w(null),E(`Configuratorul „${_.name}" a fost șters.`)}catch(t){E(t.response?.data?.error||"Eroare la ștergere.")}finally{ae(null)}}function xa(t){const a=[t.name,t.description],s=c=>(c||[]).forEach(i=>{const m=typeof i=="object"?i.value:i;a.push(m),typeof i=="object"&&Array.isArray(i.children)&&l(i.children)}),l=c=>(c||[]).forEach(i=>{a.push(i.label,i.placeholder,i.content),s(i.options),Array.isArray(i.children)&&l(i.children)});return l(t.fields),He(a.filter(Boolean).join(" "))}const Je=He(T),jt=Je.length<2?$:(()=>{const t=$.filter(a=>He(a.name).includes(Je));return t.length?t:$.filter(a=>xa(a).includes(Je))})(),Ke=(()=>{if(!P?.key)return jt;const t=P.dir==="desc"?-1:1,a=s=>{switch(P.key){case"id":return s.id;case"name":return(s.name||"").toLowerCase();case"description":return(s.description||"").toLowerCase();case"fields":return s.fields?.length??0;default:return 0}};return[...jt].sort((s,l)=>{const c=a(s),i=a(l);return c<i?-t:c>i?t:0})})(),Fe=t=>he(a=>a?.key===t?a.dir==="asc"?{key:t,dir:"desc"}:null:{key:t,dir:"asc"}),Le=t=>P?.key===t?P.dir==="asc"?" ▲":" ▼":"",ba=!!Je||!!P?.key,va=()=>{N(""),he(null)};if(p.useEffect(()=>{try{localStorage.setItem("cfg_list_search",T)}catch{}},[T]),p.useEffect(()=>{try{P?localStorage.setItem("cfg_list_sort",JSON.stringify(P)):localStorage.removeItem("cfg_list_sort")}catch{}},[P]),ee)return e.jsx("div",{className:"cfg-loading",children:"Se încarcă..."});function ya(){return!C||!Ue?null:e.jsx("div",{className:"cfg-overlay cfg-editor-overlay",children:e.jsxs("div",{className:"cfg-editor-panel cfg-editor-panel--modal",ref:H,children:[e.jsxs("div",{className:"cfg-editor-header",children:[e.jsxs("div",{className:"cfg-editor-title",children:[e.jsx("span",{className:"cfg-editor-icon",children:"{ }"}),e.jsxs("span",{children:["Editor — ",e.jsx("strong",{children:Ue.name})]})]}),e.jsxs("div",{className:"cfg-editor-header-actions",children:[e.jsx("button",{className:`cfg
2-preview-btn ${D==="desktop"?"cfg-preview-btn--active":""}`,onClick:()=>O(t=>t==="desktop"?null:"desktop"),children:"🖥 Desktop"}),e.jsx("button",{className:`cfg-preview-btn ${D==="mobile"?"cfg-preview-btn--active":""}`,onClick:()=>O(t=>t==="mobile"?null:"mobile"),children:"📱 Mobil"}),x==="json"&&e.jsx("button",{className:"cfg-btn-eye",onClick:()=>f(t=>!t),title:g?"Ascunde JSON":"Arată JSON",children:g?e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",width:"15",height:"15",children:[e.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]}):e.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",width:"15",height:"15",children:[e.jsx("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94"}),e.jsx("path",{d:"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19"}),e.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})}),e.jsx("button",{className:"cfg-editor-close",onClick:()=>{w(null),R(""),M(""),O(null)},children:"✕ Închide"})]})]}),e.jsxs("div",{className:"cfg-editor-tabs",children:[e.jsx("button",{className:`cfg-tab ${x==="atribute"?"cfg-tab--active":""}`,onClick:()=>z("atribute"),children:"Atribute"}),e.jsx("button",{className:`cfg-tab ${x==="json"?"cfg-tab--active":""}`,onClick:()=>z("json"),children:"JSON"})]}),x==="atribute"&&(()=>{const t=I(),s=t.some(l=>l.type==="set-toggle")?"per inel":"per produs";return e.jsxs("div",{className:"cfg-attr-panel",children:[e.jsxs("div",{className:"cfg-attr-toolbar",children:[e.jsxs("span",{className:"cfg-editor-info",children:[t.length," atribute"]}),e.jsx("button",{className:"cfg-btn-add-attr",onClick:Ft,children:"+ Atribut nou"}),L&&e.jsxs("button",{className:"cfg-btn-add-attr",style:{background:"#2a4a2a",borderColor:"#3a6a3a"},onClick:ta,title:`Adaugă în acest configurator atributul copiat: „${L.label||L.key}" (gata făcut, cu opțiuni/sub-atribute)`,children:["📋 Lipește atribut copiat ",e.jsxs("small",{style:{opacity:.7,fontWeight:400},children:["(",(L.label||L.key||"").slice(0,20),")"]})]}),e.jsx("button",{className:`ro-toggle ${ce?"ro-toggle--active":""}`,onClick:()=>ot(l=>!l),title:"Reordonează atributele",children:"⇅"})]}),t.length===0?e.jsx("div",{className:"cfg-attr-empty",children:'Niciun atribut. Apasă „+ Atribut nou".'}):e.jsxs("table",{className:"cfg-attr-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Nume"}),e.jsx("th",{children:"Cheie"}),e.jsx("th",{children:"Tip"}),e.jsx("th",{children:"Scope"}),e.jsx("th",{children:"Req"}),e.jsx("th",{})]})}),e.jsx("tbody",{children:t.map((l,c)=>e.jsxs("tr",{className:ce?"ro-active-row":"",children:[e.jsxs("td",{className:"cfg-attr-label",children:[l.type!=="set-toggle"&&e.jsx("button",{className:`cfg-active-toggle ${l.active===!1?"cfg-active-toggle--off":""}`,title:l.active===!1?"Inactiv — click pentru activare":"Activ — click pentru dezactivare (ascuns temporar)",onClick:()=>Xt(c),children:l.active===!1?"○":"●"}),e.jsx("span",{style:l.active===!1?{opacity:.45,textDecoration:"line-through"}:void 0,children:l.label}),l.active===!1&&e.jsx("span",{className:"cfg-badge-inactiv",children:"inactiv"}),l.complex&&e.jsx("span",{className:"cfg-badge-complex",title:"Atribut complex (cu sub-atribute)",children:"🔧 complex"})]}),e.jsx("td",{children:e.jsx("code",{className:"cfg-attr-key",children:l.key})}),e.jsx("td",{children:e.jsx("span",{className:"cfg-attr-type",children:l.type})}),e.jsx("td",{className:"cfg-attr-scope",children:l.type==="set-toggle"?"—":l.perItem?s:"global"}),e.jsx("td",{className:"cfg-attr-req",children:l.type!=="set-toggle"&&e.jsx("button",{className:`cfg-req-toggle ${l.required?"cfg-req-toggle--on":"cfg-req-toggle--off"}`,title:l.required?"Obligatoriu — click pentru opțional":"Opțional — click pentru obligatoriu",onClick:async()=>{const i=I().map((h,n)=>n===c?{...h,required:!h.required}:h),m=JSON.stringify(i,null,2);R(m),await X(m)},children:l.required?"Obligatoriu":"Opțional"})}),e.jsx("td",{className:"cfg-attr-actions",children:l.type!=="set-toggle"&&e.jsxs(e.Fragment,{children:[(l.type==="select"||l.type==="icons-h"||l.type==="icons-sm"||l.type==="icons-v"||l.type==="checkbox")&&e.jsxs("button",{className:"cfg-btn-opts",onClick:()=>Pt(c),children:["Opțiuni ",l.options?.length?`(${l.options.length})`:"(0)"]}),(l.type==="text"||l.type==="textarea")&&l.complex&&e.jsxs("button",{className:"cfg-btn-opts",onClick:()=>Tt(c),children:["🌿 Sub-atribute ",l.children?.length?`(${l.children.length})`:"(0)"]}),e.jsx("button",{className:"cfg-btn-dup",onClick:()=>Zt(c),title:"Duplică atributul întreg (cu opțiuni/sub-atribute) — apoi redenumești",children:"⎘ Duplică"}),e.jsx("button",{className:"cfg-btn-dup",onClick:()=>ea(c),title:"Copiază atributul (cu tot) ca să-l lipești în ALT configurator",children:"📋 Copiază"}),e.jsx("button",{className:"cfg-btn-edit",onClick:()=>Lt(c),children:"Editează"}),e.jsx("button",{className:"cfg-btn-del",onClick:()=>ye(c),children:"Șterge"}),ce&&e.jsxs("div",{className:"ro-arrows",children:[e.jsx("button",{className:"ro-arrow",onClick:()=>vt(c,-1),disabled:c===0||t[c-1]?.type==="set-toggle",title:"Mută sus",children:"▲"}),e.jsx("button",{className:"ro-arrow",onClick:()=>vt(c,1),disabled:c===t.length-1,title:"Mută jos",children:"▼"})]})]})})]},l.key))})]})]})})(),x==="json"&&g&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"cfg-editor-hint",children:["Array de obiecte. Fiecare câmp: ",e.jsx("code",{children:"key"}),", ",e.jsx("code",{children:"label"}),", ",e.jsx("code",{children:"type"}),", ",e.jsx("code",{children:"options"}),", ",e.jsx("code",{children:"required"}),"."]}),e.jsxs("div",{className:"cfg-editor-body",children:[e.jsx("textarea",{className:`cfg
2-editor-textarea ${Y?"cfg-editor-textarea--error":""}`,value:le,onChange:t=>pa(t.target.value),spellCheck:!1,rows:20}),Y&&e.jsx("div",{className:"cfg-editor-error",children:Y})]})]}),e.jsxs("div",{className:"cfg-editor-footer",children:[e.jsxs("span",{className:"cfg-editor-info",children:[Ue.fields?.length??0," atribute salvate"]}),e.jsx("button",{className:"cfg-btn-save",onClick:ga,disabled:r||!!Y,children:r?"Se salvează...":"↑ Salvează"})]}),D&&e.jsxs("div",{className:"cfg-preview-panel",children:[e.jsxs("div",{className:"cfg-preview-header",children:[e.jsxs("span",{children:["Preview — ",D==="desktop"?"🖥 Desktop":"📱 Mobil"]}),e.jsx("span",{className:"cfg-preview-note",children:D==="mobile"?"max 430px":"min 900px"})]}),e.jsx("div",{className:`cfg-preview-viewport cfg-preview-viewport--${D}`,children:Ze?e.jsx(Ca,{fields:Ze,viewMode:D}):e.jsx("div",{className:"prev-empty",children:"JSON invalid."})})]})]})})}return e.jsxs("div",{className:"cfg-page",children:[e.jsxs("div",{className:"cfg-header",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"cfg-title",children:"Configuratoare"}),e.jsx("p",{className:"cfg-subtitle",children:"Template-uri de configurație atribuite produselor"})]}),e.jsxs("div",{style:{display:"flex",gap:"0.5rem"},children:[_e&&e.jsxs("label",{className:"cfg-btn-add",style:{background:"#2a3a4a",borderColor:"#3a5a7a",color:"#dce6f2",cursor:"pointer"},title:"Restaurează un configurator dintr-un fișier backup JSON",children:["⬆ Restaurează backup",e.jsx("input",{type:"file",accept:"application/json,.json",hidden:!0,onChange:t=>{const a=t.target.files?.[0];a&&ra(a),t.target.value=""}})]}),_e&&e.jsx("button",{className:"cfg-btn-add",onClick:yt,children:"+ Configurator nou"})]})]}),b&&e.jsx("div",{className:"cfg-flash",children:b}),At&&ka.createPortal(e.jsx("div",{className:"cfg-gallery-overlay",onClick:()=>Se(!1),children:e.jsxs("div",{className:"cfg-gallery-modal",onClick:t=>t.stopPropagation(),children:[e.jsxs("div",{className:"cfg-gallery-head",children:[e.jsxs("span",{children:["📁 Alege poză",lt?e.jsxs(e.Fragment,{children:[" pentru: ",e.jsx("strong",{style:{color:"#c9a84c"},children:lt})]}):" din galerie"]}),e.jsx("button",{className:"cfg-gallery-close",onClick:()=>Se(!1),children:"✕"})]}),e.jsx("input",{className:"cfg-gallery-search",placeholder:"Caută după nume…",value:Be,onChange:t=>at(t.target.value),autoFocus:!0}),e.jsxs("div",{className:"cfg-gallery-grid",children:[et.filter(t=>!Be||t.name.toLowerCase().includes(Be.toLowerCase())).map(t=>e.jsx("button",{className:"cfg-gallery-item",title:`${t.name} · ${(t.size/1024).toFixed(0)} KB`,onClick:()=>Ot(t.url),children:e.jsx("img",{src:t.url,alt:t.name,loading:"lazy"})},t.url)),et.length===0&&e.jsx("div",{className:"cfg-gallery-empty",children:"Nicio poză pe server încă."})]})]})}),document.body),$.length>0&&e.jsxs("div",{className:"cfg-search-bar",children:[e.jsx("input",{className:"cfg-search-input",type:"text",placeholder:"🔍 Caută configurator, atribut, opțiune, sub-categorie...",value:T,onChange:t=>N(t.target.value)}),T&&e.jsx("button",{className:"cfg-search-clear",onClick:()=>N(""),title:"Șterge căutarea",children:"×"}),ba&&e.jsx("button",{className:"cfg-filter-reset",onClick:va,title:"Anulează căutarea și sortarea",children:"↺ Anulează filtru"}),e.jsxs("span",{className:"cfg-search-count",children:[Ke.length,"/",$.length]})]}),$.length===0?e.jsxs("div",{className:"cfg-empty",children:["Niciun configurator. ",_e&&e.jsx("button",{className:"cfg-link",onClick:yt,children:"Adaugă primul."})]}):Ke.length===0?e.jsxs("div",{className:"cfg-empty",children:["Niciun configurator nu se potrivește cu „",T,'".']}):e.jsx("div",{className:"cfg-table-wrap",children:e.jsxs("table",{className:"cfg-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsxs("th",{className:"cfg-th-sort",onClick:()=>Fe("id"),title:"Sortează după #",children:["#",Le("id")]}),e.jsxs("th",{className:"cfg-th-sort",onClick:()=>Fe("name"),title:"Sortează după nume",children:["Nume",Le("name")]}),e.jsxs("th",{className:"cfg-th-sort",onClick:()=>Fe("description"),title:"Sortează după descriere",children:["Descriere",Le("description")]}),e.jsxs("th",{className:"cfg-th-sort",style:{textAlign:"center"},onClick:()=>Fe("fields"),title:"Sortează după nr. câmpuri",children:["Câmpuri",Le("fields")]}),e.jsx("th",{})]})}),e.jsx("tbody",{children:Ke.map(t=>e.jsx(kt.Fragment,{children:e.jsxs("tr",{className:C===t.id?"cfg-row-active":"",children:[e.jsx("td",{className:"cfg-id",children:t.id}),e.jsx("td",{className:"cfg-name",children:t.name}),e.jsx("td",{className:"cfg-desc",children:t.description||e.jsx("span",{className:"cfg-none",children:"—"})}),e.jsx("td",{className:"cfg-fields-count",children:t.fields?.length??0}),e.jsxs("td",{className:"cfg-actions",children:[e.jsxs("button",{className:`cfg
2-btn-editor ${C===t.id?"cfg-btn-editor--active":""}`,onClick:()=>ua(t),title:"Editor câmpuri JSON",children:["{ }"," ",C===t.id?"Închide":"Câmpuri"]}),_e&&e.jsx("button",{className:"cfg-btn-edit",onClick:()=>da(t),disabled:re===t.id,title:"Creează o copie identică (cu toate atributele)",children:re===t.id?"…":"⧉ Duplică"}),Re&&e.jsx("button",{className:"cfg-btn-edit",onClick:()=>ia(t),title:"Copiază atributele acestui template (ca să le lipești în altul)",children:"📋 Copiază"}),Re&&la&&e.jsx("button",{className:"cfg-btn-edit",onClick:()=>na(t),title:"Lipește atributele copiate (înlocuiește atributele acestui template)",children:"📥 Lipește"}),Re&&e.jsx("button",{className:"cfg-btn-edit",onClick:()=>ma(t),children:"Editează"}),e.jsx("button",{className:"cfg-btn-edit",onClick:()=>oa(t),title:"Salvează backup în modulul Template (de acolo îl restaurezi). Nu mai descarci fișier.",children:"💾 Backup"}),e.jsx("button",{className:"cfg-btn-edit",onClick:()=>ca(t),title:"(opțional) Descarcă și ca fișier JSON pe disc",style:{opacity:.7},children:"⬇"}),aa&&e.jsx("button",{className:"cfg-btn-del",onClick:()=>ae(t),children:"Șterge"})]})]})},t.id))})]})}),ya(),Oe!==null&&(()=>{const t=I()[Oe.attrIdx]||{},a=t.label||"",s=!!t.complex,l=(I()||[]).some(i=>i.qtyFromField===t.key),c=(I()||[]).find(i=>i.type==="set-toggle")?.items||[];return e.jsx("div",{className:"cfg-overlay",children:e.jsxs("div",{className:"cfg-modal cfg-modal-opts",children:[e.jsxs("div",{className:"cfg-modal-header",children:[e.jsxs("h2",{children:["Opțiuni — ",a]}),e.jsx("button",{className:"cfg-modal-close",onClick:je.tryClose,children:"✕"})]}),e.jsxs("div",{className:"cfg-modal-body",children:[dt&&e.jsx("div",{className:"cfg-error",children:dt}),ne&&e.jsxs("div",{className:"cfg-opt-default-info",children:["★ Standard curent: ",e.jsx("strong",{children:ne}),e.jsx("button",{className:"cfg-opt-clear-default",onClick:()=>ze(null),children:"× Elimină"})]}),e.jsxs("div",{className:"cfg-opt-add cfg-opt-add--top",children:[e.jsxs("div",{className:"cfg-opt-add-row",children:[e.jsx("input",{className:"cfg-opt-input",placeholder:"Adaugă opțiune nouă (ex: Diamant negru, 14K, 4 mm...)",value:Te,onChange:i=>Ve(i.target.value),onKeyDown:i=>i.key==="Enter"&&ht()}),e.jsx("button",{className:"cfg-btn-add-attr",onClick:ht,children:"+ Adaugă"})]}),e.jsx("span",{className:"cfg-field-hint",children:"Prețul îl pui direct pe fiecare rând din listă."})]}),e.jsxs("div",{className:"cfg-opts-list",children:[e.jsxs("div",{className:"cfg-opts-header",children:[e.jsx("span",{style:{flex:1},children:"Valoare"}),e.jsx("span",{style:{width:28},children:"Std"}),e.jsx("span",{style:{width:80},children:"Preț +"}),e.jsx("span",{style:{width:46},children:"lei / %"}),e.jsxs("span",{style:{width:90},children:[e.jsx("button",{className:`ro-toggle ${ce?"ro-toggle--active":""}`,onClick:()=>ot(i=>!i),style:{fontSize:"0.72rem",padding:"0.15rem 0.4rem"},children:e.jsx("span",{className:"ro-toggle-icon",children:"⇅"})})," ","Șt."]})]}),U.length===0&&e.jsx("div",{className:"cfg-attr-empty",children:"Nicio opțiune. Adaugă mai jos."}),U.map((i,m)=>e.jsxs(kt.Fragment,{children:[e.jsxs("div",{className:`cfg-opt-row ${ne===i.value?"cfg-opt-row--default":""}${ce?" ro-active-row":""}${i.active===!1?" cfg-opt-row--inactive":""}`,children:[e.jsx("button",{type:"button",className:`cfg-active-toggle ${i.active===!1?"cfg-active-toggle--off":""}`,title:i.active===!1?"Inactiv — click pentru activare":"Activ — click pentru dezactivare",onClick:()=>V(h=>h.map((n,j)=>j===m?{...n,active:n.active===!1?void 0:!1}:n)),children:i.active===!1?"○":"●"}),e.jsxs("div",{className:"cfg-opt-valuewrap",children:[e.jsx("input",{className:"cfg-opt-value-edit",value:i.value,onChange:h=>{const n=h.target.value;ne===i.value&&ze(n),V(j=>j.map((k,Z)=>Z===m?{...k,value:n}:k))}}),l&&!/\d/.test(String(i.value||""))&&!/f[ăa]r[ăa]/i.test(String(i.value||""))&&(c.length>=2?e.jsxs("div",{className:"cfg-opt-qtybyitem",title:"Numărul vine din CURBĂ (Setări → Preț Pietre → Nr. pietre / măsură), după mărimea aleasă. Aici e doar afișare (fallback) — corecțiile le faci în tabelul-curbă, nu aici.",children:[c.map(h=>e.jsxs("label",{className:"cfg-opt-qtyitem",children:[e.jsx("span",{className:"cfg-opt-qtyitem-lbl",children:(h.label||h.key).slice(0,4)}),e.jsx("input",{className:"cfg-opt-price-input cfg-opt-qtyitem-input cfg-opt-qtyitem-input--ro",type:"number",min:"0",readOnly:!0,tabIndex:-1,value:i.qtyByItem&&i.qtyByItem[h.key]!=null?i.qtyByItem[h.key]:""})]},h.key)),e.jsx("span",{className:"cfg-opt-qty-lock",title:"Numărul e dat de curbă din Preț Pietre; corecțiile acolo.",children:"🔒 curbă"})]}):e.jsx("input",{className:"cfg-opt-price-input cfg-opt-qtyitem-input",type:"number",min:"0",placeholder:"nr.",title:"Număr ascuns de bucăți — la opțiunile fără cifră în text (ex: Full). La cele cu cifră se ia din text.",value:i.qty??"",onChange:h=>{const n=h.target.value===""?void 0:parseInt(h.target.value,10)||0;V(j=>j.map((k,Z)=>Z===m?{...k,qty:n}:k))}}))]}),e.jsxs("label",{className:"cfg-opt-icon",title:i.image?"Schimbă iconița":"Încarcă iconiță",children:[Et===m?e.jsx("span",{className:"cfg-opt-icon-load",children:"…"}):i.image?e.jsx("img",{src:i.image,alt:"",className:"cfg-opt-icon-img"}):e.jsx("span",{className:"cfg-opt-icon-add",children:"+"}),e.jsx("input",{type:"file",accept:"image/*",hidden:!0,onChange:h=>{const n=h.target.files?.[0];n&&Mt(m,n),h.target.value=""}})]}),e.jsx("button",{className:"cfg-opt-gallery",title:"Alege din galerie (refolosește o poză existentă, fără upload nou)",onClick:()=>Ae(h=>V(n=>n.map((j,k)=>k===m?{...j,image:h}
2:j)),i.value),children:"📁"}),i.image&&e.jsx("button",{className:"cfg-opt-icon-del",title:"Șterge iconița",onClick:()=>Vt(m),children:"×"}),e.jsx("button",{className:`cfg-opt-star ${ne===i.value?"cfg-opt-star--on":""}`,title:ne===i.value?"Standard (click pentru eliminare)":"Setează ca standard",onClick:()=>ze(ne===i.value?null:i.value),children:ne===i.value?"★":"☆"}),e.jsx("input",{className:"cfg-opt-price-input",type:"text",inputMode:"decimal",placeholder:"0",title:"Poți pune minus pentru reducere (ex: -2000)",value:i.price===0?"":i.price,onChange:h=>{const n=h.target.value.replace(/[^0-9.\-]/g,""),j=n===""?0:n==="-"?"-":parseFloat(n)||(n.endsWith(".")?n:0);V(k=>k.map((Z,be)=>be===m?{...Z,price:j}:Z))}}),e.jsx("button",{className:`cfg-opt-type-btn ${i.priceType==="percent"?"cfg-opt-type-btn--pct":""}`,title:i.priceType==="percent"?"Procent din prețul de bază":"Preț fix în lei",onClick:()=>V(h=>h.map((n,j)=>j===m?{...n,priceType:n.priceType==="percent"?"fixed":"percent"}:n)),children:i.priceType==="percent"?"%":"lei"}),e.jsxs("div",{className:"cfg-opt-btns",children:[s&&e.jsxs("button",{className:`cfg-opt-childbtn ${i.children?.length?"cfg-opt-childbtn--on":""}`,title:"Sub-atribute pentru această opțiune (atribut complex)",onClick:()=>_t(ut===m?null:m),children:["🌿 ",i.children?.length||"+"]}),/^full\b/i.test(String(i.value||"").trim())?e.jsx("button",{className:"cfg-btn-del cfg-btn-del--locked",type:"button",title:"Nu se poate șterge — Full pietre face parte din curba de nr. pietre.",onClick:()=>ie("Full pietre nu se poate șterge — face parte din curba de nr. pietre."),children:"×"}):e.jsx("button",{className:"cfg-btn-del",onClick:()=>Yt(m),children:"×"}),ce&&e.jsxs("div",{className:"ro-arrows",children:[e.jsx("button",{className:"ro-arrow",onClick:()=>bt(m,-1),disabled:m===0,children:"▲"}),e.jsx("button",{className:"ro-arrow",onClick:()=>bt(m,1),disabled:m===U.length-1,children:"▼"})]})]})]}),s&&ut===m&&e.jsxs("div",{className:"cfg-opt-children",children:[e.jsxs("div",{className:"cfg-opt-children-title",children:["Sub-atribute când se alege „",i.value,'"']}),e.jsx(Xe,{value:i.children||[],reorderMode:ce,openGallery:Ae,onChange:h=>V(n=>n.map((j,k)=>k===m?{...j,children:h}:j))})]})]},m))]}),e.jsxs("div",{className:"cfg-opt-clip",children:[e.jsxs("button",{className:"cfg-opt-clip-btn",disabled:U.length===0,onClick:Wt,title:"Copiază aceste opțiuni (cu preț + iconițe) ca să le lipești în alt atribut",children:["📋 Copiază opțiunile (",U.length,")"]}),e.jsxs("button",{className:"cfg-opt-clip-btn",onClick:Qt,title:"Lipește opțiunile copiate anterior (din orice atribut sau sub-atribut)",children:["📥 Lipește",gt>0?` (${gt})`:""]})]})]}),e.jsx("div",{className:"cfg-modal-footer",children:je.isPending?e.jsx(Ye,{onStay:je.cancelClose,onExit:je.forceClose}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"cfg-btn-cancel",onClick:()=>$e(null),children:"Anulează"}),e.jsxs("button",{className:"cfg-btn-save",onClick:Ht,children:["Salvează ",U.length," opțiuni"]})]})})]})})})(),me&&e.jsx("div",{className:"cfg-overlay",children:e.jsxs("div",{className:"cfg-modal",children:[e.jsxs("div",{className:"cfg-modal-header",children:[e.jsx("h2",{children:me==="add"?"Atribut nou":"Editează atribut"}),e.jsx("button",{className:"cfg-modal-close",onClick:xe.tryClose,children:"✕"})]}),e.jsxs("div",{className:"cfg-modal-body",children:[nt&&e.jsx("div",{className:"cfg-error",children:nt}),e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Nume (label) ",e.jsx("span",{className:"cfg-req",children:"*"})]}),e.jsx("input",{value:o.label,autoFocus:!0,onChange:t=>qt(t.target.value),placeholder:"ex: Lățime, Culoare aur, Gravură text..."})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Iconiță atribut ",e.jsx("span",{className:"cfg-optional",children:"(opțional, apare lângă titlu)"})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[e.jsxs("label",{className:"cfg-opt-icon",title:o.image?"Schimbă iconița":"Încarcă iconiță",children:[Rt?e.jsx("span",{className:"cfg-opt-icon-load",children:"…"}):o.image?e.jsx("img",{src:o.image,alt:"",className:"cfg-opt-icon-img"}):e.jsx("span",{className:"cfg-opt-icon-add",children:"+"}),e.jsx("input",{type:"file",accept:"image/*",hidden:!0,onChange:t=>{const a=t.target.files?.[0];a&&Ut(a),t.target.value=""}})]}),e.jsx("button",{className:"cfg-opt-gallery",title:"Alege din galerie (refolosește o iconiță existentă, fără upload nou)",onClick:()=>Ae(t=>A(a=>({...a,image:t}
2)),o.label||"iconiță atribut"),children:"📁 Galerie"}),o.image&&e.jsx("button",{className:"cfg-opt-icon-del",title:"Șterge iconița",onClick:()=>A(t=>({...t,image:""})),children:"×"})]})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Cheie (key) ",e.jsx("span",{className:"cfg-req",children:"*"})]}),e.jsx("input",{value:o.key,className:"cfg-slug-input",onChange:t=>{De(!0),A(a=>({...a,key:t.target.value.toLowerCase().replace(/[^a-z0-9_]/g,"")}))},placeholder:"ex: latime, culoare_aur"}),e.jsx("span",{className:"cfg-field-hint",children:"Litere mici, cifre și _ (underscore). Unic per configurator."})]}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Tip ",e.jsx("span",{className:"cfg-req",children:"*"})]}),e.jsxs("select",{className:"cfg-attr-select",value:o.type,onChange:t=>A(a=>({...a,type:t.target.value})),children:[e.jsx("option",{value:"select",children:"select — dropdown"}),e.jsx("option",{value:"icons-h",children:"iconițe orizontale — chips pe rând (puține opțiuni)"}),e.jsx("option",{value:"icons-sm",children:"iconițe mici — grid compact 4/rând (multe opțiuni)"}),e.jsx("option",{value:"icons-v",children:"iconițe verticale — chips în coloană"}),e.jsx("option",{value:"text",children:"text — câmp liber"}),e.jsx("option",{value:"textarea",children:"text extins — casetă mare"}),e.jsx("option",{value:"checkbox",children:"checkbox — bifă"}),e.jsx("option",{value:"html",children:"html / bloc — poză, slider, conținut"})]})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsx("label",{children:"Scope"}),e.jsxs("select",{className:"cfg-attr-select",value:o.perItem?"perItem":"global",onChange:t=>A(a=>({...a,perItem:t.target.value==="perItem"})),children:[e.jsx("option",{value:"perItem",children:I().some(t=>t.type==="set-toggle")?"Per inel (damă/bărbat separat)":"Per produs (fiecare bucată separat)"}),e.jsx("option",{value:"global",children:"Global (o singură alegere)"})]})]})]}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Unitate ",e.jsx("span",{className:"cfg-optional",children:"(opțional)"})]}),e.jsx("input",{value:o.unit,placeholder:"ex: mm, kg",onChange:t=>A(a=>({...a,unit:t.target.value}))})]}),(o.type==="text"||o.type==="textarea")&&e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Max caractere ",e.jsx("span",{className:"cfg-optional",children:"(opțional)"})]}),e.jsx("input",{value:o.maxLength,type:"number",min:"1",max:"500",placeholder:"ex: 15",onChange:t=>A(a=>({...a,maxLength:t.target.value}))})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsx("label",{children:"Obligatoriu"}),e.jsxs("select",{className:"cfg-attr-select",value:o.required?"yes":"no",onChange:t=>A(a=>({...a,required:t.target.value==="yes"})),children:[e.jsx("option",{value:"yes",children:"Da"}),e.jsx("option",{value:"no",children:"Nu"})]})]}),["select","icons-h","icons-v"].includes(o.type)&&e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:['„✍ Altul — scriere liberă" ',e.jsx("span",{className:"cfg-optional",children:"(doar vânzător logat)"})]}),e.jsxs("select",{className:"cfg-attr-select",value:o.allowCustom?"yes":"no",onChange:t=>A(a=>({...a,allowCustom:t.target.value==="yes"})),children:[e.jsx("option",{value:"no",children:"Nu"}),e.jsx("option",{value:"yes",children:'Da — vânzătorul poate alege „Altul" și scrie o valoare proprie (markiză, oval 6×8, onyx…)'})]})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsx("label",{children:"Afișează badge (opțional/obligatoriu)"}),e.jsxs("select",{className:"cfg-attr-select",value:o.showBadge===!1?"no":o.showBadge==="icon"?"icon":"yes",onChange:t=>A(a=>({...a,showBadge:t.target.value==="yes"?!0:t.target.value==="no"?!1:"icon"})),children:[e.jsx("option",{value:"yes",children:'Da (text „+ adaugă opțional")'}),e.jsx("option",{value:"no",children:"Nu"}),e.jsx("option",{value:"icon",children:"Iconiță (în loc de text)"})]}),o.showBadge==="icon"&&e.jsxs("div",{className:"cfg-badge-ico-row",children:[e.jsxs("label",{className:"cfg-opt-icon",title:o.badgeIcon?"Schimbă iconița badge":"Iconiță badge",children:[Kt?e.jsx("span",{className:"cfg-opt-icon-load",children:"…"}):o.badgeIcon?e.jsx("img",{src:o.badgeIcon,alt:"",className:"cfg-opt-icon-img"}):e.jsx("span",{className:"cfg-opt-icon-add",children:"+"}),e.jsx("input",{type:"file",accept:"image/*",hidden:!0,onChange:t=>{const a=t.target.files?.[0];a&&Gt(a),t.target.value=""}})]}),o.badgeIcon&&e.jsx("button",{type:"button",className:"cfg-opt-icon-del",title:"Șterge iconița",onClick:()=>A(t=>({...t,badgeIcon:""})),children:"×"}),e.jsx("span",{className:"cfg-field-hint",children:'Iconița apare în dreapta titlului, în loc de „+ adaugă opțional".'})]})]})]}),(o.type==="text"||o.type==="textarea")&&e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Text indicativ Ã
2®n casetă ",e.jsx("span",{className:"cfg-optional",children:"(ghost, opțional)"})]}),e.jsx("input",{value:o.placeholder,placeholder:"ex: Adaugă text gravură...",onChange:t=>A(a=>({...a,placeholder:t.target.value}))}),e.jsx("span",{className:"cfg-field-hint",children:"Textul gri afișat în casetă până scrie clientul — îi arată unde să scrie."})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["ℹ️ Notă / avertisment sub câmp ",e.jsx("span",{className:"cfg-optional",children:"(opțional)"})," ",e.jsx(We,{title:"Notă / avertisment sub câmp",children:"Apare ca o casetă de avertisment sub câmp, în front-end. Lasă gol = nimic. (Enter = rând nou.)"})]}),e.jsx("textarea",{value:o.infoNote,rows:2,placeholder:"ex: INFO! Dacă personalizați produsul, nu se mai poate returna.",onChange:t=>A(a=>({...a,infoNote:t.target.value}))})]}),o.type==="checkbox"&&e.jsx("span",{className:"cfg-field-hint",style:{display:"block",marginTop:"-0.3rem"},children:'💡 Prețul se pune pe fiecare opțiune din „Opțiuni" (ex: snur roșu, împletit). Fără opțiuni = bifă simplă da/nu.'}),["select","icons-h","icons-v"].includes(o.type)&&e.jsxs("label",{className:"cfg-complex-toggle",children:[e.jsx("input",{type:"checkbox",checked:!!o.complex,onChange:t=>A(a=>({...a,complex:t.target.checked}))}),e.jsxs("span",{children:[e.jsx("strong",{children:"🔧 Atribut complex"})," — fiecare opțiune poate avea sub-atribute proprii (recursiv) + reguli/condiții. Lasă debifat pentru un atribut simplu."]})]}),["text","textarea"].includes(o.type)&&e.jsxs("label",{className:"cfg-complex-toggle",children:[e.jsx("input",{type:"checkbox",checked:!!o.complex,onChange:t=>A(a=>({...a,complex:t.target.checked,childrenAfterText:t.target.checked?!0:a.childrenAfterText}))}),e.jsxs("span",{children:[e.jsx("strong",{children:"🔧 Atribut complex"})," — pe lângă câmpul de text, atributul poate avea sub-atribute proprii (ex. gravură: mesaj + font + simbol)."]})]}),["text","textarea"].includes(o.type)&&o.complex&&e.jsxs("label",{className:"cfg-complex-toggle",children:[e.jsx("input",{type:"checkbox",checked:!!o.childrenAfterText,onChange:t=>A(a=>({...a,childrenAfterText:t.target.checked}))}),e.jsxs("span",{children:[e.jsx("strong",{children:"✍️ Sub-atributele apar doar după ce se scrie text"})," — ex: simboluri/zodie/font apar abia după ce clientul scrie gravura. Cât timp textul e gol, sunt ascunse (și nu intră în preț)."]})]}),e.jsxs("div",{className:"cfg-cond-head",children:["🔗 ",e.jsx("strong",{children:"Condiții de afișare"})," ",e.jsx("span",{className:"cfg-cond-opt",children:"(opțional)"})," ",e.jsx(We,{title:"Condiții de afișare",children:"Atributul apare în produs DOAR dacă atributul ales are una din valorile bifate. Lasă gol = apare mereu. Ex: pietre laterale doar dacă piatra centrală = Alb sau Rubin."})]}),(()=>{const t=c=>String(typeof c=="object"&&c?c.value??"":c),a=I().filter(c=>c.key&&c.key!==o.key&&(c.type==="select"||c.type==="icons-h"||c.type==="icons-v"||c.type==="checkbox")&&(c.options||[]).length),s=o.conditions||[],l=c=>A(i=>({...i,conditions:c}));return e.jsxs("div",{className:"cfg-cond-box",children:[s.length===0&&e.jsx("div",{className:"cfg-cond-empty",children:"Nicio condiție. Adaugă una mai jos."}),s.map((c,i)=>{const h=(a.find(n=>n.key===c.field)?.options||[]).map(t);return e.jsxs("div",{className:"cfg-cond-row",children:[e.jsx("span",{className:"cfg-cond-lbl",children:"Arată doar dacă"}),e.jsxs("select",{className:"cfg-cond-sel",value:c.field||"",onChange:n=>l(s.map((j,k)=>k===i?{field:n.target.value,values:[]}:j)),children:[e.jsx("option",{value:"",children:"— alege atribut —"}),a.map(n=>e.jsx("option",{value:n.key,children:n.label},n.key))]}),e.jsx("span",{className:"cfg-cond-lbl",children:"= una din:"}),e.jsxs("div",{className:"cfg-cond-vals",children:[h.length===0&&e.jsx("span",{className:"cfg-cond-empty",children:"(alege întâi atributul)"}),h.map(n=>{const j=(c.values||[]).map(String).includes(n);return e.jsxs("label",{className:`cfg-cond-chip${j?" cfg-cond-chip--on":""}`,children:[e.jsx("input",{type:"checkbox",checked:j,onChange:()=>l(s.map((k,Z)=>Z===i?{...k,values:j?(k.values||[]).filter(be=>String(be)!==n):[...k.values||[],n]}:k))}),n]},n)})]}),e.jsx("button",{className:"cfg-cond-del",onClick:()=>l(s.filter((n,j)=>j!==i)),children:"×"})]},i)}),e.jsx("button",{className:"cfg-cond-add",onClick:()=>l([...s,{field:"",values:[]}]),children:"+ Adaugă condiție"})]})})()]}),e.jsx("div",{className:"cfg-modal-footer",children:xe.isPending?e.jsx(Ye,{onStay:xe.cancelClose,onExit:xe.forceClose}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"cfg-btn-cancel",onClick:()=>ve(null),children:"Anulează"}),e.jsx("button",{className:"cfg-btn-save",onClick:Bt,children:me==="add"?"Adaugă":"Salvează"})]})})]})}),Me!==null&&(()=>{const t=I()[Me.attrIdx]||{};return e.jsx("div",{className:"cfg-overlay",children:e.jsxs("div",{className:"cfg-modal cfg-modal-sub",children:[e.jsxs("div",{className:"cfg-modal-header",children:[e.jsxs("h2",{children:["Sub-atribute — ",t.label]}),e.jsx("button",{className:"cfg-modal-close",onClick:()=>Ie(null),children:"✕"})]}),e.jsxs("div",{className:"cfg-modal-body",children:[e.jsxs("p",{className:"cfg-field-hint",style:{marginBottom:"0.6rem"},children:["Pe lângă câmpul de text „",t.label,'", aceste sub-atribute apar mereu dedesubt (ex. font, simbol, zodie).']}),e.jsx(Xe,{value:ct,onChange:rt,reorderMode:ce,openGallery:Ae})]}),e.jsxs("div",{className:"cfg-modal-footer",children:[e.jsx("button",{className:"cfg-btn-cancel",onClick:()=>Ie(null),children:"Anulează"}),e.jsx("button",{className:"cfg-btn-save",onClick:zt,disabled:r,children:r?"Se salvează...":"↑ Salvează"})]})]})})})(),Pe!==null&&e.jsx("div",{className:"cfg-overlay",onClick:t=>t.target===t.currentTarget&&ye(null),children:e.jsxs("div",{className:"cfg-modal cfg-modal-sm",children:[e.jsxs("div",{className:"cfg-modal-header",children:[e.jsx("h2",{children:"Șterge atribut"}),e.jsx("button",{className:"cfg-modal-close",onClick:()=>ye(null),children:"✕"})]}),e.jsx("div",{className:"cfg-modal-body",children:e.jsxs("p",{children:["Ștergi atributul ",e.jsxs("strong",{children:["„",I()[Pe]?.label,'"']}),"? ",e.jsx(We,{title:"Ce se pierde",children:"Opțiunile și setările acestui atribut vor fi pierdute. Produsele care îl folosesc nu vor mai afișa acest câmp."})]})}),e.jsxs("div",{className:"cfg-modal-footer",children:[e.jsx("button",{className:"cfg-btn-cancel",onClick:()=>ye(null),children:"Anulează"}),e.jsx("button",{className:"cfg-btn-del",onClick:Dt,children:"Șterge"})]})]})}),Q&&e.jsx("div",{className:"cfg-overlay",children:e.jsxs("div",{className:"cfg-modal",children:[e.jsxs("div",{className:"cfg-modal-header",children:[e.jsx("h2",{children:Q==="create"?"Configurator nou":"Editează configuratorul"}),e.jsx("button",{className:"cfg-modal-close",onClick:fe.tryClose,children:"✕"})]}),e.jsxs("div",{className:"cfg-modal-body",children:[d&&e.jsx("div",{className:"cfg-error",children:d}),e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Nume ",e.jsx("span",{className:"cfg-req",children:"*"})]}),e.jsx("input",{value:G.name,onChange:t=>te(a=>({...a,name:t.target.value})),placeholder:"ex: Verighete, Inele de logodnă, Coliere...",autoFocus:!0})]}),e.jsxs("div",{className:"cfg-field",children:[e.jsxs("label",{children:["Descriere ",e.jsx("span",{className:"cfg-optional",children:"(opțional)"})]}),e.jsx("textarea",{value:G.description,onChange:t=>te(a=>({...a,description:t.target.value})),placeholder:"Scurtă descriere...",rows:3})]})]}),e.jsx("div",{className:"cfg-modal-footer",children:fe.isPending?e.jsx(Ye,{onStay:fe.cancelClose,onExit:fe.forceClose}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"cfg-btn-cancel",onClick:()=>K(null),children:"Anulează"}),e.jsx("button",{className:"cfg-btn-save",onClick:ha,disabled:q,children:q?"Se salvează...":Q==="create"?"Adaugă":"Salvează"})]})})]})}),_&&e.jsx("div",{className:"cfg-overlay",onClick:t=>t.target===t.currentTarget&&ae(null),children:e.jsxs("div",{className:"cfg-modal cfg-modal-sm",children:[e.jsxs("div",{className:"cfg-modal-header",children:[e.jsx("h2",{children:"Confirmare ștergere"}),e.jsx("button",{className:"cfg-modal-close",onClick:()=>ae(null),children:"✕"})]}),e.jsxs("div",{className:"cfg-modal-body",children:[e.jsxs("p",{children:["Ștergi configuratorul ",e.jsxs("strong",{children:["„",_.name,'"']}),"?"]}),e.jsx("p",{className:"cfg-warn",children:"Produsele care folosesc acest configurator nu vor mai avea configurație atribuită."})]}),e.jsxs("div",{className:"cfg-modal-footer",children:[e.jsx("button",{className:"cfg-btn-cancel",onClick:()=>ae(null),children:"Anulează"}),e.jsx("button",{className:"cfg-btn-del",onClick:fa,children:"Șterge definitiv"})]})]})})]})}export{$a as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.