@msbci/form-editor 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +15 -2
- package/dist/index.d.ts +15 -2
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -88,6 +88,12 @@ Uses the same `IMosobiTheme` system as `@msbci/form-renderer`:
|
|
|
88
88
|
<FormEditor theme={myTheme} dataSources={connectors} adapter={adapter} />
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
+
## What's new in v1.1.0
|
|
92
|
+
|
|
93
|
+
- `ConditionBuilder` gains an optional `rosterContext` prop. When provided, conditions are validated against the roster scope (variables in the same row, backward-jump detection, self-reference rules, circular dependencies) via `RosterConditionEngine` from `@msbci/form-core` v1.1.0. Errors are surfaced inline under the condition preview.
|
|
94
|
+
- `VariableProperties` auto-detects when a variable lives inside a roster and forwards the scope context to `ConditionBuilder`. No change required in host applications.
|
|
95
|
+
- Aligned with `@msbci/form-core` v1.1.0 (4 new variable types, extended `IFieldResponseMetadata`, `IFormRoster.collectionConfig`).
|
|
96
|
+
|
|
91
97
|
## License
|
|
92
98
|
|
|
93
99
|
Copyright (c) 2026 MOSOBI — All rights reserved.
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var eo=require('react'),zustand=require('zustand'),formCore=require('@msbci/form-core'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var eo__default=/*#__PURE__*/_interopDefault(eo);var Fe=50;function De(){return {id:"",code:"",name:"New Form",version:"1.0.0",isPublished:false,pages:[]}}var v=zustand.create((e,l)=>{function s(t){let a=l(),r={form:formCore.deepClone(a.form),description:t,timestamp:Date.now()},n=a.history.slice(0,a.historyIndex+1);n.push(r),n.length>Fe&&n.shift(),e({history:n,historyIndex:n.length-1});}function i(t,a){s(t);let r=l(),n=a(formCore.deepClone(r.form));e({form:n,isDirty:true});}return {form:De(),formTypes:[],selection:{type:"form"},view:"canvas",isDirty:false,isSaving:false,history:[],historyIndex:-1,adapter:null,setForm:t=>{e({form:formCore.deepClone(t),isDirty:false,history:[],historyIndex:-1,selection:{type:"form"}});},updateFormMeta:t=>{i("Update form metadata",a=>({...a,...t}));},addPage:t=>{i(`Add page "${t.name}"`,a=>({...a,pages:[...a.pages,t]}));},updatePage:(t,a)=>{i(`Update page "${t}"`,r=>({...r,pages:r.pages.map(n=>n.code===t?{...n,...a}:n)}));},removePage:t=>{i(`Remove page "${t}"`,r=>({...r,pages:r.pages.filter(n=>n.code!==t)}));let a=l();a.selection.type==="page"&&a.selection.pageCode===t&&e({selection:{type:"form"}});},reorderPages:t=>{i("Reorder pages",a=>{let r=new Map(a.pages.map(o=>[o.code,o])),n=t.map((o,d)=>{let f=r.get(o);return f?{...f,order:d}:void 0}).filter(o=>o!==void 0);return {...a,pages:n}});},addRoster:(t,a)=>{i(`Add roster "${a.name}" to page "${t}"`,r=>({...r,pages:r.pages.map(n=>n.code===t?{...n,rosters:[...n.rosters,a]}:n)}));},updateRoster:(t,a,r)=>{i(`Update roster "${a}"`,n=>({...n,pages:n.pages.map(o=>o.code===t?{...o,rosters:o.rosters.map(d=>d.code===a?{...d,...r}:d)}:o)}));},removeRoster:(t,a)=>{i(`Remove roster "${a}"`,r=>({...r,pages:r.pages.map(n=>n.code===t?{...n,rosters:n.rosters.filter(o=>o.code!==a)}:n)}));},addVariable:(t,a,r)=>{i(`Add variable "${a.name}"`,n=>({...n,pages:n.pages.map(o=>o.code!==t?o:r?{...o,rosters:o.rosters.map(d=>d.code===r?{...d,variables:[...d.variables,a]}:d)}:{...o,variables:[...o.variables,a]})}));},updateVariable:(t,a,r,n)=>{i(`Update variable "${a}"`,o=>({...o,pages:o.pages.map(d=>d.code!==t?d:n?{...d,rosters:d.rosters.map(f=>f.code===n?{...f,variables:f.variables.map(x=>x.code===a?{...x,...r}:x)}:f)}:{...d,variables:d.variables.map(f=>f.code===a?{...f,...r}:f)})}));},removeVariable:(t,a,r)=>{i(`Remove variable "${a}"`,n=>({...n,pages:n.pages.map(o=>o.code!==t?o:r?{...o,rosters:o.rosters.map(d=>d.code===r?{...d,variables:d.variables.filter(f=>f.code!==a)}:d)}:{...o,variables:o.variables.filter(d=>d.code!==a)})}));},moveVariable:(t,a,r,n,o,d)=>{i(`Move variable "${r}"`,f=>{let x,m=f.pages.map(b=>{if(b.code!==t)return b;if(o)return {...b,rosters:b.rosters.map(c=>{if(c.code!==o)return c;let S=c.variables.find(k=>k.code===r);return S&&(x={...S}),{...c,variables:c.variables.filter(k=>k.code!==r)}})};let p=b.variables.find(c=>c.code===r);return p&&(x={...p}),{...b,variables:b.variables.filter(c=>c.code!==r)}});if(!x)return f;x.order=n;let u=m.map(b=>{if(b.code!==a)return b;if(d)return {...b,rosters:b.rosters.map(c=>{if(c.code!==d)return c;let S=[...c.variables,x].sort((k,_)=>k.order-_.order);return {...c,variables:S}})};let p=[...b.variables,x].sort((c,S)=>c.order-S.order);return {...b,variables:p}});return {...f,pages:u}});},select:t=>e({selection:t}),clearSelection:()=>e({selection:{type:"form"}}),setView:t=>e({view:t}),undo:()=>{let{history:t,historyIndex:a,form:r}=l();if(!(a<0))if(a===t.length-1){let n={form:formCore.deepClone(r),description:"Current state",timestamp:Date.now()};e({form:formCore.deepClone(t[a].form),historyIndex:a-1,isDirty:true,history:[...t,n]});}else e({form:formCore.deepClone(t[a].form),historyIndex:a-1,isDirty:true});},redo:()=>{let{history:t,historyIndex:a}=l();if(a>=t.length-2)return;let r=a+2;r<t.length&&e({form:formCore.deepClone(t[r].form),historyIndex:r-1,isDirty:true});},canUndo:()=>l().historyIndex>=0,canRedo:()=>{let{history:t,historyIndex:a}=l();return a<t.length-2},addFormType:t=>{let a={...t,id:formCore.generateId()};e(r=>({formTypes:[...r.formTypes,a]}));},updateFormType:(t,a)=>{e(r=>({formTypes:r.formTypes.map(n=>n.id===t?{...n,...a}:n)}));},removeFormType:t=>{let a=l();if(a.form.formTypeId===t){let{formTypeId:r,...n}=a.form;e({form:{...n}});}e(r=>({formTypes:r.formTypes.filter(n=>n.id!==t)}));},setAdapter:t=>e({adapter:t}),save:async()=>{let{adapter:t,form:a}=l();if(t?.saveForm){e({isSaving:true});try{await t.saveForm(a),e({isDirty:!1});}finally{e({isSaving:false});}}},load:async t=>{let{adapter:a}=l();if(!a?.loadForm)return;let r=await a.loadForm(t);l().setForm(r);},exportJson:()=>formCore.serializeForm(l().form),importJson:t=>{let a=formCore.deserializeForm(t);l().setForm(a);}}});function fe({open:e,onClose:l}){let{formTypes:s,form:i,addFormType:t,updateFormType:a,removeFormType:r}=v(),[n,o]=eo.useState(""),[d,f]=eo.useState(""),[x,m]=eo.useState(null),[u,b]=eo.useState(""),[p,c]=eo.useState(null);if(!e)return null;let S=()=>{n.trim()&&(t({name:n.trim(),code:d.trim()||n.trim().toUpperCase().replace(/\s+/g,"_")}),o(""),f(""));},k=(g,Z)=>{m(g),b(Z);},_=()=>{x&&u.trim()&&a(x,{name:u.trim()}),m(null),b("");},T=g=>{i.formTypeId===g?c(g):r(g);},Q=()=>{p&&r(p),c(null);};return jsxRuntime.jsx("div",{role:"dialog","aria-modal":"true","aria-label":"Form types","data-testid":"form-types-dialog",onClick:l,style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.3)",zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"},children:jsxRuntime.jsxs("div",{onClick:g=>g.stopPropagation(),style:{backgroundColor:"#fff",borderRadius:"8px",maxWidth:"32rem",width:"100%",maxHeight:"80vh",overflow:"auto",boxShadow:"0 10px 25px rgba(0,0,0,0.2)",fontFamily:"system-ui, -apple-system, sans-serif",color:"#1e293b"},children:[jsxRuntime.jsxs("header",{style:{padding:"16px",borderBottom:"1px solid #e2e8f0",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[jsxRuntime.jsx("h3",{style:{fontSize:"16px",fontWeight:600,margin:0},children:"Form types"}),jsxRuntime.jsx("button",{type:"button",onClick:l,"aria-label":"Close","data-testid":"form-types-dialog-close-x",style:{background:"transparent",border:"none",fontSize:"18px",cursor:"pointer",color:"#64748b",padding:"4px 8px"},children:"\xD7"})]}),jsxRuntime.jsxs("section",{style:{padding:"16px"},children:[s.length===0&&jsxRuntime.jsx("div",{"data-testid":"form-types-empty",style:{fontSize:"13px",color:"#94a3b8",marginBottom:"12px"},children:"No form types yet. Add one below."}),jsxRuntime.jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"6px"},children:s.map(g=>{let Z=x===g.id,we=i.formTypeId===g.id,Ie=p===g.id;return jsxRuntime.jsxs("li",{"data-testid":`form-type-row-${g.id}`,style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:"1px solid #e2e8f0",borderRadius:"6px",backgroundColor:we?"#f1f5f9":"#fff"},children:[Z?jsxRuntime.jsx("input",{type:"text",value:u,autoFocus:true,"data-testid":`form-type-name-edit-${g.id}`,onChange:Y=>b(Y.target.value),onBlur:_,onKeyDown:Y=>{Y.key==="Enter"&&_(),Y.key==="Escape"&&(m(null),b(""));},style:{flex:1,padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}):jsxRuntime.jsx("span",{"data-testid":`form-type-name-${g.id}`,onClick:()=>k(g.id,g.name),style:{flex:1,fontSize:"13px",cursor:"pointer",padding:"4px 8px"},children:g.name}),jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#94a3b8",fontFamily:"monospace"},children:g.code}),jsxRuntime.jsx("button",{type:"button","aria-label":`Remove ${g.name}`,"data-testid":`form-type-remove-${g.id}`,onClick:()=>T(g.id),style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:"pointer",fontSize:"14px",lineHeight:1},children:"\xD7"}),Ie&&jsxRuntime.jsxs("div",{"data-testid":`form-type-confirm-${g.id}`,style:{flexBasis:"100%",fontSize:"12px",color:"#b91c1c",backgroundColor:"#fef2f2",padding:"6px 8px",borderRadius:"4px",display:"flex",alignItems:"center",gap:"8px"},children:[jsxRuntime.jsx("span",{style:{flex:1},children:"Ce type est utilis\xE9 par le formulaire courant. Confirmer la suppression ?"}),jsxRuntime.jsx("button",{type:"button","data-testid":`form-type-confirm-yes-${g.id}`,onClick:Q,style:{padding:"4px 8px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:"Supprimer"}),jsxRuntime.jsx("button",{type:"button","data-testid":`form-type-confirm-no-${g.id}`,onClick:()=>c(null),style:{padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:"Annuler"})]})]},g.id)})})]}),jsxRuntime.jsxs("section",{style:{padding:"12px 16px",borderTop:"1px solid #e2e8f0",display:"flex",alignItems:"center",gap:"8px",backgroundColor:"#f8fafc"},children:[jsxRuntime.jsx("input",{type:"text",value:n,"data-testid":"form-types-new-name",placeholder:"New type name",onChange:g=>o(g.target.value),onKeyDown:g=>{g.key==="Enter"&&S();},style:{flex:1,padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}),jsxRuntime.jsx("input",{type:"text",value:d,"data-testid":"form-types-new-code",placeholder:"CODE (auto)",onChange:g=>f(g.target.value),style:{width:"120px",padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none",fontFamily:"monospace"}}),jsxRuntime.jsx("button",{type:"button","data-testid":"form-types-add",onClick:S,disabled:n.trim()==="",style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:n.trim()===""?"#cbd5e1":"#2563eb",color:"#fff",fontSize:"13px",cursor:n.trim()===""?"not-allowed":"pointer"},children:"+ Ajouter"})]})]})})}function ee({onSave:e,onExport:l,onImport:s}){let{form:i,updateFormMeta:t,view:a,setView:r,isDirty:n,isSaving:o,canUndo:d,canRedo:f,undo:x,redo:m,save:u,addPage:b}=v(),[p,c]=eo.useState(false),S=async()=>{await u(),e?.();},k=()=>{let T=i.pages.length;b({id:`page-${Date.now()}`,code:`PAGE_${T+1}`,name:`Page ${T+1}`,order:T,isRepeatable:false,variables:[],rosters:[]});},_=[{view:"canvas",label:"Editor"},{view:"preview",label:"Preview"},{view:"json",label:"JSON"}];return jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"8px 16px",borderBottom:"1px solid #e2e8f0",backgroundColor:"#fff",gap:"8px"},children:[jsxRuntime.jsx("input",{type:"text",value:i.name,onChange:T=>t({name:T.target.value}),style:{border:"none",fontSize:"16px",fontWeight:600,color:"#1e293b",padding:"4px 8px",borderRadius:"4px",outline:"none",minWidth:"200px",backgroundColor:"transparent"},placeholder:"Form name"}),n&&jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#f59e0b",fontWeight:500},children:"Unsaved"}),jsxRuntime.jsx("div",{style:{flex:1}}),jsxRuntime.jsx(O,{onClick:k,label:"+ Page"}),jsxRuntime.jsx(O,{onClick:()=>c(true),label:"Types",title:"Manage form types"}),jsxRuntime.jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsxRuntime.jsx(O,{onClick:x,label:"\u21A9",disabled:!d(),title:"Undo"}),jsxRuntime.jsx(O,{onClick:m,label:"\u21AA",disabled:!f(),title:"Redo"}),jsxRuntime.jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsxRuntime.jsx("div",{style:{display:"flex",borderRadius:"6px",overflow:"hidden",border:"1px solid #e2e8f0"},children:_.map(T=>jsxRuntime.jsx("button",{type:"button",onClick:()=>r(T.view),style:{padding:"4px 12px",fontSize:"12px",fontWeight:500,border:"none",cursor:"pointer",backgroundColor:a===T.view?"#2563eb":"#fff",color:a===T.view?"#fff":"#64748b"},children:T.label},T.view))}),jsxRuntime.jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsxRuntime.jsx(O,{onClick:S,label:o?"Saving...":"Save",primary:true,disabled:o||!n}),l&&jsxRuntime.jsx(O,{onClick:l,label:"Export"}),s&&jsxRuntime.jsx(O,{onClick:s,label:"Import"}),jsxRuntime.jsx(fe,{open:p,onClose:()=>c(false)})]})}function O({onClick:e,label:l,primary:s,disabled:i,title:t}){return jsxRuntime.jsx("button",{type:"button",onClick:e,disabled:i,title:t,style:{padding:"6px 12px",borderRadius:"6px",border:s?"none":"1px solid #e2e8f0",backgroundColor:s?"#2563eb":"#fff",color:s?"#fff":"#334155",fontSize:"13px",fontWeight:500,cursor:i?"default":"pointer",opacity:i?.5:1},children:l})}var _e=[{label:"Text",items:[{type:"text",label:"Text",icon:"T"},{type:"textarea",label:"Text Area",icon:"\xB6"},{type:"number",label:"Number",icon:"#"},{type:"email",label:"Email",icon:"@"}]},{label:"Selection",items:[{type:"select",label:"Dropdown",icon:"\u25BC"},{type:"multiselect",label:"Multi Select",icon:"\u2611"},{type:"radio",label:"Radio",icon:"\u25C9"},{type:"checkbox",label:"Checkbox",icon:"\u2610"}]},{label:"Date & Time",items:[{type:"date",label:"Date",icon:"\u{1F4C5}"},{type:"datetime",label:"DateTime",icon:"\u{1F550}"},{type:"time",label:"Time",icon:"\u23F0"}]},{label:"Media",items:[{type:"file",label:"File",icon:"\u{1F4CE}"},{type:"image",label:"Image",icon:"\u{1F5BC}"},{type:"gps",label:"GPS",icon:"\u{1F4CD}"}]},{label:"Advanced",items:[{type:"rating",label:"Rating",icon:"\u2605"},{type:"calculated",label:"Calculated",icon:"fx"},{type:"hidden",label:"Hidden",icon:"\u{1F441}"},{type:"label",label:"Label",icon:"Aa"}]}];function oe(){let[e,l]=eo.useState(""),{form:s,selection:i,addVariable:t}=v(),a=i.type==="page"||i.type==="variable"||i.type==="roster"?i.pageCode:s.pages[0]?.code,r=(o,d)=>{if(!a)return;let f=s.pages.find(m=>m.code===a);if(!f)return;let x=`${o.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(a,{id:`var-${Date.now()}`,code:x,name:`New ${d}`,type:o,order:f.variables.length,isRequired:false,isReadonly:false,isHidden:false});},n=_e.map(o=>({...o,items:o.items.filter(d=>d.label.toLowerCase().includes(e.toLowerCase()))})).filter(o=>o.items.length>0);return jsxRuntime.jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsxRuntime.jsx("div",{style:{padding:"12px",borderBottom:"1px solid #e2e8f0"},children:jsxRuntime.jsx("input",{type:"text",placeholder:"Search fields...",value:e,onChange:o=>l(o.target.value),style:{width:"100%",padding:"6px 10px",border:"1px solid #e2e8f0",borderRadius:"6px",fontSize:"13px",outline:"none",boxSizing:"border-box"}})}),jsxRuntime.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"8px"},children:[!a&&jsxRuntime.jsx("div",{style:{padding:"12px",color:"#94a3b8",fontSize:"12px",textAlign:"center"},children:"Add a page first"}),n.map(o=>jsxRuntime.jsxs("div",{style:{marginBottom:"16px"},children:[jsxRuntime.jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#94a3b8",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"6px",padding:"0 4px"},children:o.label}),o.items.map(d=>jsxRuntime.jsxs("div",{onClick:()=>r(d.type,d.label),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:f=>{f.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:f=>{f.currentTarget.style.backgroundColor="transparent";},children:[jsxRuntime.jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:d.icon}),jsxRuntime.jsx("span",{children:d.label})]},d.type))]},o.label))]})]})}function We(e){let l=e.slice().sort((i,t)=>i.order-t.order),s=[];for(let i of l)i.startWithNewLine===false&&s.length>0?s[s.length-1].push(i):s.push([i]);return s}function re(){let{form:e}=v();return e.pages.length===0?jsxRuntime.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:'Click "+ Page" in the toolbar to get started'}):jsxRuntime.jsx("div",{style:{flex:1,overflowY:"auto",padding:"16px",backgroundColor:"#fff"},children:e.pages.slice().sort((l,s)=>l.order-s.order).map(l=>jsxRuntime.jsx(Be,{page:l},l.code))})}function Be({page:e}){let{selection:l,select:s,removePage:i,addRoster:t}=v(),a=l.type==="page"&&l.pageCode===e.code,r=n=>{n.stopPropagation();let o=`ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(e.code,{id:`roster-${Date.now()}`,code:o,name:"New Roster",rosterType:"collection",order:e.rosters.length,variables:[]});};return jsxRuntime.jsxs("div",{style:{marginBottom:"16px",border:`2px solid ${a?"#2563eb":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden"},children:[jsxRuntime.jsxs("div",{onClick:()=>s({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:a?"#eff6ff":"#f8fafc",borderBottom:"1px solid #e2e8f0",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsxRuntime.jsx("span",{style:{fontSize:"14px",fontWeight:600,color:"#1e293b"},children:e.name||"Unnamed Page"}),e.isRepeatable&&jsxRuntime.jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:"Repeatable"})]}),jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsxRuntime.jsxs("span",{style:{fontSize:"12px",color:"#94a3b8"},children:[e.variables.length," fields \xB7 ",e.rosters.length," rosters"]}),jsxRuntime.jsx("button",{onClick:n=>{n.stopPropagation(),i(e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px 4px"},children:"\xD7"})]})]}),jsxRuntime.jsxs("div",{style:{padding:"4px 0"},children:[We(e.variables).map((n,o)=>n.length===1?jsxRuntime.jsx(te,{variable:n[0],pageCode:e.code},n[0].code):jsxRuntime.jsx("div",{style:{display:"flex",gap:"2px",backgroundColor:"#f0f4ff",borderLeft:"2px solid #c7d2fe",margin:"1px 0"},children:n.map(d=>jsxRuntime.jsx("div",{style:{flex:d.colSpan?`0 0 ${d.colSpan/12*100}%`:"1 1 0%",minWidth:0},children:jsxRuntime.jsx(te,{variable:d,pageCode:e.code})},d.code))},`row-${o}`)),e.rosters.slice().sort((n,o)=>n.order-o.order).map(n=>jsxRuntime.jsx(Oe,{roster:n,pageCode:e.code},n.code)),e.variables.length===0&&e.rosters.length===0&&jsxRuntime.jsx("div",{style:{padding:"12px 14px",color:"#94a3b8",fontSize:"12px",fontStyle:"italic"},children:"Click a field type in the toolbox to add it here"})]}),jsxRuntime.jsx("div",{style:{padding:"6px 14px",borderTop:"1px solid #e2e8f0"},children:jsxRuntime.jsx("button",{onClick:r,style:{padding:"4px 10px",borderRadius:"4px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"11px",cursor:"pointer",fontWeight:500},children:"+ Add Roster"})})]})}function te({variable:e,pageCode:l,rosterCode:s}){let{selection:i,select:t,removeVariable:a}=v(),r=i.type==="variable"&&i.variableCode===e.code;return jsxRuntime.jsxs("div",{onClick:n=>{n.stopPropagation(),t({type:"variable",pageCode:l,variableCode:e.code,rosterCode:s});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",cursor:"pointer",backgroundColor:r?"#eff6ff":"transparent",borderLeft:r?"3px solid #2563eb":"3px solid transparent",fontSize:"13px"},children:[jsxRuntime.jsx("span",{style:{color:"#94a3b8",fontSize:"11px",width:"60px",flexShrink:0},children:e.type}),jsxRuntime.jsx("span",{style:{color:"#334155",flex:1},children:e.name||e.code}),e.isRequired&&jsxRuntime.jsx("span",{style:{color:"#ef4444",fontSize:"11px"},children:"*"}),e.conditions&&e.conditions.length>0&&jsxRuntime.jsx("span",{style:{color:"#f59e0b",fontSize:"11px"},children:"\u26A1"}),e.dataSourceId&&jsxRuntime.jsx("span",{style:{color:"#22c55e",fontSize:"11px"},children:"\u27F3"}),jsxRuntime.jsx("button",{onClick:n=>{n.stopPropagation(),a(l,e.code,s);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px",padding:"0 2px",opacity:.5},children:"\xD7"})]})}function Oe({roster:e,pageCode:l}){let{selection:s,select:i,removeRoster:t,addVariable:a}=v(),r=s.type==="roster"&&s.rosterCode===e.code,n=o=>{o.stopPropagation();let d=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;a(l,{id:`var-${Date.now()}`,code:d,name:"New field",type:"text",order:e.variables.length,isRequired:false,isReadonly:false,isHidden:false},e.code);};return jsxRuntime.jsxs("div",{style:{margin:"4px 8px",border:`1px solid ${r?"#2563eb":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden"},children:[jsxRuntime.jsxs("div",{onClick:o=>{o.stopPropagation(),i({type:"roster",pageCode:l,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:r?"#fef3c7":"#fffbeb",fontSize:"12px",fontWeight:600,color:"#92400e",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[jsxRuntime.jsxs("span",{children:["\u25A4 ",e.name]}),jsxRuntime.jsx("span",{style:{fontSize:"10px",padding:"1px 4px",borderRadius:"3px",backgroundColor:"#fde68a",color:"#78350f"},children:e.rosterType}),e.pilotVariableCode&&jsxRuntime.jsxs("span",{style:{fontSize:"10px",color:"#92400e",fontWeight:400},children:["pilot: ",e.pilotVariableCode]})]}),jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[jsxRuntime.jsxs("span",{style:{fontSize:"11px",color:"#b45309"},children:[e.variables.length," vars"]}),jsxRuntime.jsx("button",{onClick:o=>{o.stopPropagation(),t(l,e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px"},children:"\xD7"})]})]}),e.variables.slice().sort((o,d)=>o.order-d.order).map(o=>jsxRuntime.jsx(te,{variable:o,pageCode:l,rosterCode:e.code},o.code)),jsxRuntime.jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsxRuntime.jsx("button",{onClick:n,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:"+ Add field to roster"})})]})}function M(){let{form:e,formTypes:l,updateFormMeta:s}=v();return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(R,{label:"Name",value:e.name,onChange:i=>s({name:i})}),jsxRuntime.jsx(R,{label:"Code",value:e.code,onChange:i=>s({code:i})}),jsxRuntime.jsx(R,{label:"Description",value:e.description??"",onChange:i=>s({description:i}),multiline:true}),jsxRuntime.jsx(R,{label:"Version",value:e.version,onChange:i=>s({version:i})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Form type"}),jsxRuntime.jsxs("select",{"data-testid":"form-properties-type-select",value:e.formTypeId??"",onChange:i=>s({formTypeId:i.target.value||void 0}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},children:[jsxRuntime.jsx("option",{value:"",children:"\u2014 No type \u2014"}),l.map(i=>jsxRuntime.jsx("option",{value:i.id,children:i.name},i.id))]})]}),jsxRuntime.jsxs("div",{style:{fontSize:"12px",color:"#94a3b8",marginTop:"8px"},children:[e.pages.length," pages \xB7"," ",e.pages.reduce((i,t)=>i+t.variables.length+t.rosters.reduce((a,r)=>a+r.variables.length,0),0)," variables"]})]})}function R({label:e,value:l,onChange:s,multiline:i,type:t="text"}){let a={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"};return jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),i?jsxRuntime.jsx("textarea",{value:l,onChange:r=>s(r.target.value),rows:3,style:a}):jsxRuntime.jsx("input",{type:t,value:l,onChange:r=>s(r.target.value),style:a})]})}function be({page:e}){let{updatePage:l}=v();return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(R,{label:"Name",value:e.name,onChange:s=>l(e.code,{name:s})}),jsxRuntime.jsx(R,{label:"Code",value:e.code,onChange:()=>{}}),jsxRuntime.jsx("div",{children:jsxRuntime.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsxRuntime.jsx("input",{type:"checkbox",checked:e.isRepeatable,onChange:s=>l(e.code,{isRepeatable:s.target.checked,repeatConfig:s.target.checked?{min:1,max:10}:void 0})}),"Repeatable page"]})}),e.isRepeatable&&e.repeatConfig&&jsxRuntime.jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsxRuntime.jsx(R,{label:"Min instances",value:String(e.repeatConfig.min??1),type:"number",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,min:parseInt(s)||1}})}),jsxRuntime.jsx(R,{label:"Max instances",value:String(e.repeatConfig.max??10),type:"number",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,max:parseInt(s)||10}})}),jsxRuntime.jsx(R,{label:"Control variable code",value:e.repeatConfig.controlVariableCode??"",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,controlVariableCode:s||void 0}})}),jsxRuntime.jsx(R,{label:"Instance label template",value:e.repeatConfig.instanceLabel??"",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,instanceLabel:s||void 0}})})]}),jsxRuntime.jsxs("div",{style:{fontSize:"12px",color:"#94a3b8"},children:[e.variables.length," variables \xB7 ",e.rosters.length," rosters"]})]})}var Ne=[{value:"equals",label:"=="},{value:"not_equals",label:"!="},{value:"greater_than",label:">"},{value:"less_than",label:"<"},{value:"greater_than_or_equal",label:">="},{value:"less_than_or_equal",label:"<="},{value:"contains",label:"contains"},{value:"not_contains",label:"not contains"},{value:"is_empty",label:"is empty"},{value:"is_not_empty",label:"is not empty"},{value:"starts_with",label:"starts with"},{value:"ends_with",label:"ends with"},{value:"in",label:"in"},{value:"regex",label:"matches regex"}],me=[{value:"show",label:"Show when"},{value:"hide",label:"Hide when"},{value:"validate",label:"Validate that"},{value:"require",label:"Require when"},{value:"readonly",label:"Read-only when"},{value:"setValue",label:"Set value when"}],Le=["is_empty","is_not_empty"];function ne({conditions:e,onChange:l,availableVariables:s}){let[i,t]=eo.useState(null),a=()=>{let o={id:formCore.generateId(),action:"show",expression:""};l([...e,o]),t(o.id);},r=o=>{l(e.filter(d=>d.id!==o)),i===o&&t(null);},n=(o,d)=>{l(e.map(f=>f.id===o?{...f,...d}:f));};return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[jsxRuntime.jsxs("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:["Conditions (",e.length,")"]}),e.map(o=>jsxRuntime.jsx(Me,{condition:o,isExpanded:i===o.id,onToggle:()=>t(i===o.id?null:o.id),onUpdate:d=>n(o.id,d),onRemove:()=>r(o.id),availableVariables:s},o.id)),jsxRuntime.jsx("button",{type:"button",onClick:a,style:{padding:"6px 12px",border:"1px dashed #cbd5e1",borderRadius:"6px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:"pointer"},children:"+ Add condition"})]})}function Me({condition:e,isExpanded:l,onToggle:s,onUpdate:i,onRemove:t,availableVariables:a}){let[r,n]=eo.useState(()=>He(e.expression)),o=(p,c)=>{n(p);let S=ge(p,c);i({expression:S});},d=p=>{i({action:p});let c=ge(r,p);i({action:p,expression:c});},f=()=>{let p={id:formCore.generateId(),variableCode:"",operator:"equals",value:""},c={...r,rules:[...r.rules,p]};o(c,e.action);},x=p=>{let c={...r,rules:r.rules.filter(S=>S.id!==p)};o(c,e.action);},m=(p,c)=>{let S={...r,rules:r.rules.map(k=>k.id===p?{...k,...c}:k)};o(S,e.action);},u=p=>{let c={...r,logic:p};o(c,e.action);},b=me.find(p=>p.value===e.action)?.label??e.action;return jsxRuntime.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:"6px",overflow:"hidden"},children:[jsxRuntime.jsxs("div",{onClick:s,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"6px 10px",backgroundColor:"#f8fafc",cursor:"pointer",fontSize:"12px",color:"#334155"},children:[jsxRuntime.jsxs("span",{style:{fontWeight:500},children:[b,r.rules.length>0?` (${r.rules.length} rules)`:""]}),jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsxRuntime.jsx("span",{style:{color:"#94a3b8"},children:l?"\u25B2":"\u25BC"}),jsxRuntime.jsx("span",{onClick:p=>{p.stopPropagation(),t();},style:{color:"#ef4444",cursor:"pointer",padding:"0 4px"},role:"button",children:"\xD7"})]})]}),l&&jsxRuntime.jsxs("div",{style:{padding:"10px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Action"}),jsxRuntime.jsx("select",{value:e.action,onChange:p=>d(p.target.value),style:ae,children:me.map(p=>jsxRuntime.jsx("option",{value:p.value,children:p.label},p.value))})]}),r.rules.length>1&&jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#64748b"},children:"Match"}),jsxRuntime.jsx("button",{type:"button",onClick:()=>u("and"),style:{...xe,backgroundColor:r.logic==="and"?"#2563eb":"#f1f5f9",color:r.logic==="and"?"#fff":"#64748b"},children:"ALL (AND)"}),jsxRuntime.jsx("button",{type:"button",onClick:()=>u("or"),style:{...xe,backgroundColor:r.logic==="or"?"#2563eb":"#f1f5f9",color:r.logic==="or"?"#fff":"#64748b"},children:"ANY (OR)"})]}),r.rules.map(p=>jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxRuntime.jsxs("select",{value:p.variableCode,onChange:c=>m(p.id,{variableCode:c.target.value}),style:{...ae,flex:1},children:[jsxRuntime.jsx("option",{value:"",children:"Variable..."}),a.map(c=>jsxRuntime.jsxs("option",{value:c.code,children:[c.name," (",c.code,")"]},c.code))]}),jsxRuntime.jsx("select",{value:p.operator,onChange:c=>m(p.id,{operator:c.target.value}),style:{...ae,width:"90px"},children:Ne.map(c=>jsxRuntime.jsx("option",{value:c.value,children:c.label},c.value))}),!Le.includes(p.operator)&&jsxRuntime.jsx("input",{type:"text",value:p.value,onChange:c=>m(p.id,{value:c.target.value}),placeholder:"Value",style:{...j,flex:1}}),jsxRuntime.jsx("button",{type:"button",onClick:()=>x(p.id),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px"},children:"\xD7"})]},p.id)),jsxRuntime.jsx("button",{type:"button",onClick:f,style:{padding:"4px 8px",border:"1px dashed #cbd5e1",borderRadius:"4px",backgroundColor:"transparent",color:"#64748b",fontSize:"11px",cursor:"pointer"},children:"+ Add rule"}),e.expression&&jsxRuntime.jsx("div",{style:{padding:"6px 8px",backgroundColor:"#f0fdf4",borderRadius:"4px",fontSize:"11px",fontFamily:"monospace",color:"#166534",wordBreak:"break-all"},children:e.expression}),e.action==="validate"&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Error message"}),jsxRuntime.jsx("input",{type:"text",value:e.errorMessage??"",onChange:p=>i({errorMessage:p.target.value||void 0}),placeholder:"Validation error message",style:j})]}),e.action==="setValue"&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Target variable code"}),jsxRuntime.jsx("input",{type:"text",value:e.targetVariableCode??"",onChange:p=>i({targetVariableCode:p.target.value||void 0}),placeholder:"TARGET_VAR",style:j})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Value to set"}),jsxRuntime.jsx("input",{type:"text",value:e.setValue!==void 0?String(e.setValue):"",onChange:p=>i({setValue:p.target.value}),placeholder:"Value",style:j})]})]})]})]})}function Ue(e){return {equals:"==",not_equals:"!=",contains:"contains",not_contains:"!contains",starts_with:"startsWith",ends_with:"endsWith",greater_than:">",less_than:"<",greater_than_or_equal:">=",less_than_or_equal:"<=",is_empty:"isEmpty",is_not_empty:"isNotEmpty",in:"in",not_in:"!in",between:"between",regex:"regex"}[e]??"=="}function ge(e,l){if(e.rules.length===0)return "";let s=e.rules.filter(t=>t.variableCode).map(t=>{let a=`\${${t.variableCode}}`,r=Ue(t.operator);if(t.operator==="is_empty")return `isEmpty(${a})`;if(t.operator==="is_not_empty")return `isNotEmpty(${a})`;if(t.operator==="contains")return `contains(${a}, "${t.value}")`;if(t.operator==="starts_with")return `startsWith(${a}, "${t.value}")`;if(t.operator==="ends_with")return `endsWith(${a}, "${t.value}")`;let n=/^\d+(\.\d+)?$/.test(t.value)?t.value:`"${t.value}"`;return `${a} ${r} ${n}`});if(s.length===0)return "";let i=s.join(e.logic==="and"?" && ":" || ");return l==="show"?`show(${i})`:l==="hide"?`hide(${i})`:l==="validate"?`ConditionEval(${i})`:i}function He(e){return {logic:"and",rules:[]}}var ae={padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none"},j={width:"100%",padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"},xe={padding:"2px 8px",borderRadius:"10px",border:"none",fontSize:"10px",fontWeight:600,cursor:"pointer"};function ie({dataSourceId:e,dependencies:l={},availableConnectors:s,availableVariables:i,onConnectorChange:t,onDependenciesChange:a}){let[r,n]=eo.useState(""),o=s.find(u=>u.id===e),d=Object.entries(l),f=()=>{r.trim()&&(a({...l,[r.trim()]:""}),n(""));},x=u=>{let b={...l};delete b[u],a(b);},m=(u,b)=>{a({...l,[u]:b});};return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",padding:"8px",backgroundColor:"#f0fdf4",borderRadius:"6px"},children:[jsxRuntime.jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#166534",textTransform:"uppercase",letterSpacing:"0.5px"},children:"Data Source Connector"}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:Ye,children:"Connector"}),jsxRuntime.jsxs("select",{value:e??"",onChange:u=>{let b=u.target.value||void 0;t(b),b||a({});},style:he,children:[jsxRuntime.jsx("option",{value:"",children:"None (static options)"}),s.map(u=>jsxRuntime.jsxs("option",{value:u.id,children:[u.name," (",u.id,")"]},u.id))]})]}),o&&jsxRuntime.jsxs("div",{style:{fontSize:"11px",color:"#166534",padding:"4px 6px",backgroundColor:"#dcfce7",borderRadius:"4px"},children:["Connected to: ",jsxRuntime.jsx("strong",{children:o.name})]}),e&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{style:{fontSize:"11px",fontWeight:500,color:"#166534"},children:["Dependencies (",d.length,")"]}),d.map(([u,b])=>jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#334155",minWidth:"60px",fontFamily:"monospace"},children:u}),jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#94a3b8"},children:"\u2192"}),jsxRuntime.jsxs("select",{value:b,onChange:p=>m(u,p.target.value),style:{...he,flex:1},children:[jsxRuntime.jsx("option",{value:"",children:"Select variable..."}),i.map(p=>jsxRuntime.jsxs("option",{value:p.code,children:[p.name," (",p.code,")"]},p.code))]}),jsxRuntime.jsx("button",{type:"button",onClick:()=>x(u),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px"},children:"\xD7"})]},u)),jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsxRuntime.jsx("input",{type:"text",value:r,onChange:u=>n(u.target.value),placeholder:"Dependency key (e.g. parentId)",style:{...Ke,flex:1},onKeyDown:u=>u.key==="Enter"&&f()}),jsxRuntime.jsx("button",{type:"button",onClick:f,disabled:!r.trim(),style:{padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",backgroundColor:"#fff",color:"#2563eb",fontSize:"11px",cursor:"pointer",opacity:r.trim()?1:.5},children:"+ Add"})]})]})]})}var Ye={fontSize:"11px",fontWeight:500,color:"#166534",display:"block",marginBottom:"2px"},he={width:"100%",padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",backgroundColor:"#fff"},Ke={padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"};function je(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"")}function le(e){return typeof e=="string"?e:e==null?"":String(e)}function Ce({options:e,onChange:l,disabled:s}){let i=(m,u)=>{let b=e.map((p,c)=>c===m?{...p,...u}:p);l(b);},t=(m,u)=>{let b=e[m];le(b.value)===""&&u?i(m,{label:u,value:je(u)}):i(m,{label:u});},a=(m,u)=>{i(m,{value:u});},r=()=>{l([...e,{label:"",value:""}]);},n=m=>{l(e.filter((u,b)=>b!==m));},o={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},d={flex:1,padding:"6px 8px",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"},f="1px solid #e2e8f0",x="1px solid #ef4444";return jsxRuntime.jsxs("div",{"data-testid":"options-editor",children:[jsxRuntime.jsxs("label",{style:o,children:["Options (",e.length,")"]}),e.length===0&&jsxRuntime.jsx("div",{"data-testid":"options-editor-empty",style:{fontSize:"12px",color:"#94a3b8",marginBottom:"8px"},children:"No options yet \u2014 add one to populate the choices."}),jsxRuntime.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:e.map((m,u)=>{let b=le(m.label),p=le(m.value),c=b.trim()==="",S=p.trim()==="";return jsxRuntime.jsxs("div",{"data-testid":`option-row-${u}`,style:{display:"flex",alignItems:"center",gap:"6px"},children:[jsxRuntime.jsx("input",{type:"text","aria-label":`Option ${u+1} label`,"data-testid":`option-label-${u}`,value:b,placeholder:"Label",disabled:s,onChange:k=>t(u,k.target.value),style:{...d,border:c?x:f}}),jsxRuntime.jsx("input",{type:"text","aria-label":`Option ${u+1} value`,"data-testid":`option-value-${u}`,value:p,placeholder:"value",disabled:s,onChange:k=>a(u,k.target.value),style:{...d,border:S?x:f,maxWidth:"40%"}}),jsxRuntime.jsx("button",{type:"button","aria-label":`Remove option ${u+1}`,"data-testid":`option-remove-${u}`,onClick:()=>n(u),disabled:s,style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:s?"not-allowed":"pointer",lineHeight:1,fontSize:"14px"},children:"\xD7"})]},u)})}),jsxRuntime.jsx("button",{type:"button","data-testid":"options-editor-add",onClick:r,disabled:s,style:{marginTop:"8px",padding:"6px 10px",border:"1px dashed #94a3b8",borderRadius:"4px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:s?"not-allowed":"pointer"},children:"+ Ajouter une option"})]})}var Xe=[{value:"text",label:"Text"},{value:"textarea",label:"Text Area"},{value:"number",label:"Number"},{value:"date",label:"Date"},{value:"datetime",label:"Date Time"},{value:"time",label:"Time"},{value:"select",label:"Dropdown"},{value:"multiselect",label:"Multi Select"},{value:"radio",label:"Radio"},{value:"checkbox",label:"Checkbox"},{value:"file",label:"File Upload"},{value:"gps",label:"GPS Location"},{value:"rating",label:"Rating (stars)"},{value:"calculated",label:"Calculated"},{value:"hidden",label:"Hidden"},{value:"label",label:"Label (display only)"}];function Se({variable:e,pageCode:l,rosterCode:s,availableConnectors:i=[]}){let{form:t,updateVariable:a}=v(),r=o=>{a(l,e.code,o,s);},n=t.pages.flatMap(o=>[...o.variables.map(d=>({code:d.code,name:d.name})),...o.rosters.flatMap(d=>d.variables.map(f=>({code:f.code,name:f.name})))]);return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(R,{label:"Name",value:e.name,onChange:o=>r({name:o})}),jsxRuntime.jsx(R,{label:"Code",value:e.code,onChange:()=>{}}),jsxRuntime.jsx(R,{label:"Description",value:e.description??"",onChange:o=>r({description:o||void 0})}),jsxRuntime.jsx(R,{label:"Placeholder",value:e.placeholder??"",onChange:o=>r({placeholder:o||void 0})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Type"}),jsxRuntime.jsx("select",{value:e.type,onChange:o=>r({type:o.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:Xe.map(o=>jsxRuntime.jsx("option",{value:o.value,children:o.label},o.value))})]}),e.type==="rating"&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Rating style"}),jsxRuntime.jsxs("select",{value:e.metadata?.ratingStyle??"star",onChange:o=>r({metadata:{...e.metadata,ratingStyle:o.target.value}}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsxRuntime.jsx("option",{value:"star",children:"\u2605 Stars"}),jsxRuntime.jsx("option",{value:"number",children:"123 Numbers"}),jsxRuntime.jsx("option",{value:"color",children:"\u25CF Color dots"})]})]}),jsxRuntime.jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"6px"},children:[jsxRuntime.jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase"},children:"Layout"}),jsxRuntime.jsx(X,{label:"Start new row",checked:e.startWithNewLine!==false,onChange:o=>r({startWithNewLine:o?void 0:false})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"2px"},children:"Column span (1-12)"}),jsxRuntime.jsxs("select",{value:e.colSpan??"auto",onChange:o=>r({colSpan:o.target.value==="auto"?void 0:parseInt(o.target.value)}),style:{width:"100%",padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsxRuntime.jsx("option",{value:"auto",children:"Auto (equal share)"}),[1,2,3,4,5,6,7,8,9,10,11,12].map(o=>jsxRuntime.jsxs("option",{value:o,children:[o,"/12",o===6?" (half)":o===4?" (third)":o===12?" (full)":""]},o))]})]})]}),jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsxRuntime.jsx(X,{label:"Required",checked:e.isRequired,onChange:o=>r({isRequired:o})}),jsxRuntime.jsx(X,{label:"Read only",checked:e.isReadonly,onChange:o=>r({isReadonly:o})}),jsxRuntime.jsx(X,{label:"Hidden by default",checked:e.isHidden,onChange:o=>r({isHidden:o})})]}),e.type==="calculated"&&jsxRuntime.jsx(R,{label:"Expression",value:e.expression??"",onChange:o=>r({expression:o||void 0}),multiline:true}),["select","multiselect","radio"].includes(e.type)&&jsxRuntime.jsx(ie,{dataSourceId:e.dataSourceId,dependencies:e.dataSourceDependencies,availableConnectors:i,availableVariables:n,onConnectorChange:o=>r({dataSourceId:o}),onDependenciesChange:o=>r({dataSourceDependencies:Object.keys(o).length>0?o:void 0})}),["select","multiselect","radio","checkbox"].includes(e.type)&&!e.dataSourceId&&jsxRuntime.jsx(Ce,{options:e.options??[],onChange:o=>r({options:o})}),jsxRuntime.jsx(ne,{conditions:e.conditions??[],onChange:o=>r({conditions:o}),availableVariables:n})]})}function X({label:e,checked:l,onChange:s}){return jsxRuntime.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsxRuntime.jsx("input",{type:"checkbox",checked:l,onChange:i=>s(i.target.checked)}),e]})}var Qe=[{value:"check",label:"Check (multi-select checkboxes)"},{value:"list",label:"List (dropdown per row)"},{value:"collection",label:"Collection"},{value:"collection_extend",label:"Collection Extended"}];function Re({roster:e,pageCode:l}){let{updateRoster:s}=v();return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(R,{label:"Name",value:e.name,onChange:i=>s(l,e.code,{name:i})}),jsxRuntime.jsx(R,{label:"Code",value:e.code,onChange:()=>{}}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Roster Type"}),jsxRuntime.jsx("select",{value:e.rosterType,onChange:i=>s(l,e.code,{rosterType:i.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:Qe.map(i=>jsxRuntime.jsx("option",{value:i.value,children:i.label},i.value))})]}),jsxRuntime.jsx(R,{label:"Pilot variable code",value:e.pilotVariableCode??"",onChange:i=>s(l,e.code,{pilotVariableCode:i||void 0})}),jsxRuntime.jsxs("div",{style:{fontSize:"12px",color:"#94a3b8"},children:[e.variables.length," variables \xB7 ",e.options?.length??0," options"]})]})}function pe({availableConnectors:e=[]}){let{selection:l,form:s}=v(),i=(()=>{switch(l.type){case "form":return jsxRuntime.jsx(M,{});case "page":{let t=s.pages.find(a=>a.code===l.pageCode);return t?jsxRuntime.jsx(be,{page:t}):jsxRuntime.jsx(M,{})}case "roster":{let t=s.pages.find(r=>r.code===l.pageCode),a=t?.rosters.find(r=>r.code===l.rosterCode);return !t||!a?jsxRuntime.jsx(M,{}):jsxRuntime.jsx(Re,{roster:a,pageCode:t.code})}case "variable":{let t=s.pages.find(o=>o.code===l.pageCode);if(!t)return jsxRuntime.jsx(M,{});let a=l.rosterCode?t.rosters.find(o=>o.code===l.rosterCode):void 0,n=(a?a.variables:t.variables).find(o=>o.code===l.variableCode);return n?jsxRuntime.jsx(Se,{variable:n,pageCode:t.code,rosterCode:l.rosterCode,availableConnectors:e}):jsxRuntime.jsx(M,{})}}})();return jsxRuntime.jsxs("div",{style:{width:"300px",borderLeft:"1px solid #e2e8f0",backgroundColor:"#fff",overflowY:"auto"},children:[jsxRuntime.jsx("div",{style:{padding:"12px 16px",borderBottom:"1px solid #e2e8f0",fontSize:"12px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:"Properties"}),jsxRuntime.jsx("div",{style:{padding:"16px"},children:i})]})}function oo({theme:e,dataSources:l,adapter:s,initialForm:i,formId:t,onChange:a,onSave:r,PreviewComponent:n,ToolboxComponent:o,CanvasComponent:d,Wrapper:f}){let{form:x,view:m,setForm:u,setAdapter:b,load:p}=v();eo.useEffect(()=>{s&&b(s);},[s,b]),eo.useEffect(()=>{i?u(i):t&&s?.loadForm&&p(t);},[i,t]);let c=eo.useRef(a),S=eo.useRef(true);c.current=a,eo.useEffect(()=>{if(S.current){S.current=false;return}c.current?.(x);},[x]);let k=o??oe,_=d??re,T=f??eo__default.default.Fragment,Q=jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsxRuntime.jsx(ee,{onSave:r}),jsxRuntime.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[m==="canvas"&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(k,{}),jsxRuntime.jsx(_,{}),jsxRuntime.jsx(pe,{availableConnectors:l?Object.values(l):[]})]}),m==="preview"&&n&&jsxRuntime.jsx("div",{style:{flex:1,overflow:"auto"},children:jsxRuntime.jsx(n,{formSchema:x,theme:e,dataSources:l,mode:"fill"})}),m==="preview"&&!n&&jsxRuntime.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:"Pass PreviewComponent prop to enable preview"}),m==="json"&&jsxRuntime.jsx("div",{style:{flex:1,overflow:"auto",padding:"16px"},children:jsxRuntime.jsx("pre",{style:{fontFamily:"monospace",fontSize:"12px",color:"#334155",backgroundColor:"#f8fafc",padding:"16px",borderRadius:"8px",border:"1px solid #e2e8f0",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:JSON.stringify(x,null,2)})})]})]});return jsxRuntime.jsx(T,{children:Q})}exports.Canvas=re;exports.ConditionBuilder=ne;exports.DataSourceSelector=ie;exports.EditorToolbar=ee;exports.FormEditor=oo;exports.PropertiesPanel=pe;exports.Toolbox=oe;exports.useEditorStore=v;//# sourceMappingURL=index.cjs.map
|
|
1
|
+
'use strict';var oo=require('react'),zustand=require('zustand'),formCore=require('@msbci/form-core'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var oo__default=/*#__PURE__*/_interopDefault(oo);var De=50;function Fe(){return {id:"",code:"",name:"New Form",version:"1.0.0",isPublished:false,pages:[]}}var C=zustand.create((e,l)=>{function s(t){let r=l(),a={form:formCore.deepClone(r.form),description:t,timestamp:Date.now()},n=r.history.slice(0,r.historyIndex+1);n.push(a),n.length>De&&n.shift(),e({history:n,historyIndex:n.length-1});}function i(t,r){s(t);let a=l(),n=r(formCore.deepClone(a.form));e({form:n,isDirty:true});}return {form:Fe(),formTypes:[],selection:{type:"form"},view:"canvas",isDirty:false,isSaving:false,history:[],historyIndex:-1,adapter:null,setForm:t=>{e({form:formCore.deepClone(t),isDirty:false,history:[],historyIndex:-1,selection:{type:"form"}});},updateFormMeta:t=>{i("Update form metadata",r=>({...r,...t}));},addPage:t=>{i(`Add page "${t.name}"`,r=>({...r,pages:[...r.pages,t]}));},updatePage:(t,r)=>{i(`Update page "${t}"`,a=>({...a,pages:a.pages.map(n=>n.code===t?{...n,...r}:n)}));},removePage:t=>{i(`Remove page "${t}"`,a=>({...a,pages:a.pages.filter(n=>n.code!==t)}));let r=l();r.selection.type==="page"&&r.selection.pageCode===t&&e({selection:{type:"form"}});},reorderPages:t=>{i("Reorder pages",r=>{let a=new Map(r.pages.map(o=>[o.code,o])),n=t.map((o,d)=>{let u=a.get(o);return u?{...u,order:d}:void 0}).filter(o=>o!==void 0);return {...r,pages:n}});},addRoster:(t,r)=>{i(`Add roster "${r.name}" to page "${t}"`,a=>({...a,pages:a.pages.map(n=>n.code===t?{...n,rosters:[...n.rosters,r]}:n)}));},updateRoster:(t,r,a)=>{i(`Update roster "${r}"`,n=>({...n,pages:n.pages.map(o=>o.code===t?{...o,rosters:o.rosters.map(d=>d.code===r?{...d,...a}:d)}:o)}));},removeRoster:(t,r)=>{i(`Remove roster "${r}"`,a=>({...a,pages:a.pages.map(n=>n.code===t?{...n,rosters:n.rosters.filter(o=>o.code!==r)}:n)}));},addVariable:(t,r,a)=>{i(`Add variable "${r.name}"`,n=>({...n,pages:n.pages.map(o=>o.code!==t?o:a?{...o,rosters:o.rosters.map(d=>d.code===a?{...d,variables:[...d.variables,r]}:d)}:{...o,variables:[...o.variables,r]})}));},updateVariable:(t,r,a,n)=>{i(`Update variable "${r}"`,o=>({...o,pages:o.pages.map(d=>d.code!==t?d:n?{...d,rosters:d.rosters.map(u=>u.code===n?{...u,variables:u.variables.map(m=>m.code===r?{...m,...a}:m)}:u)}:{...d,variables:d.variables.map(u=>u.code===r?{...u,...a}:u)})}));},removeVariable:(t,r,a)=>{i(`Remove variable "${r}"`,n=>({...n,pages:n.pages.map(o=>o.code!==t?o:a?{...o,rosters:o.rosters.map(d=>d.code===a?{...d,variables:d.variables.filter(u=>u.code!==r)}:d)}:{...o,variables:o.variables.filter(d=>d.code!==r)})}));},moveVariable:(t,r,a,n,o,d)=>{i(`Move variable "${a}"`,u=>{let m,g=u.pages.map(b=>{if(b.code!==t)return b;if(o)return {...b,rosters:b.rosters.map(p=>{if(p.code!==o)return p;let f=p.variables.find(S=>S.code===a);return f&&(m={...f}),{...p,variables:p.variables.filter(S=>S.code!==a)}})};let y=b.variables.find(p=>p.code===a);return y&&(m={...y}),{...b,variables:b.variables.filter(p=>p.code!==a)}});if(!m)return u;m.order=n;let c=g.map(b=>{if(b.code!==r)return b;if(d)return {...b,rosters:b.rosters.map(p=>{if(p.code!==d)return p;let f=[...p.variables,m].sort((S,z)=>S.order-z.order);return {...p,variables:f}})};let y=[...b.variables,m].sort((p,f)=>p.order-f.order);return {...b,variables:y}});return {...u,pages:c}});},select:t=>e({selection:t}),clearSelection:()=>e({selection:{type:"form"}}),setView:t=>e({view:t}),undo:()=>{let{history:t,historyIndex:r,form:a}=l();if(!(r<0))if(r===t.length-1){let n={form:formCore.deepClone(a),description:"Current state",timestamp:Date.now()};e({form:formCore.deepClone(t[r].form),historyIndex:r-1,isDirty:true,history:[...t,n]});}else e({form:formCore.deepClone(t[r].form),historyIndex:r-1,isDirty:true});},redo:()=>{let{history:t,historyIndex:r}=l();if(r>=t.length-2)return;let a=r+2;a<t.length&&e({form:formCore.deepClone(t[a].form),historyIndex:a-1,isDirty:true});},canUndo:()=>l().historyIndex>=0,canRedo:()=>{let{history:t,historyIndex:r}=l();return r<t.length-2},addFormType:t=>{let r={...t,id:formCore.generateId()};e(a=>({formTypes:[...a.formTypes,r]}));},updateFormType:(t,r)=>{e(a=>({formTypes:a.formTypes.map(n=>n.id===t?{...n,...r}:n)}));},removeFormType:t=>{let r=l();if(r.form.formTypeId===t){let{formTypeId:a,...n}=r.form;e({form:{...n}});}e(a=>({formTypes:a.formTypes.filter(n=>n.id!==t)}));},setAdapter:t=>e({adapter:t}),save:async()=>{let{adapter:t,form:r}=l();if(t?.saveForm){e({isSaving:true});try{await t.saveForm(r),e({isDirty:!1});}finally{e({isSaving:false});}}},load:async t=>{let{adapter:r}=l();if(!r?.loadForm)return;let a=await r.loadForm(t);l().setForm(a);},exportJson:()=>formCore.serializeForm(l().form),importJson:t=>{let r=formCore.deserializeForm(t);l().setForm(r);}}});function fe({open:e,onClose:l}){let{formTypes:s,form:i,addFormType:t,updateFormType:r,removeFormType:a}=C(),[n,o]=oo.useState(""),[d,u]=oo.useState(""),[m,g]=oo.useState(null),[c,b]=oo.useState(""),[y,p]=oo.useState(null);if(!e)return null;let f=()=>{n.trim()&&(t({name:n.trim(),code:d.trim()||n.trim().toUpperCase().replace(/\s+/g,"_")}),o(""),u(""));},S=(x,Z)=>{g(x),b(Z);},z=()=>{m&&c.trim()&&r(m,{name:c.trim()}),g(null),b("");},T=x=>{i.formTypeId===x?p(x):a(x);},Q=()=>{y&&a(y),p(null);};return jsxRuntime.jsx("div",{role:"dialog","aria-modal":"true","aria-label":"Form types","data-testid":"form-types-dialog",onClick:l,style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.3)",zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"},children:jsxRuntime.jsxs("div",{onClick:x=>x.stopPropagation(),style:{backgroundColor:"#fff",borderRadius:"8px",maxWidth:"32rem",width:"100%",maxHeight:"80vh",overflow:"auto",boxShadow:"0 10px 25px rgba(0,0,0,0.2)",fontFamily:"system-ui, -apple-system, sans-serif",color:"#1e293b"},children:[jsxRuntime.jsxs("header",{style:{padding:"16px",borderBottom:"1px solid #e2e8f0",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[jsxRuntime.jsx("h3",{style:{fontSize:"16px",fontWeight:600,margin:0},children:"Form types"}),jsxRuntime.jsx("button",{type:"button",onClick:l,"aria-label":"Close","data-testid":"form-types-dialog-close-x",style:{background:"transparent",border:"none",fontSize:"18px",cursor:"pointer",color:"#64748b",padding:"4px 8px"},children:"\xD7"})]}),jsxRuntime.jsxs("section",{style:{padding:"16px"},children:[s.length===0&&jsxRuntime.jsx("div",{"data-testid":"form-types-empty",style:{fontSize:"13px",color:"#94a3b8",marginBottom:"12px"},children:"No form types yet. Add one below."}),jsxRuntime.jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"6px"},children:s.map(x=>{let Z=m===x.id,we=i.formTypeId===x.id,Ie=y===x.id;return jsxRuntime.jsxs("li",{"data-testid":`form-type-row-${x.id}`,style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:"1px solid #e2e8f0",borderRadius:"6px",backgroundColor:we?"#f1f5f9":"#fff"},children:[Z?jsxRuntime.jsx("input",{type:"text",value:c,autoFocus:true,"data-testid":`form-type-name-edit-${x.id}`,onChange:Y=>b(Y.target.value),onBlur:z,onKeyDown:Y=>{Y.key==="Enter"&&z(),Y.key==="Escape"&&(g(null),b(""));},style:{flex:1,padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}):jsxRuntime.jsx("span",{"data-testid":`form-type-name-${x.id}`,onClick:()=>S(x.id,x.name),style:{flex:1,fontSize:"13px",cursor:"pointer",padding:"4px 8px"},children:x.name}),jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#94a3b8",fontFamily:"monospace"},children:x.code}),jsxRuntime.jsx("button",{type:"button","aria-label":`Remove ${x.name}`,"data-testid":`form-type-remove-${x.id}`,onClick:()=>T(x.id),style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:"pointer",fontSize:"14px",lineHeight:1},children:"\xD7"}),Ie&&jsxRuntime.jsxs("div",{"data-testid":`form-type-confirm-${x.id}`,style:{flexBasis:"100%",fontSize:"12px",color:"#b91c1c",backgroundColor:"#fef2f2",padding:"6px 8px",borderRadius:"4px",display:"flex",alignItems:"center",gap:"8px"},children:[jsxRuntime.jsx("span",{style:{flex:1},children:"Ce type est utilis\xE9 par le formulaire courant. Confirmer la suppression ?"}),jsxRuntime.jsx("button",{type:"button","data-testid":`form-type-confirm-yes-${x.id}`,onClick:Q,style:{padding:"4px 8px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:"Supprimer"}),jsxRuntime.jsx("button",{type:"button","data-testid":`form-type-confirm-no-${x.id}`,onClick:()=>p(null),style:{padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:"Annuler"})]})]},x.id)})})]}),jsxRuntime.jsxs("section",{style:{padding:"12px 16px",borderTop:"1px solid #e2e8f0",display:"flex",alignItems:"center",gap:"8px",backgroundColor:"#f8fafc"},children:[jsxRuntime.jsx("input",{type:"text",value:n,"data-testid":"form-types-new-name",placeholder:"New type name",onChange:x=>o(x.target.value),onKeyDown:x=>{x.key==="Enter"&&f();},style:{flex:1,padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}),jsxRuntime.jsx("input",{type:"text",value:d,"data-testid":"form-types-new-code",placeholder:"CODE (auto)",onChange:x=>u(x.target.value),style:{width:"120px",padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none",fontFamily:"monospace"}}),jsxRuntime.jsx("button",{type:"button","data-testid":"form-types-add",onClick:f,disabled:n.trim()==="",style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:n.trim()===""?"#cbd5e1":"#2563eb",color:"#fff",fontSize:"13px",cursor:n.trim()===""?"not-allowed":"pointer"},children:"+ Ajouter"})]})]})})}function ee({onSave:e,onExport:l,onImport:s}){let{form:i,updateFormMeta:t,view:r,setView:a,isDirty:n,isSaving:o,canUndo:d,canRedo:u,undo:m,redo:g,save:c,addPage:b}=C(),[y,p]=oo.useState(false),f=async()=>{await c(),e?.();},S=()=>{let T=i.pages.length;b({id:`page-${Date.now()}`,code:`PAGE_${T+1}`,name:`Page ${T+1}`,order:T,isRepeatable:false,variables:[],rosters:[]});},z=[{view:"canvas",label:"Editor"},{view:"preview",label:"Preview"},{view:"json",label:"JSON"}];return jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",padding:"8px 16px",borderBottom:"1px solid #e2e8f0",backgroundColor:"#fff",gap:"8px"},children:[jsxRuntime.jsx("input",{type:"text",value:i.name,onChange:T=>t({name:T.target.value}),style:{border:"none",fontSize:"16px",fontWeight:600,color:"#1e293b",padding:"4px 8px",borderRadius:"4px",outline:"none",minWidth:"200px",backgroundColor:"transparent"},placeholder:"Form name"}),n&&jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#f59e0b",fontWeight:500},children:"Unsaved"}),jsxRuntime.jsx("div",{style:{flex:1}}),jsxRuntime.jsx(O,{onClick:S,label:"+ Page"}),jsxRuntime.jsx(O,{onClick:()=>p(true),label:"Types",title:"Manage form types"}),jsxRuntime.jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsxRuntime.jsx(O,{onClick:m,label:"\u21A9",disabled:!d(),title:"Undo"}),jsxRuntime.jsx(O,{onClick:g,label:"\u21AA",disabled:!u(),title:"Redo"}),jsxRuntime.jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsxRuntime.jsx("div",{style:{display:"flex",borderRadius:"6px",overflow:"hidden",border:"1px solid #e2e8f0"},children:z.map(T=>jsxRuntime.jsx("button",{type:"button",onClick:()=>a(T.view),style:{padding:"4px 12px",fontSize:"12px",fontWeight:500,border:"none",cursor:"pointer",backgroundColor:r===T.view?"#2563eb":"#fff",color:r===T.view?"#fff":"#64748b"},children:T.label},T.view))}),jsxRuntime.jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsxRuntime.jsx(O,{onClick:f,label:o?"Saving...":"Save",primary:true,disabled:o||!n}),l&&jsxRuntime.jsx(O,{onClick:l,label:"Export"}),s&&jsxRuntime.jsx(O,{onClick:s,label:"Import"}),jsxRuntime.jsx(fe,{open:y,onClose:()=>p(false)})]})}function O({onClick:e,label:l,primary:s,disabled:i,title:t}){return jsxRuntime.jsx("button",{type:"button",onClick:e,disabled:i,title:t,style:{padding:"6px 12px",borderRadius:"6px",border:s?"none":"1px solid #e2e8f0",backgroundColor:s?"#2563eb":"#fff",color:s?"#fff":"#334155",fontSize:"13px",fontWeight:500,cursor:i?"default":"pointer",opacity:i?.5:1},children:l})}var _e=[{label:"Text",items:[{type:"text",label:"Text",icon:"T"},{type:"textarea",label:"Text Area",icon:"\xB6"},{type:"number",label:"Number",icon:"#"},{type:"email",label:"Email",icon:"@"}]},{label:"Selection",items:[{type:"select",label:"Dropdown",icon:"\u25BC"},{type:"multiselect",label:"Multi Select",icon:"\u2611"},{type:"radio",label:"Radio",icon:"\u25C9"},{type:"checkbox",label:"Checkbox",icon:"\u2610"}]},{label:"Date & Time",items:[{type:"date",label:"Date",icon:"\u{1F4C5}"},{type:"datetime",label:"DateTime",icon:"\u{1F550}"},{type:"time",label:"Time",icon:"\u23F0"}]},{label:"Media",items:[{type:"file",label:"File",icon:"\u{1F4CE}"},{type:"image",label:"Image",icon:"\u{1F5BC}"},{type:"gps",label:"GPS",icon:"\u{1F4CD}"}]},{label:"Advanced",items:[{type:"rating",label:"Rating",icon:"\u2605"},{type:"calculated",label:"Calculated",icon:"fx"},{type:"hidden",label:"Hidden",icon:"\u{1F441}"},{type:"label",label:"Label",icon:"Aa"}]}];function oe(){let[e,l]=oo.useState(""),{form:s,selection:i,addVariable:t}=C(),r=i.type==="page"||i.type==="variable"||i.type==="roster"?i.pageCode:s.pages[0]?.code,a=(o,d)=>{if(!r)return;let u=s.pages.find(g=>g.code===r);if(!u)return;let m=`${o.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(r,{id:`var-${Date.now()}`,code:m,name:`New ${d}`,type:o,order:u.variables.length,isRequired:false,isReadonly:false,isHidden:false});},n=_e.map(o=>({...o,items:o.items.filter(d=>d.label.toLowerCase().includes(e.toLowerCase()))})).filter(o=>o.items.length>0);return jsxRuntime.jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsxRuntime.jsx("div",{style:{padding:"12px",borderBottom:"1px solid #e2e8f0"},children:jsxRuntime.jsx("input",{type:"text",placeholder:"Search fields...",value:e,onChange:o=>l(o.target.value),style:{width:"100%",padding:"6px 10px",border:"1px solid #e2e8f0",borderRadius:"6px",fontSize:"13px",outline:"none",boxSizing:"border-box"}})}),jsxRuntime.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"8px"},children:[!r&&jsxRuntime.jsx("div",{style:{padding:"12px",color:"#94a3b8",fontSize:"12px",textAlign:"center"},children:"Add a page first"}),n.map(o=>jsxRuntime.jsxs("div",{style:{marginBottom:"16px"},children:[jsxRuntime.jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#94a3b8",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"6px",padding:"0 4px"},children:o.label}),o.items.map(d=>jsxRuntime.jsxs("div",{onClick:()=>a(d.type,d.label),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:u=>{u.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:u=>{u.currentTarget.style.backgroundColor="transparent";},children:[jsxRuntime.jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:d.icon}),jsxRuntime.jsx("span",{children:d.label})]},d.type))]},o.label))]})]})}function We(e){let l=e.slice().sort((i,t)=>i.order-t.order),s=[];for(let i of l)i.startWithNewLine===false&&s.length>0?s[s.length-1].push(i):s.push([i]);return s}function re(){let{form:e}=C();return e.pages.length===0?jsxRuntime.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:'Click "+ Page" in the toolbar to get started'}):jsxRuntime.jsx("div",{style:{flex:1,overflowY:"auto",padding:"16px",backgroundColor:"#fff"},children:e.pages.slice().sort((l,s)=>l.order-s.order).map(l=>jsxRuntime.jsx(Be,{page:l},l.code))})}function Be({page:e}){let{selection:l,select:s,removePage:i,addRoster:t}=C(),r=l.type==="page"&&l.pageCode===e.code,a=n=>{n.stopPropagation();let o=`ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(e.code,{id:`roster-${Date.now()}`,code:o,name:"New Roster",rosterType:"collection",order:e.rosters.length,variables:[]});};return jsxRuntime.jsxs("div",{style:{marginBottom:"16px",border:`2px solid ${r?"#2563eb":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden"},children:[jsxRuntime.jsxs("div",{onClick:()=>s({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:r?"#eff6ff":"#f8fafc",borderBottom:"1px solid #e2e8f0",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsxRuntime.jsx("span",{style:{fontSize:"14px",fontWeight:600,color:"#1e293b"},children:e.name||"Unnamed Page"}),e.isRepeatable&&jsxRuntime.jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:"Repeatable"})]}),jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsxRuntime.jsxs("span",{style:{fontSize:"12px",color:"#94a3b8"},children:[e.variables.length," fields \xB7 ",e.rosters.length," rosters"]}),jsxRuntime.jsx("button",{onClick:n=>{n.stopPropagation(),i(e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px 4px"},children:"\xD7"})]})]}),jsxRuntime.jsxs("div",{style:{padding:"4px 0"},children:[We(e.variables).map((n,o)=>n.length===1?jsxRuntime.jsx(te,{variable:n[0],pageCode:e.code},n[0].code):jsxRuntime.jsx("div",{style:{display:"flex",gap:"2px",backgroundColor:"#f0f4ff",borderLeft:"2px solid #c7d2fe",margin:"1px 0"},children:n.map(d=>jsxRuntime.jsx("div",{style:{flex:d.colSpan?`0 0 ${d.colSpan/12*100}%`:"1 1 0%",minWidth:0},children:jsxRuntime.jsx(te,{variable:d,pageCode:e.code})},d.code))},`row-${o}`)),e.rosters.slice().sort((n,o)=>n.order-o.order).map(n=>jsxRuntime.jsx(Oe,{roster:n,pageCode:e.code},n.code)),e.variables.length===0&&e.rosters.length===0&&jsxRuntime.jsx("div",{style:{padding:"12px 14px",color:"#94a3b8",fontSize:"12px",fontStyle:"italic"},children:"Click a field type in the toolbox to add it here"})]}),jsxRuntime.jsx("div",{style:{padding:"6px 14px",borderTop:"1px solid #e2e8f0"},children:jsxRuntime.jsx("button",{onClick:a,style:{padding:"4px 10px",borderRadius:"4px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"11px",cursor:"pointer",fontWeight:500},children:"+ Add Roster"})})]})}function te({variable:e,pageCode:l,rosterCode:s}){let{selection:i,select:t,removeVariable:r}=C(),a=i.type==="variable"&&i.variableCode===e.code;return jsxRuntime.jsxs("div",{onClick:n=>{n.stopPropagation(),t({type:"variable",pageCode:l,variableCode:e.code,rosterCode:s});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",cursor:"pointer",backgroundColor:a?"#eff6ff":"transparent",borderLeft:a?"3px solid #2563eb":"3px solid transparent",fontSize:"13px"},children:[jsxRuntime.jsx("span",{style:{color:"#94a3b8",fontSize:"11px",width:"60px",flexShrink:0},children:e.type}),jsxRuntime.jsx("span",{style:{color:"#334155",flex:1},children:e.name||e.code}),e.isRequired&&jsxRuntime.jsx("span",{style:{color:"#ef4444",fontSize:"11px"},children:"*"}),e.conditions&&e.conditions.length>0&&jsxRuntime.jsx("span",{style:{color:"#f59e0b",fontSize:"11px"},children:"\u26A1"}),e.dataSourceId&&jsxRuntime.jsx("span",{style:{color:"#22c55e",fontSize:"11px"},children:"\u27F3"}),jsxRuntime.jsx("button",{onClick:n=>{n.stopPropagation(),r(l,e.code,s);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px",padding:"0 2px",opacity:.5},children:"\xD7"})]})}function Oe({roster:e,pageCode:l}){let{selection:s,select:i,removeRoster:t,addVariable:r}=C(),a=s.type==="roster"&&s.rosterCode===e.code,n=o=>{o.stopPropagation();let d=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;r(l,{id:`var-${Date.now()}`,code:d,name:"New field",type:"text",order:e.variables.length,isRequired:false,isReadonly:false,isHidden:false},e.code);};return jsxRuntime.jsxs("div",{style:{margin:"4px 8px",border:`1px solid ${a?"#2563eb":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden"},children:[jsxRuntime.jsxs("div",{onClick:o=>{o.stopPropagation(),i({type:"roster",pageCode:l,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:a?"#fef3c7":"#fffbeb",fontSize:"12px",fontWeight:600,color:"#92400e",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[jsxRuntime.jsxs("span",{children:["\u25A4 ",e.name]}),jsxRuntime.jsx("span",{style:{fontSize:"10px",padding:"1px 4px",borderRadius:"3px",backgroundColor:"#fde68a",color:"#78350f"},children:e.rosterType}),e.pilotVariableCode&&jsxRuntime.jsxs("span",{style:{fontSize:"10px",color:"#92400e",fontWeight:400},children:["pilot: ",e.pilotVariableCode]})]}),jsxRuntime.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[jsxRuntime.jsxs("span",{style:{fontSize:"11px",color:"#b45309"},children:[e.variables.length," vars"]}),jsxRuntime.jsx("button",{onClick:o=>{o.stopPropagation(),t(l,e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px"},children:"\xD7"})]})]}),e.variables.slice().sort((o,d)=>o.order-d.order).map(o=>jsxRuntime.jsx(te,{variable:o,pageCode:l,rosterCode:e.code},o.code)),jsxRuntime.jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsxRuntime.jsx("button",{onClick:n,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:"+ Add field to roster"})})]})}function M(){let{form:e,formTypes:l,updateFormMeta:s}=C();return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(k,{label:"Name",value:e.name,onChange:i=>s({name:i})}),jsxRuntime.jsx(k,{label:"Code",value:e.code,onChange:i=>s({code:i})}),jsxRuntime.jsx(k,{label:"Description",value:e.description??"",onChange:i=>s({description:i}),multiline:true}),jsxRuntime.jsx(k,{label:"Version",value:e.version,onChange:i=>s({version:i})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Form type"}),jsxRuntime.jsxs("select",{"data-testid":"form-properties-type-select",value:e.formTypeId??"",onChange:i=>s({formTypeId:i.target.value||void 0}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},children:[jsxRuntime.jsx("option",{value:"",children:"\u2014 No type \u2014"}),l.map(i=>jsxRuntime.jsx("option",{value:i.id,children:i.name},i.id))]})]}),jsxRuntime.jsxs("div",{style:{fontSize:"12px",color:"#94a3b8",marginTop:"8px"},children:[e.pages.length," pages \xB7"," ",e.pages.reduce((i,t)=>i+t.variables.length+t.rosters.reduce((r,a)=>r+a.variables.length,0),0)," variables"]})]})}function k({label:e,value:l,onChange:s,multiline:i,type:t="text"}){let r={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"};return jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),i?jsxRuntime.jsx("textarea",{value:l,onChange:a=>s(a.target.value),rows:3,style:r}):jsxRuntime.jsx("input",{type:t,value:l,onChange:a=>s(a.target.value),style:r})]})}function be({page:e}){let{updatePage:l}=C();return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(k,{label:"Name",value:e.name,onChange:s=>l(e.code,{name:s})}),jsxRuntime.jsx(k,{label:"Code",value:e.code,onChange:()=>{}}),jsxRuntime.jsx("div",{children:jsxRuntime.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsxRuntime.jsx("input",{type:"checkbox",checked:e.isRepeatable,onChange:s=>l(e.code,{isRepeatable:s.target.checked,repeatConfig:s.target.checked?{min:1,max:10}:void 0})}),"Repeatable page"]})}),e.isRepeatable&&e.repeatConfig&&jsxRuntime.jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsxRuntime.jsx(k,{label:"Min instances",value:String(e.repeatConfig.min??1),type:"number",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,min:parseInt(s)||1}})}),jsxRuntime.jsx(k,{label:"Max instances",value:String(e.repeatConfig.max??10),type:"number",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,max:parseInt(s)||10}})}),jsxRuntime.jsx(k,{label:"Control variable code",value:e.repeatConfig.controlVariableCode??"",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,controlVariableCode:s||void 0}})}),jsxRuntime.jsx(k,{label:"Instance label template",value:e.repeatConfig.instanceLabel??"",onChange:s=>l(e.code,{repeatConfig:{...e.repeatConfig,instanceLabel:s||void 0}})})]}),jsxRuntime.jsxs("div",{style:{fontSize:"12px",color:"#94a3b8"},children:[e.variables.length," variables \xB7 ",e.rosters.length," rosters"]})]})}var Le=[{value:"equals",label:"=="},{value:"not_equals",label:"!="},{value:"greater_than",label:">"},{value:"less_than",label:"<"},{value:"greater_than_or_equal",label:">="},{value:"less_than_or_equal",label:"<="},{value:"contains",label:"contains"},{value:"not_contains",label:"not contains"},{value:"is_empty",label:"is empty"},{value:"is_not_empty",label:"is not empty"},{value:"starts_with",label:"starts with"},{value:"ends_with",label:"ends with"},{value:"in",label:"in"},{value:"regex",label:"matches regex"}],me=[{value:"show",label:"Show when"},{value:"hide",label:"Hide when"},{value:"validate",label:"Validate that"},{value:"require",label:"Require when"},{value:"readonly",label:"Read-only when"},{value:"setValue",label:"Set value when"}],Me=["is_empty","is_not_empty"];function ae({conditions:e,onChange:l,availableVariables:s,rosterContext:i}){let[t,r]=oo.useState(null),a=()=>{let d={id:formCore.generateId(),action:"show",expression:""};l([...e,d]),r(d.id);},n=d=>{l(e.filter(u=>u.id!==d)),t===d&&r(null);},o=(d,u)=>{l(e.map(m=>m.id===d?{...m,...u}:m));};return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[jsxRuntime.jsxs("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:["Conditions (",e.length,")"]}),e.map(d=>jsxRuntime.jsx(Ue,{condition:d,isExpanded:t===d.id,onToggle:()=>r(t===d.id?null:d.id),onUpdate:u=>o(d.id,u),onRemove:()=>n(d.id),availableVariables:s,rosterContext:i},d.id)),jsxRuntime.jsx("button",{type:"button",onClick:a,style:{padding:"6px 12px",border:"1px dashed #cbd5e1",borderRadius:"6px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:"pointer"},children:"+ Add condition"})]})}function Ue({condition:e,isExpanded:l,onToggle:s,onUpdate:i,onRemove:t,availableVariables:r,rosterContext:a}){let[n,o]=oo.useState(()=>qe(e.expression)),d=(p,f)=>{o(p);let S=ge(p,f);i({expression:S});},u=p=>{i({action:p});let f=ge(n,p);i({action:p,expression:f});},m=()=>{let p={id:formCore.generateId(),variableCode:"",operator:"equals",value:""},f={...n,rules:[...n.rules,p]};d(f,e.action);},g=p=>{let f={...n,rules:n.rules.filter(S=>S.id!==p)};d(f,e.action);},c=(p,f)=>{let S={...n,rules:n.rules.map(z=>z.id===p?{...z,...f}:z)};d(S,e.action);},b=p=>{let f={...n,logic:p};d(f,e.action);},y=me.find(p=>p.value===e.action)?.label??e.action;return jsxRuntime.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:"6px",overflow:"hidden"},children:[jsxRuntime.jsxs("div",{onClick:s,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"6px 10px",backgroundColor:"#f8fafc",cursor:"pointer",fontSize:"12px",color:"#334155"},children:[jsxRuntime.jsxs("span",{style:{fontWeight:500},children:[y,n.rules.length>0?` (${n.rules.length} rules)`:""]}),jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsxRuntime.jsx("span",{style:{color:"#94a3b8"},children:l?"\u25B2":"\u25BC"}),jsxRuntime.jsx("span",{onClick:p=>{p.stopPropagation(),t();},style:{color:"#ef4444",cursor:"pointer",padding:"0 4px"},role:"button",children:"\xD7"})]})]}),l&&jsxRuntime.jsxs("div",{style:{padding:"10px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Action"}),jsxRuntime.jsx("select",{value:e.action,onChange:p=>u(p.target.value),style:ne,children:me.map(p=>jsxRuntime.jsx("option",{value:p.value,children:p.label},p.value))})]}),n.rules.length>1&&jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#64748b"},children:"Match"}),jsxRuntime.jsx("button",{type:"button",onClick:()=>b("and"),style:{...xe,backgroundColor:n.logic==="and"?"#2563eb":"#f1f5f9",color:n.logic==="and"?"#fff":"#64748b"},children:"ALL (AND)"}),jsxRuntime.jsx("button",{type:"button",onClick:()=>b("or"),style:{...xe,backgroundColor:n.logic==="or"?"#2563eb":"#f1f5f9",color:n.logic==="or"?"#fff":"#64748b"},children:"ANY (OR)"})]}),n.rules.map(p=>jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxRuntime.jsxs("select",{value:p.variableCode,onChange:f=>c(p.id,{variableCode:f.target.value}),style:{...ne,flex:1},children:[jsxRuntime.jsx("option",{value:"",children:"Variable..."}),r.map(f=>jsxRuntime.jsxs("option",{value:f.code,children:[f.name," (",f.code,")"]},f.code))]}),jsxRuntime.jsx("select",{value:p.operator,onChange:f=>c(p.id,{operator:f.target.value}),style:{...ne,width:"90px"},children:Le.map(f=>jsxRuntime.jsx("option",{value:f.value,children:f.label},f.value))}),!Me.includes(p.operator)&&jsxRuntime.jsx("input",{type:"text",value:p.value,onChange:f=>c(p.id,{value:f.target.value}),placeholder:"Value",style:{...j,flex:1}}),jsxRuntime.jsx("button",{type:"button",onClick:()=>g(p.id),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px"},children:"\xD7"})]},p.id)),jsxRuntime.jsx("button",{type:"button",onClick:m,style:{padding:"4px 8px",border:"1px dashed #cbd5e1",borderRadius:"4px",backgroundColor:"transparent",color:"#64748b",fontSize:"11px",cursor:"pointer"},children:"+ Add rule"}),e.expression&&jsxRuntime.jsx("div",{style:{padding:"6px 8px",backgroundColor:"#f0fdf4",borderRadius:"4px",fontSize:"11px",fontFamily:"monospace",color:"#166534",wordBreak:"break-all"},children:e.expression}),a&&e.expression&&(()=>{let p=formCore.RosterConditionEngine.validateCondition(e.expression,a.variables,a.currentVariableCode,a.currentVariableOrder);return p.isValid?null:jsxRuntime.jsx("div",{"data-testid":"condition-builder-roster-errors",style:{padding:"6px 8px",backgroundColor:"#fef2f2",border:"1px solid #fecaca",borderRadius:"4px",fontSize:"11px",color:"#b91c1c",display:"flex",flexDirection:"column",gap:"4px"},children:p.errors.map((f,S)=>jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("strong",{children:f.type}),f.variableCode?`: \${${f.variableCode}}`:""," \u2014 ",f.message]},S))})})(),e.action==="validate"&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Error message"}),jsxRuntime.jsx("input",{type:"text",value:e.errorMessage??"",onChange:p=>i({errorMessage:p.target.value||void 0}),placeholder:"Validation error message",style:j})]}),e.action==="setValue"&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Target variable code"}),jsxRuntime.jsx("input",{type:"text",value:e.targetVariableCode??"",onChange:p=>i({targetVariableCode:p.target.value||void 0}),placeholder:"TARGET_VAR",style:j})]}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:"Value to set"}),jsxRuntime.jsx("input",{type:"text",value:e.setValue!==void 0?String(e.setValue):"",onChange:p=>i({setValue:p.target.value}),placeholder:"Value",style:j})]})]})]})]})}function He(e){return {equals:"==",not_equals:"!=",contains:"contains",not_contains:"!contains",starts_with:"startsWith",ends_with:"endsWith",greater_than:">",less_than:"<",greater_than_or_equal:">=",less_than_or_equal:"<=",is_empty:"isEmpty",is_not_empty:"isNotEmpty",in:"in",not_in:"!in",between:"between",regex:"regex"}[e]??"=="}function ge(e,l){if(e.rules.length===0)return "";let s=e.rules.filter(t=>t.variableCode).map(t=>{let r=`\${${t.variableCode}}`,a=He(t.operator);if(t.operator==="is_empty")return `isEmpty(${r})`;if(t.operator==="is_not_empty")return `isNotEmpty(${r})`;if(t.operator==="contains")return `contains(${r}, "${t.value}")`;if(t.operator==="starts_with")return `startsWith(${r}, "${t.value}")`;if(t.operator==="ends_with")return `endsWith(${r}, "${t.value}")`;let n=/^\d+(\.\d+)?$/.test(t.value)?t.value:`"${t.value}"`;return `${r} ${a} ${n}`});if(s.length===0)return "";let i=s.join(e.logic==="and"?" && ":" || ");return l==="show"?`show(${i})`:l==="hide"?`hide(${i})`:l==="validate"?`ConditionEval(${i})`:i}function qe(e){return {logic:"and",rules:[]}}var ne={padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none"},j={width:"100%",padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"},xe={padding:"2px 8px",borderRadius:"10px",border:"none",fontSize:"10px",fontWeight:600,cursor:"pointer"};function ie({dataSourceId:e,dependencies:l={},availableConnectors:s,availableVariables:i,onConnectorChange:t,onDependenciesChange:r}){let[a,n]=oo.useState(""),o=s.find(c=>c.id===e),d=Object.entries(l),u=()=>{a.trim()&&(r({...l,[a.trim()]:""}),n(""));},m=c=>{let b={...l};delete b[c],r(b);},g=(c,b)=>{r({...l,[c]:b});};return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",padding:"8px",backgroundColor:"#f0fdf4",borderRadius:"6px"},children:[jsxRuntime.jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#166534",textTransform:"uppercase",letterSpacing:"0.5px"},children:"Data Source Connector"}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:Ke,children:"Connector"}),jsxRuntime.jsxs("select",{value:e??"",onChange:c=>{let b=c.target.value||void 0;t(b),b||r({});},style:he,children:[jsxRuntime.jsx("option",{value:"",children:"None (static options)"}),s.map(c=>jsxRuntime.jsxs("option",{value:c.id,children:[c.name," (",c.id,")"]},c.id))]})]}),o&&jsxRuntime.jsxs("div",{style:{fontSize:"11px",color:"#166534",padding:"4px 6px",backgroundColor:"#dcfce7",borderRadius:"4px"},children:["Connected to: ",jsxRuntime.jsx("strong",{children:o.name})]}),e&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{style:{fontSize:"11px",fontWeight:500,color:"#166534"},children:["Dependencies (",d.length,")"]}),d.map(([c,b])=>jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#334155",minWidth:"60px",fontFamily:"monospace"},children:c}),jsxRuntime.jsx("span",{style:{fontSize:"11px",color:"#94a3b8"},children:"\u2192"}),jsxRuntime.jsxs("select",{value:b,onChange:y=>g(c,y.target.value),style:{...he,flex:1},children:[jsxRuntime.jsx("option",{value:"",children:"Select variable..."}),i.map(y=>jsxRuntime.jsxs("option",{value:y.code,children:[y.name," (",y.code,")"]},y.code))]}),jsxRuntime.jsx("button",{type:"button",onClick:()=>m(c),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px"},children:"\xD7"})]},c)),jsxRuntime.jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsxRuntime.jsx("input",{type:"text",value:a,onChange:c=>n(c.target.value),placeholder:"Dependency key (e.g. parentId)",style:{...Je,flex:1},onKeyDown:c=>c.key==="Enter"&&u()}),jsxRuntime.jsx("button",{type:"button",onClick:u,disabled:!a.trim(),style:{padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",backgroundColor:"#fff",color:"#2563eb",fontSize:"11px",cursor:"pointer",opacity:a.trim()?1:.5},children:"+ Add"})]})]})]})}var Ke={fontSize:"11px",fontWeight:500,color:"#166534",display:"block",marginBottom:"2px"},he={width:"100%",padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",backgroundColor:"#fff"},Je={padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"};function Xe(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"")}function le(e){return typeof e=="string"?e:e==null?"":String(e)}function Ce({options:e,onChange:l,disabled:s}){let i=(g,c)=>{let b=e.map((y,p)=>p===g?{...y,...c}:y);l(b);},t=(g,c)=>{let b=e[g];le(b.value)===""&&c?i(g,{label:c,value:Xe(c)}):i(g,{label:c});},r=(g,c)=>{i(g,{value:c});},a=()=>{l([...e,{label:"",value:""}]);},n=g=>{l(e.filter((c,b)=>b!==g));},o={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},d={flex:1,padding:"6px 8px",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"},u="1px solid #e2e8f0",m="1px solid #ef4444";return jsxRuntime.jsxs("div",{"data-testid":"options-editor",children:[jsxRuntime.jsxs("label",{style:o,children:["Options (",e.length,")"]}),e.length===0&&jsxRuntime.jsx("div",{"data-testid":"options-editor-empty",style:{fontSize:"12px",color:"#94a3b8",marginBottom:"8px"},children:"No options yet \u2014 add one to populate the choices."}),jsxRuntime.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:e.map((g,c)=>{let b=le(g.label),y=le(g.value),p=b.trim()==="",f=y.trim()==="";return jsxRuntime.jsxs("div",{"data-testid":`option-row-${c}`,style:{display:"flex",alignItems:"center",gap:"6px"},children:[jsxRuntime.jsx("input",{type:"text","aria-label":`Option ${c+1} label`,"data-testid":`option-label-${c}`,value:b,placeholder:"Label",disabled:s,onChange:S=>t(c,S.target.value),style:{...d,border:p?m:u}}),jsxRuntime.jsx("input",{type:"text","aria-label":`Option ${c+1} value`,"data-testid":`option-value-${c}`,value:y,placeholder:"value",disabled:s,onChange:S=>r(c,S.target.value),style:{...d,border:f?m:u,maxWidth:"40%"}}),jsxRuntime.jsx("button",{type:"button","aria-label":`Remove option ${c+1}`,"data-testid":`option-remove-${c}`,onClick:()=>n(c),disabled:s,style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:s?"not-allowed":"pointer",lineHeight:1,fontSize:"14px"},children:"\xD7"})]},c)})}),jsxRuntime.jsx("button",{type:"button","data-testid":"options-editor-add",onClick:a,disabled:s,style:{marginTop:"8px",padding:"6px 10px",border:"1px dashed #94a3b8",borderRadius:"4px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:s?"not-allowed":"pointer"},children:"+ Ajouter une option"})]})}var Qe=[{value:"text",label:"Text"},{value:"textarea",label:"Text Area"},{value:"number",label:"Number"},{value:"date",label:"Date"},{value:"datetime",label:"Date Time"},{value:"time",label:"Time"},{value:"select",label:"Dropdown"},{value:"multiselect",label:"Multi Select"},{value:"radio",label:"Radio"},{value:"checkbox",label:"Checkbox"},{value:"file",label:"File Upload"},{value:"gps",label:"GPS Location"},{value:"rating",label:"Rating (stars)"},{value:"calculated",label:"Calculated"},{value:"hidden",label:"Hidden"},{value:"label",label:"Label (display only)"}];function Se({variable:e,pageCode:l,rosterCode:s,availableConnectors:i=[]}){let{form:t,updateVariable:r}=C(),a=o=>{r(l,e.code,o,s);},n=t.pages.flatMap(o=>[...o.variables.map(d=>({code:d.code,name:d.name})),...o.rosters.flatMap(d=>d.variables.map(u=>({code:u.code,name:u.name})))]);return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(k,{label:"Name",value:e.name,onChange:o=>a({name:o})}),jsxRuntime.jsx(k,{label:"Code",value:e.code,onChange:()=>{}}),jsxRuntime.jsx(k,{label:"Description",value:e.description??"",onChange:o=>a({description:o||void 0})}),jsxRuntime.jsx(k,{label:"Placeholder",value:e.placeholder??"",onChange:o=>a({placeholder:o||void 0})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Type"}),jsxRuntime.jsx("select",{value:e.type,onChange:o=>a({type:o.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:Qe.map(o=>jsxRuntime.jsx("option",{value:o.value,children:o.label},o.value))})]}),e.type==="rating"&&jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Rating style"}),jsxRuntime.jsxs("select",{value:e.metadata?.ratingStyle??"star",onChange:o=>a({metadata:{...e.metadata,ratingStyle:o.target.value}}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsxRuntime.jsx("option",{value:"star",children:"\u2605 Stars"}),jsxRuntime.jsx("option",{value:"number",children:"123 Numbers"}),jsxRuntime.jsx("option",{value:"color",children:"\u25CF Color dots"})]})]}),jsxRuntime.jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"6px"},children:[jsxRuntime.jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase"},children:"Layout"}),jsxRuntime.jsx(X,{label:"Start new row",checked:e.startWithNewLine!==false,onChange:o=>a({startWithNewLine:o?void 0:false})}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"2px"},children:"Column span (1-12)"}),jsxRuntime.jsxs("select",{value:e.colSpan??"auto",onChange:o=>a({colSpan:o.target.value==="auto"?void 0:parseInt(o.target.value)}),style:{width:"100%",padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsxRuntime.jsx("option",{value:"auto",children:"Auto (equal share)"}),[1,2,3,4,5,6,7,8,9,10,11,12].map(o=>jsxRuntime.jsxs("option",{value:o,children:[o,"/12",o===6?" (half)":o===4?" (third)":o===12?" (full)":""]},o))]})]})]}),jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsxRuntime.jsx(X,{label:"Required",checked:e.isRequired,onChange:o=>a({isRequired:o})}),jsxRuntime.jsx(X,{label:"Read only",checked:e.isReadonly,onChange:o=>a({isReadonly:o})}),jsxRuntime.jsx(X,{label:"Hidden by default",checked:e.isHidden,onChange:o=>a({isHidden:o})})]}),e.type==="calculated"&&jsxRuntime.jsx(k,{label:"Expression",value:e.expression??"",onChange:o=>a({expression:o||void 0}),multiline:true}),["select","multiselect","radio"].includes(e.type)&&jsxRuntime.jsx(ie,{dataSourceId:e.dataSourceId,dependencies:e.dataSourceDependencies,availableConnectors:i,availableVariables:n,onConnectorChange:o=>a({dataSourceId:o}),onDependenciesChange:o=>a({dataSourceDependencies:Object.keys(o).length>0?o:void 0})}),["select","multiselect","radio","checkbox"].includes(e.type)&&!e.dataSourceId&&jsxRuntime.jsx(Ce,{options:e.options??[],onChange:o=>a({options:o})}),jsxRuntime.jsx(ae,{conditions:e.conditions??[],onChange:o=>a({conditions:o}),availableVariables:n,rosterContext:(()=>{if(!s)return;let d=t.pages.find(u=>u.code===l)?.rosters.find(u=>u.code===s);if(d)return {variables:d.variables.map(u=>({code:u.code,order:u.order})),currentVariableCode:e.code,currentVariableOrder:e.order}})()})]})}function X({label:e,checked:l,onChange:s}){return jsxRuntime.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsxRuntime.jsx("input",{type:"checkbox",checked:l,onChange:i=>s(i.target.checked)}),e]})}var Ze=[{value:"check",label:"Check (multi-select checkboxes)"},{value:"list",label:"List (dropdown per row)"},{value:"collection",label:"Collection"},{value:"collection_extend",label:"Collection Extended"}];function Re({roster:e,pageCode:l}){let{updateRoster:s}=C();return jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsxRuntime.jsx(k,{label:"Name",value:e.name,onChange:i=>s(l,e.code,{name:i})}),jsxRuntime.jsx(k,{label:"Code",value:e.code,onChange:()=>{}}),jsxRuntime.jsxs("div",{children:[jsxRuntime.jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:"Roster Type"}),jsxRuntime.jsx("select",{value:e.rosterType,onChange:i=>s(l,e.code,{rosterType:i.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:Ze.map(i=>jsxRuntime.jsx("option",{value:i.value,children:i.label},i.value))})]}),jsxRuntime.jsx(k,{label:"Pilot variable code",value:e.pilotVariableCode??"",onChange:i=>s(l,e.code,{pilotVariableCode:i||void 0})}),jsxRuntime.jsxs("div",{style:{fontSize:"12px",color:"#94a3b8"},children:[e.variables.length," variables \xB7 ",e.options?.length??0," options"]})]})}function pe({availableConnectors:e=[]}){let{selection:l,form:s}=C(),i=(()=>{switch(l.type){case "form":return jsxRuntime.jsx(M,{});case "page":{let t=s.pages.find(r=>r.code===l.pageCode);return t?jsxRuntime.jsx(be,{page:t}):jsxRuntime.jsx(M,{})}case "roster":{let t=s.pages.find(a=>a.code===l.pageCode),r=t?.rosters.find(a=>a.code===l.rosterCode);return !t||!r?jsxRuntime.jsx(M,{}):jsxRuntime.jsx(Re,{roster:r,pageCode:t.code})}case "variable":{let t=s.pages.find(o=>o.code===l.pageCode);if(!t)return jsxRuntime.jsx(M,{});let r=l.rosterCode?t.rosters.find(o=>o.code===l.rosterCode):void 0,n=(r?r.variables:t.variables).find(o=>o.code===l.variableCode);return n?jsxRuntime.jsx(Se,{variable:n,pageCode:t.code,rosterCode:l.rosterCode,availableConnectors:e}):jsxRuntime.jsx(M,{})}}})();return jsxRuntime.jsxs("div",{style:{width:"300px",borderLeft:"1px solid #e2e8f0",backgroundColor:"#fff",overflowY:"auto"},children:[jsxRuntime.jsx("div",{style:{padding:"12px 16px",borderBottom:"1px solid #e2e8f0",fontSize:"12px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:"Properties"}),jsxRuntime.jsx("div",{style:{padding:"16px"},children:i})]})}function to({theme:e,dataSources:l,adapter:s,initialForm:i,formId:t,onChange:r,onSave:a,PreviewComponent:n,ToolboxComponent:o,CanvasComponent:d,Wrapper:u}){let{form:m,view:g,setForm:c,setAdapter:b,load:y}=C();oo.useEffect(()=>{s&&b(s);},[s,b]),oo.useEffect(()=>{i?c(i):t&&s?.loadForm&&y(t);},[i,t]);let p=oo.useRef(r),f=oo.useRef(true);p.current=r,oo.useEffect(()=>{if(f.current){f.current=false;return}p.current?.(m);},[m]);let S=o??oe,z=d??re,T=u??oo__default.default.Fragment,Q=jsxRuntime.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsxRuntime.jsx(ee,{onSave:a}),jsxRuntime.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[g==="canvas"&&jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(S,{}),jsxRuntime.jsx(z,{}),jsxRuntime.jsx(pe,{availableConnectors:l?Object.values(l):[]})]}),g==="preview"&&n&&jsxRuntime.jsx("div",{style:{flex:1,overflow:"auto"},children:jsxRuntime.jsx(n,{formSchema:m,theme:e,dataSources:l,mode:"fill"})}),g==="preview"&&!n&&jsxRuntime.jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:"Pass PreviewComponent prop to enable preview"}),g==="json"&&jsxRuntime.jsx("div",{style:{flex:1,overflow:"auto",padding:"16px"},children:jsxRuntime.jsx("pre",{style:{fontFamily:"monospace",fontSize:"12px",color:"#334155",backgroundColor:"#f8fafc",padding:"16px",borderRadius:"8px",border:"1px solid #e2e8f0",whiteSpace:"pre-wrap",wordBreak:"break-all"},children:JSON.stringify(m,null,2)})})]})]});return jsxRuntime.jsx(T,{children:Q})}exports.Canvas=re;exports.ConditionBuilder=ae;exports.DataSourceSelector=ie;exports.EditorToolbar=ee;exports.FormEditor=to;exports.PropertiesPanel=pe;exports.Toolbox=oe;exports.useEditorStore=C;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|