@msbci/form-editor 1.2.0 → 1.3.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/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import No,{createContext,useContext,useState,useMemo,useEffect,useRef}from'react';import {create}from'zustand';import {deserializeForm,serializeForm,generateId,deepClone,DEFAULT_LANG_CONFIG,resolveLabel,RosterConditionEngine}from'@msbci/form-core';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var Ke=50;function Ye(){return {id:"",code:"",name:"New Form",version:"1.0.0",isPublished:false,pages:[]}}var h=create((e,n)=>{function d(t){let r=n(),o={form:deepClone(r.form),description:t,timestamp:Date.now()},l=r.history.slice(0,r.historyIndex+1);l.push(o),l.length>Ke&&l.shift(),e({history:l,historyIndex:l.length-1});}function a(t,r){d(t);let o=n(),l=r(deepClone(o.form));e({form:l,isDirty:true});}return {form:Ye(),formTypes:[],selection:{type:"form"},view:"canvas",isDirty:false,isSaving:false,history:[],historyIndex:-1,adapter:null,setForm:t=>{e({form:deepClone(t),isDirty:false,history:[],historyIndex:-1,selection:{type:"form"}});},updateFormMeta:t=>{a("Update form metadata",r=>({...r,...t}));},addPage:t=>{a(`Add page "${t.name}"`,r=>({...r,pages:[...r.pages,t]}));},updatePage:(t,r)=>{a(`Update page "${t}"`,o=>({...o,pages:o.pages.map(l=>l.code===t?{...l,...r}:l)}));},removePage:t=>{a(`Remove page "${t}"`,o=>({...o,pages:o.pages.filter(l=>l.code!==t)}));let r=n();r.selection.type==="page"&&r.selection.pageCode===t&&e({selection:{type:"form"}});},reorderPages:t=>{a("Reorder pages",r=>{let o=new Map(r.pages.map(s=>[s.code,s])),l=t.map((s,u)=>{let p=o.get(s);return p?{...p,order:u}:void 0}).filter(s=>s!==void 0);return {...r,pages:l}});},addRoster:(t,r)=>{a(`Add roster "${r.name}" to page "${t}"`,o=>({...o,pages:o.pages.map(l=>l.code===t?{...l,rosters:[...l.rosters,r]}:l)}));},updateRoster:(t,r,o)=>{a(`Update roster "${r}"`,l=>({...l,pages:l.pages.map(s=>s.code===t?{...s,rosters:s.rosters.map(u=>u.code===r?{...u,...o}:u)}:s)}));},removeRoster:(t,r)=>{a(`Remove roster "${r}"`,o=>({...o,pages:o.pages.map(l=>l.code===t?{...l,rosters:l.rosters.filter(s=>s.code!==r)}:l)}));},addVariable:(t,r,o)=>{a(`Add variable "${r.name}"`,l=>({...l,pages:l.pages.map(s=>s.code!==t?s:o?{...s,rosters:s.rosters.map(u=>u.code===o?{...u,variables:[...u.variables,r]}:u)}:{...s,variables:[...s.variables,r]})}));},updateVariable:(t,r,o,l)=>{a(`Update variable "${r}"`,s=>({...s,pages:s.pages.map(u=>u.code!==t?u:l?{...u,rosters:u.rosters.map(p=>p.code===l?{...p,variables:p.variables.map(b=>b.code===r?{...b,...o}:b)}:p)}:{...u,variables:u.variables.map(p=>p.code===r?{...p,...o}:p)})}));},removeVariable:(t,r,o)=>{a(`Remove variable "${r}"`,l=>({...l,pages:l.pages.map(s=>s.code!==t?s:o?{...s,rosters:s.rosters.map(u=>u.code===o?{...u,variables:u.variables.filter(p=>p.code!==r)}:u)}:{...s,variables:s.variables.filter(u=>u.code!==r)})}));},moveVariable:(t,r,o,l,s,u)=>{a(`Move variable "${o}"`,p=>{let b,i=p.pages.map(c=>{if(c.code!==t)return c;if(s)return {...c,rosters:c.rosters.map(g=>{if(g.code!==s)return g;let m=g.variables.find(y=>y.code===o);return m&&(b={...m}),{...g,variables:g.variables.filter(y=>y.code!==o)}})};let f=c.variables.find(g=>g.code===o);return f&&(b={...f}),{...c,variables:c.variables.filter(g=>g.code!==o)}});if(!b)return p;b.order=l;let x=i.map(c=>{if(c.code!==r)return c;if(u)return {...c,rosters:c.rosters.map(g=>{if(g.code!==u)return g;let m=[...g.variables,b].sort((y,P)=>y.order-P.order);return {...g,variables:m}})};let f=[...c.variables,b].sort((g,m)=>g.order-m.order);return {...c,variables:f}});return {...p,pages:x}});},select:t=>e({selection:t}),clearSelection:()=>e({selection:{type:"form"}}),setView:t=>e({view:t}),undo:()=>{let{history:t,historyIndex:r,form:o}=n();if(!(r<0))if(r===t.length-1){let l={form:deepClone(o),description:"Current state",timestamp:Date.now()};e({form:deepClone(t[r].form),historyIndex:r-1,isDirty:true,history:[...t,l]});}else e({form:deepClone(t[r].form),historyIndex:r-1,isDirty:true});},redo:()=>{let{history:t,historyIndex:r}=n();if(r>=t.length-2)return;let o=r+2;o<t.length&&e({form:deepClone(t[o].form),historyIndex:o-1,isDirty:true});},canUndo:()=>n().historyIndex>=0,canRedo:()=>{let{history:t,historyIndex:r}=n();return r<t.length-2},addFormType:t=>{let r={...t,id:generateId()};e(o=>({formTypes:[...o.formTypes,r]}));},updateFormType:(t,r)=>{e(o=>({formTypes:o.formTypes.map(l=>l.id===t?{...l,...r}:l)}));},removeFormType:t=>{let r=n();if(r.form.formTypeId===t){let{formTypeId:o,...l}=r.form;e({form:{...l}});}e(o=>({formTypes:o.formTypes.filter(l=>l.id!==t)}));},setAdapter:t=>e({adapter:t}),save:async()=>{let{adapter:t,form:r}=n();if(t?.saveForm){e({isSaving:true});try{await t.saveForm(r),e({isDirty:!1});}finally{e({isSaving:false});}}},load:async t=>{let{adapter:r}=n();if(!r?.loadForm)return;let o=await r.loadForm(t);n().setForm(o);},exportJson:()=>serializeForm(n().form),importJson:t=>{let r=deserializeForm(t);n().setForm(r);}}});var W={toolbar:{formNamePlaceholder:"Nom du formulaire",unsaved:"Non sauvegard\xE9",addPage:"+ Page",types:"Types",manageFormTypesTitle:"G\xE9rer les types de formulaire",undo:"Annuler",redo:"R\xE9tablir",save:"Enregistrer",saving:"Enregistrement...",export:"Exporter",import:"Importer",viewEditor:"\xC9diteur",viewPreview:"Aper\xE7u",viewJson:"JSON"},toolbox:{searchPlaceholder:"Rechercher...",addPageFirst:"Ajoutez d\u2019abord une page",groupText:"Texte",groupSelection:"S\xE9lection",groupDateTime:"Date et heure",groupMedia:"M\xE9dias",groupAdvanced:"Avanc\xE9",types:{text:"Texte court",textarea:"Zone de texte",number:"Nombre",email:"Email",select:"Liste d\xE9roulante",multiselect:"Multi-s\xE9lection",radio:"Boutons radio",checkbox:"Cases \xE0 cocher",date:"Date",datetime:"Date et heure",time:"Heure",file:"Fichier",image:"Image",gps:"GPS",rating:"Note (\xE9toiles)",calculated:"Calcul\xE9",hidden:"Masqu\xE9",label:"\xC9tiquette"}},canvas:{emptyStateNoPage:"Cliquez sur \xAB + Page \xBB dans la barre d\u2019outils pour commencer",emptyStateNoPageDnd:"Glissez un champ depuis la bo\xEEte \xE0 outils ou ajoutez une page pour commencer",emptyStatePage:"Cliquez sur un type de champ dans la bo\xEEte \xE0 outils pour l\u2019ajouter ici",unnamedPage:"Page sans nom",repeatable:"R\xE9p\xE9table",fieldsRostersCount:(e,n)=>`${e} champ${e>1?"s":""} \xB7 ${n} roster${n>1?"s":""}`,fieldsCount:e=>`${e} champ${e>1?"s":""}`,rosterVarsCount:e=>`${e} variable${e>1?"s":""}`,addRoster:"+ Ajouter un roster",addFieldToRoster:"+ Ajouter un champ au roster",pilotPrefix:"pilote :",newRosterName:"Nouveau roster",newFieldName:"Nouveau champ",newVariableName:e=>`Nouveau ${e.toLowerCase()}`,hasConditionsTitle:"Contient des conditions",dataSourceConnectedTitle:"Source de donn\xE9es connect\xE9e"},properties:{title:"Propri\xE9t\xE9s",name:"Nom",code:"Code",description:"Description",placeholder:"Placeholder",version:"Version",formType:"Type de formulaire",noType:"\u2014 Aucun type \u2014",formSummary:(e,n)=>`${e} page${e>1?"s":""} \xB7 ${n} variable${n>1?"s":""}`,pageSummary:(e,n)=>`${e} variable${e>1?"s":""} \xB7 ${n} roster${n>1?"s":""}`,rosterSummary:(e,n)=>`${e} variable${e>1?"s":""} \xB7 ${n} option${n>1?"s":""}`,repeatablePage:"Page r\xE9p\xE9table",minInstances:"Minimum d\u2019instances",maxInstances:"Maximum d\u2019instances",controlVariableCode:"Code de la variable de contr\xF4le",instanceLabel:"Mod\xE8le de libell\xE9 d\u2019instance",rosterType:"Type de roster",pilotVariableCode:"Code de la variable pilote",rosterTypes:{check:"Cases \xE0 cocher (s\xE9lection multiple)",list:"Liste (dropdown par ligne)",collection:"Collection (ajout/suppression de lignes)",collection_extend:"Collection \xE9tendue (vue tableau)"},type:"Type",ratingStyle:"Style de notation",ratingStyles:{star:"\u2605 \xC9toiles",number:"123 Nombres",color:"\u25CF Points de couleur"},layout:"Mise en page",startNewRow:"Nouvelle ligne",columnSpan:"Largeur (colonnes, 1-12)",columnSpanAuto:"Auto (part \xE9gale)",columnSpanHalf:" (moiti\xE9)",columnSpanThird:" (tiers)",columnSpanFull:" (pleine largeur)",required:"Obligatoire",readonly:"Lecture seule",hidden:"Masqu\xE9 par d\xE9faut",expression:"Expression",langConfigSection:"Langues",langConfigAvailable:"Langues disponibles",langConfigDefault:"Langue par d\xE9faut",langConfigStrategy:"Strat\xE9gie de d\xE9tection",langConfigStrategies:{prop:"Propri\xE9t\xE9 (prop)",browser:"Navigateur",selector:"S\xE9lecteur dans le formulaire",auto:"Auto (navigateur puis d\xE9faut)"},langConfigSelectorPosition:"Position du s\xE9lecteur",langConfigPositions:{top:"Haut",bottom:"Bas"},langConfigConfirmRemove:e=>`Supprimer la langue \xAB ${e.toUpperCase()} \xBB supprimera toutes les traductions ${e.toUpperCase()}. Confirmer ?`,langConfigConfirmYes:"Supprimer",langConfigConfirmNo:"Annuler"},optionsEditor:{optionsCount:e=>`Options (${e})`,noOptions:"Aucune option. Ajoutez-en une pour peupler les choix.",optionLabelPlaceholder:"Libell\xE9",optionValuePlaceholder:"valeur",addOption:"+ Ajouter une option",optionLabelAria:e=>`Libell\xE9 de l\u2019option ${e+1}`,optionValueAria:e=>`Valeur de l\u2019option ${e+1}`,removeOptionAria:e=>`Supprimer l\u2019option ${e+1}`},conditionBuilder:{conditionsCount:e=>`Conditions (${e})`,addCondition:"+ Ajouter une condition",rulesCount:e=>` (${e} r\xE8gle${e>1?"s":""})`,addRule:"+ Ajouter une r\xE8gle",action:"Action",match:"Correspondance",all:"TOUT (ET)",any:"AU MOINS UN (OU)",actions:{show:"Afficher si",hide:"Masquer si",validate:"Valider que",require:"Obligatoire si",readonly:"Lecture seule si",setValue:"D\xE9finir la valeur si"},operators:{equals:"est \xE9gal \xE0",not_equals:"est diff\xE9rent de",greater_than:"est sup\xE9rieur \xE0",less_than:"est inf\xE9rieur \xE0",greater_than_or_equal:"est sup\xE9rieur ou \xE9gal \xE0",less_than_or_equal:"est inf\xE9rieur ou \xE9gal \xE0",contains:"contient",not_contains:"ne contient pas",is_empty:"est vide",is_not_empty:"n\u2019est pas vide",starts_with:"commence par",ends_with:"se termine par",in:"est dans la liste",not_in:"n\u2019est pas dans la liste",between:"est entre",regex:"correspond au pattern"},variablePlaceholder:"Variable...",valuePlaceholder:"Valeur",errorMessage:"Message d\u2019erreur",errorMessagePlaceholder:"Message d\u2019erreur de validation",targetVariableCode:"Code de la variable cible",targetVariablePlaceholder:"VAR_CIBLE",valueToSet:"Valeur \xE0 d\xE9finir",valueToSetPlaceholder:"Valeur"},dataSource:{title:"Source de donn\xE9es",connector:"Connecteur",none:"Aucune (options statiques)",connectedTo:"Connect\xE9 \xE0 :",dependencies:e=>`D\xE9pendances (${e})`,selectVariable:"S\xE9lectionner une variable...",dependencyKeyPlaceholder:"Cl\xE9 de d\xE9pendance (ex : parentId)",addDependency:"+ Ajouter"},formTypesDialog:{dialogAriaLabel:"Types de formulaires",title:"Types de formulaires",closeAriaLabel:"Fermer",noTypes:"Aucun type d\xE9fini. Ajoutez-en un ci-dessous.",confirmDelete:"Ce type est utilis\xE9 par le formulaire courant. Confirmer la suppression ?",deleteConfirm:"Supprimer",deleteCancel:"Annuler",removeTypeAria:e=>`Supprimer ${e}`,newTypeNamePlaceholder:"Nom du nouveau type",newTypeCodePlaceholder:"CODE (auto)",addButton:"+ Ajouter"},formEditor:{previewMissing:"Passer la prop PreviewComponent pour activer l\u2019aper\xE7u"}};var Re={toolbar:{formNamePlaceholder:"Form name",unsaved:"Unsaved",addPage:"+ Page",types:"Types",manageFormTypesTitle:"Manage form types",undo:"Undo",redo:"Redo",save:"Save",saving:"Saving...",export:"Export",import:"Import",viewEditor:"Editor",viewPreview:"Preview",viewJson:"JSON"},toolbox:{searchPlaceholder:"Search fields...",addPageFirst:"Add a page first",groupText:"Text",groupSelection:"Selection",groupDateTime:"Date & Time",groupMedia:"Media",groupAdvanced:"Advanced",types:{text:"Text",textarea:"Text Area",number:"Number",email:"Email",select:"Dropdown",multiselect:"Multi Select",radio:"Radio",checkbox:"Checkbox",date:"Date",datetime:"DateTime",time:"Time",file:"File",image:"Image",gps:"GPS",rating:"Rating (stars)",calculated:"Calculated",hidden:"Hidden",label:"Label"}},canvas:{emptyStateNoPage:'Click "+ Page" in the toolbar to get started',emptyStateNoPageDnd:"Drag a field from the toolbox or add a page to get started",emptyStatePage:"Click a field type in the toolbox to add it here",unnamedPage:"Unnamed Page",repeatable:"Repeatable",fieldsRostersCount:(e,n)=>`${e} field${e===1?"":"s"} \xB7 ${n} roster${n===1?"":"s"}`,fieldsCount:e=>`${e} field${e===1?"":"s"}`,rosterVarsCount:e=>`${e} var${e===1?"":"s"}`,addRoster:"+ Add Roster",addFieldToRoster:"+ Add field to roster",pilotPrefix:"pilot:",newRosterName:"New Roster",newFieldName:"New field",newVariableName:e=>`New ${e}`,hasConditionsTitle:"Has conditions",dataSourceConnectedTitle:"Data source connected"},properties:{title:"Properties",name:"Name",code:"Code",description:"Description",placeholder:"Placeholder",version:"Version",formType:"Form type",noType:"\u2014 No type \u2014",formSummary:(e,n)=>`${e} page${e===1?"":"s"} \xB7 ${n} variable${n===1?"":"s"}`,pageSummary:(e,n)=>`${e} variable${e===1?"":"s"} \xB7 ${n} roster${n===1?"":"s"}`,rosterSummary:(e,n)=>`${e} variable${e===1?"":"s"} \xB7 ${n} option${n===1?"":"s"}`,repeatablePage:"Repeatable page",minInstances:"Min instances",maxInstances:"Max instances",controlVariableCode:"Control variable code",instanceLabel:"Instance label template",rosterType:"Roster Type",pilotVariableCode:"Pilot variable code",rosterTypes:{check:"Check (multi-select checkboxes)",list:"List (dropdown per row)",collection:"Collection (add/remove rows)",collection_extend:"Collection Extended (table view)"},type:"Type",ratingStyle:"Rating style",ratingStyles:{star:"\u2605 Stars",number:"123 Numbers",color:"\u25CF Color dots"},layout:"Layout",startNewRow:"Start new row",columnSpan:"Column span (1-12)",columnSpanAuto:"Auto (equal share)",columnSpanHalf:" (half)",columnSpanThird:" (third)",columnSpanFull:" (full)",required:"Required",readonly:"Read only",hidden:"Hidden by default",expression:"Expression",langConfigSection:"Languages",langConfigAvailable:"Available languages",langConfigDefault:"Default language",langConfigStrategy:"Detection strategy",langConfigStrategies:{prop:"Prop (host-controlled)",browser:"Browser",selector:"In-form selector",auto:"Auto (browser then default)"},langConfigSelectorPosition:"Selector position",langConfigPositions:{top:"Top",bottom:"Bottom"},langConfigConfirmRemove:e=>`Removing "${e.toUpperCase()}" will delete every ${e.toUpperCase()} translation. Confirm?`,langConfigConfirmYes:"Delete",langConfigConfirmNo:"Cancel"},optionsEditor:{optionsCount:e=>`Options (${e})`,noOptions:"No options yet \u2014 add one to populate the choices.",optionLabelPlaceholder:"Label",optionValuePlaceholder:"value",addOption:"+ Add option",optionLabelAria:e=>`Option ${e+1} label`,optionValueAria:e=>`Option ${e+1} value`,removeOptionAria:e=>`Remove option ${e+1}`},conditionBuilder:{conditionsCount:e=>`Conditions (${e})`,addCondition:"+ Add condition",rulesCount:e=>` (${e} rule${e===1?"":"s"})`,addRule:"+ Add rule",action:"Action",match:"Match",all:"ALL (AND)",any:"ANY (OR)",actions:{show:"Show when",hide:"Hide when",validate:"Validate that",require:"Require when",readonly:"Read-only when",setValue:"Set value when"},operators:{equals:"equals",not_equals:"not equals",greater_than:"greater than",less_than:"less than",greater_than_or_equal:"greater than or equal",less_than_or_equal:"less than or equal",contains:"contains",not_contains:"not contains",is_empty:"is empty",is_not_empty:"is not empty",starts_with:"starts with",ends_with:"ends with",in:"in",not_in:"not in",between:"between",regex:"matches regex"},variablePlaceholder:"Variable...",valuePlaceholder:"Value",errorMessage:"Error message",errorMessagePlaceholder:"Validation error message",targetVariableCode:"Target variable code",targetVariablePlaceholder:"TARGET_VAR",valueToSet:"Value to set",valueToSetPlaceholder:"Value"},dataSource:{title:"Data Source Connector",connector:"Connector",none:"None (static options)",connectedTo:"Connected to:",dependencies:e=>`Dependencies (${e})`,selectVariable:"Select variable...",dependencyKeyPlaceholder:"Dependency key (e.g. parentId)",addDependency:"+ Add"},formTypesDialog:{dialogAriaLabel:"Form types",title:"Form types",closeAriaLabel:"Close",noTypes:"No form types yet. Add one below.",confirmDelete:"This type is used by the current form. Confirm deletion?",deleteConfirm:"Delete",deleteCancel:"Cancel",removeTypeAria:e=>`Remove ${e}`,newTypeNamePlaceholder:"New type name",newTypeCodePlaceholder:"CODE (auto)",addButton:"+ Add"},formEditor:{previewMissing:"Pass PreviewComponent prop to enable preview"}};var Le=createContext(W);function te({labels:e,children:n}){return jsx(Le.Provider,{value:e,children:n})}function C(){return useContext(Le)}function oe(e){if(e===null||typeof e!="object")return false;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function re(e,n){return n?Pe(e,n):e}function Pe(e,n){if(!oe(e)||!oe(n))return n===void 0?e:n;let d={...e};for(let a of Object.keys(n)){let t=e[a],r=n[a];oe(t)&&oe(r)?d[a]=Pe(t,r):r!==void 0&&(d[a]=r);}return d}function Ie({open:e,onClose:n}){let{formTypes:d,form:a,addFormType:t,updateFormType:r,removeFormType:o}=h(),l=C(),[s,u]=useState(""),[p,b]=useState(""),[i,x]=useState(null),[c,f]=useState(""),[g,m]=useState(null);if(!e)return null;let y=()=>{s.trim()&&(t({name:s.trim(),code:p.trim()||s.trim().toUpperCase().replace(/\s+/g,"_")}),u(""),b(""));},P=(v,le)=>{x(v),f(le);},z=()=>{i&&c.trim()&&r(i,{name:c.trim()}),x(null),f("");},w=v=>{a.formTypeId===v?m(v):o(v);},X=()=>{g&&o(g),m(null);};return jsx("div",{role:"dialog","aria-modal":"true","aria-label":l.formTypesDialog.dialogAriaLabel,"data-testid":"form-types-dialog",onClick:n,style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.3)",zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"},children:jsxs("div",{onClick:v=>v.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:[jsxs("header",{style:{padding:"16px",borderBottom:"1px solid #e2e8f0",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[jsx("h3",{style:{fontSize:"16px",fontWeight:600,margin:0},children:l.formTypesDialog.title}),jsx("button",{type:"button",onClick:n,"aria-label":l.formTypesDialog.closeAriaLabel,"data-testid":"form-types-dialog-close-x",style:{background:"transparent",border:"none",fontSize:"18px",cursor:"pointer",color:"#64748b",padding:"4px 8px"},children:"\xD7"})]}),jsxs("section",{style:{padding:"16px"},children:[d.length===0&&jsx("div",{"data-testid":"form-types-empty",style:{fontSize:"13px",color:"#94a3b8",marginBottom:"12px"},children:l.formTypesDialog.noTypes}),jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"6px"},children:d.map(v=>{let le=i===v.id,qe=a.formTypeId===v.id,Ue=g===v.id;return jsxs("li",{"data-testid":`form-type-row-${v.id}`,style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:"1px solid #e2e8f0",borderRadius:"6px",backgroundColor:qe?"#f1f5f9":"#fff"},children:[le?jsx("input",{type:"text",value:c,autoFocus:true,"data-testid":`form-type-name-edit-${v.id}`,onChange:ee=>f(ee.target.value),onBlur:z,onKeyDown:ee=>{ee.key==="Enter"&&z(),ee.key==="Escape"&&(x(null),f(""));},style:{flex:1,padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}):jsx("span",{"data-testid":`form-type-name-${v.id}`,onClick:()=>P(v.id,v.name),style:{flex:1,fontSize:"13px",cursor:"pointer",padding:"4px 8px"},children:v.name}),jsx("span",{style:{fontSize:"11px",color:"#94a3b8",fontFamily:"monospace"},children:v.code}),jsx("button",{type:"button","aria-label":l.formTypesDialog.removeTypeAria(v.name),"data-testid":`form-type-remove-${v.id}`,onClick:()=>w(v.id),style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:"pointer",fontSize:"14px",lineHeight:1},children:"\xD7"}),Ue&&jsxs("div",{"data-testid":`form-type-confirm-${v.id}`,style:{flexBasis:"100%",fontSize:"12px",color:"#b91c1c",backgroundColor:"#fef2f2",padding:"6px 8px",borderRadius:"4px",display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{flex:1},children:l.formTypesDialog.confirmDelete}),jsx("button",{type:"button","data-testid":`form-type-confirm-yes-${v.id}`,onClick:X,style:{padding:"4px 8px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:l.formTypesDialog.deleteConfirm}),jsx("button",{type:"button","data-testid":`form-type-confirm-no-${v.id}`,onClick:()=>m(null),style:{padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:l.formTypesDialog.deleteCancel})]})]},v.id)})})]}),jsxs("section",{style:{padding:"12px 16px",borderTop:"1px solid #e2e8f0",display:"flex",alignItems:"center",gap:"8px",backgroundColor:"#f8fafc"},children:[jsx("input",{type:"text",value:s,"data-testid":"form-types-new-name",placeholder:l.formTypesDialog.newTypeNamePlaceholder,onChange:v=>u(v.target.value),onKeyDown:v=>{v.key==="Enter"&&y();},style:{flex:1,padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}),jsx("input",{type:"text",value:p,"data-testid":"form-types-new-code",placeholder:l.formTypesDialog.newTypeCodePlaceholder,onChange:v=>b(v.target.value),style:{width:"120px",padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none",fontFamily:"monospace"}}),jsx("button",{type:"button","data-testid":"form-types-add",onClick:y,disabled:s.trim()==="",style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:s.trim()===""?"#cbd5e1":"#2563eb",color:"#fff",fontSize:"13px",cursor:s.trim()===""?"not-allowed":"pointer"},children:l.formTypesDialog.addButton})]})]})})}function de({onSave:e,onExport:n,onImport:d}){let{form:a,updateFormMeta:t,view:r,setView:o,isDirty:l,isSaving:s,canUndo:u,canRedo:p,undo:b,redo:i,save:x,addPage:c}=h(),f=C(),[g,m]=useState(false),y=async()=>{await x(),e?.();},P=()=>{let w=a.pages.length;c({id:`page-${Date.now()}`,code:`PAGE_${w+1}`,name:`Page ${w+1}`,order:w,isRepeatable:false,variables:[],rosters:[]});},z=[{view:"canvas",label:f.toolbar.viewEditor},{view:"preview",label:f.toolbar.viewPreview},{view:"json",label:f.toolbar.viewJson}];return jsxs("div",{style:{display:"flex",alignItems:"center",padding:"8px 16px",borderBottom:"1px solid #e2e8f0",backgroundColor:"#fff",gap:"8px"},children:[jsx("input",{type:"text",value:resolveLabel(a.name,a.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,a.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang),onChange:w=>{let X=a.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,v;typeof a.name=="string"?v=w.target.value:v={...a.name??{},[X]:w.target.value},t({name:v});},style:{border:"none",fontSize:"16px",fontWeight:600,color:"#1e293b",padding:"4px 8px",borderRadius:"4px",outline:"none",minWidth:"200px",backgroundColor:"transparent"},placeholder:f.toolbar.formNamePlaceholder}),l&&jsx("span",{style:{fontSize:"11px",color:"#f59e0b",fontWeight:500},children:f.toolbar.unsaved}),jsx("div",{style:{flex:1}}),jsx(H,{onClick:P,label:f.toolbar.addPage}),jsx(H,{onClick:()=>m(true),label:f.toolbar.types,title:f.toolbar.manageFormTypesTitle}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(H,{onClick:b,label:"\u21A9",disabled:!u(),title:f.toolbar.undo}),jsx(H,{onClick:i,label:"\u21AA",disabled:!p(),title:f.toolbar.redo}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx("div",{style:{display:"flex",borderRadius:"6px",overflow:"hidden",border:"1px solid #e2e8f0"},children:z.map(w=>jsx("button",{type:"button",onClick:()=>o(w.view),style:{padding:"4px 12px",fontSize:"12px",fontWeight:500,border:"none",cursor:"pointer",backgroundColor:r===w.view?"#2563eb":"#fff",color:r===w.view?"#fff":"#64748b"},children:w.label},w.view))}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(H,{onClick:y,label:s?f.toolbar.saving:f.toolbar.save,primary:true,disabled:s||!l}),n&&jsx(H,{onClick:n,label:f.toolbar.export}),d&&jsx(H,{onClick:d,label:f.toolbar.import}),jsx(Ie,{open:g,onClose:()=>m(false)})]})}function H({onClick:e,label:n,primary:d,disabled:a,title:t}){return jsx("button",{type:"button",onClick:e,disabled:a,title:t,style:{padding:"6px 12px",borderRadius:"6px",border:d?"none":"1px solid #e2e8f0",backgroundColor:d?"#2563eb":"#fff",color:d?"#fff":"#334155",fontSize:"13px",fontWeight:500,cursor:a?"default":"pointer",opacity:a?.5:1},children:n})}function pe(){let e=C(),[n,d]=useState(""),{form:a,selection:t,addVariable:r}=h(),o=useMemo(()=>[{label:e.toolbox.groupText,items:[{type:"text",label:e.toolbox.types.text,icon:"T"},{type:"textarea",label:e.toolbox.types.textarea,icon:"\xB6"},{type:"number",label:e.toolbox.types.number,icon:"#"},{type:"email",label:e.toolbox.types.email,icon:"@"}]},{label:e.toolbox.groupSelection,items:[{type:"select",label:e.toolbox.types.select,icon:"\u25BC"},{type:"multiselect",label:e.toolbox.types.multiselect,icon:"\u2611"},{type:"radio",label:e.toolbox.types.radio,icon:"\u25C9"},{type:"checkbox",label:e.toolbox.types.checkbox,icon:"\u2610"}]},{label:e.toolbox.groupDateTime,items:[{type:"date",label:e.toolbox.types.date,icon:"\u{1F4C5}"},{type:"datetime",label:e.toolbox.types.datetime,icon:"\u{1F550}"},{type:"time",label:e.toolbox.types.time,icon:"\u23F0"}]},{label:e.toolbox.groupMedia,items:[{type:"file",label:e.toolbox.types.file,icon:"\u{1F4CE}"},{type:"image",label:e.toolbox.types.image,icon:"\u{1F5BC}"},{type:"gps",label:e.toolbox.types.gps,icon:"\u{1F4CD}"}]},{label:e.toolbox.groupAdvanced,items:[{type:"rating",label:e.toolbox.types.rating,icon:"\u2605"},{type:"calculated",label:e.toolbox.types.calculated,icon:"fx"},{type:"hidden",label:e.toolbox.types.hidden,icon:"\u{1F441}"},{type:"label",label:e.toolbox.types.label,icon:"Aa"}]}],[e]),l=t.type==="page"||t.type==="variable"||t.type==="roster"?t.pageCode:a.pages[0]?.code,s=(p,b)=>{if(!l)return;let i=a.pages.find(c=>c.code===l);if(!i)return;let x=`${p.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`;r(l,{id:`var-${Date.now()}`,code:x,name:e.canvas.newVariableName(b),type:p,order:i.variables.length,isRequired:false,isReadonly:false,isHidden:false});},u=o.map(p=>({...p,items:p.items.filter(b=>b.label.toLowerCase().includes(n.toLowerCase()))})).filter(p=>p.items.length>0);return jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx("div",{style:{padding:"12px",borderBottom:"1px solid #e2e8f0"},children:jsx("input",{type:"text",placeholder:e.toolbox.searchPlaceholder,value:n,onChange:p=>d(p.target.value),style:{width:"100%",padding:"6px 10px",border:"1px solid #e2e8f0",borderRadius:"6px",fontSize:"13px",outline:"none",boxSizing:"border-box"}})}),jsxs("div",{style:{flex:1,overflowY:"auto",padding:"8px"},children:[!l&&jsx("div",{style:{padding:"12px",color:"#94a3b8",fontSize:"12px",textAlign:"center"},children:e.toolbox.addPageFirst}),u.map(p=>jsxs("div",{style:{marginBottom:"16px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#94a3b8",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"6px",padding:"0 4px"},children:p.label}),p.items.map(b=>jsxs("div",{onClick:()=>s(b.type,b.label),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:i=>{i.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:i=>{i.currentTarget.style.backgroundColor="transparent";},children:[jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:b.icon}),jsx("span",{children:b.label})]},b.type))]},p.label))]})]})}function ue(){let n=h(d=>d.form).langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang;return d=>resolveLabel(d,n,n)}function lo(e){let n=e.slice().sort((a,t)=>a.order-t.order),d=[];for(let a of n)a.startWithNewLine===false&&d.length>0?d[d.length-1].push(a):d.push([a]);return d}function fe(){let{form:e}=h(),n=C();return e.pages.length===0?jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:n.canvas.emptyStateNoPage}):jsx("div",{style:{flex:1,overflowY:"auto",padding:"16px",backgroundColor:"#fff"},children:e.pages.slice().sort((d,a)=>d.order-a.order).map(d=>jsx(so,{page:d},d.code))})}function so({page:e}){let{selection:n,select:d,removePage:a,addRoster:t}=h(),r=C(),o=ue(),l=n.type==="page"&&n.pageCode===e.code,s=u=>{u.stopPropagation();let p=`ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(e.code,{id:`roster-${Date.now()}`,code:p,name:r.canvas.newRosterName,rosterType:"collection",order:e.rosters.length,variables:[]});};return jsxs("div",{style:{marginBottom:"16px",border:`2px solid ${l?"#2563eb":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden"},children:[jsxs("div",{onClick:()=>d({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:l?"#eff6ff":"#f8fafc",borderBottom:"1px solid #e2e8f0",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{fontSize:"14px",fontWeight:600,color:"#1e293b"},children:o(e.name)||r.canvas.unnamedPage}),e.isRepeatable&&jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:r.canvas.repeatable})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{fontSize:"12px",color:"#94a3b8"},children:r.canvas.fieldsRostersCount(e.variables.length,e.rosters.length)}),jsx("button",{onClick:u=>{u.stopPropagation(),a(e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px 4px"},children:"\xD7"})]})]}),jsxs("div",{style:{padding:"4px 0"},children:[lo(e.variables).map((u,p)=>u.length===1?jsx(ce,{variable:u[0],pageCode:e.code},u[0].code):jsx("div",{style:{display:"flex",gap:"2px",backgroundColor:"#f0f4ff",borderLeft:"2px solid #c7d2fe",margin:"1px 0"},children:u.map(b=>jsx("div",{style:{flex:b.colSpan?`0 0 ${b.colSpan/12*100}%`:"1 1 0%",minWidth:0},children:jsx(ce,{variable:b,pageCode:e.code})},b.code))},`row-${p}`)),e.rosters.slice().sort((u,p)=>u.order-p.order).map(u=>jsx(po,{roster:u,pageCode:e.code},u.code)),e.variables.length===0&&e.rosters.length===0&&jsx("div",{style:{padding:"12px 14px",color:"#94a3b8",fontSize:"12px",fontStyle:"italic"},children:r.canvas.emptyStatePage})]}),jsx("div",{style:{padding:"6px 14px",borderTop:"1px solid #e2e8f0"},children:jsx("button",{onClick:s,style:{padding:"4px 10px",borderRadius:"4px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"11px",cursor:"pointer",fontWeight:500},children:r.canvas.addRoster})})]})}function ce({variable:e,pageCode:n,rosterCode:d}){let{selection:a,select:t,removeVariable:r}=h(),o=C(),l=ue(),s=a.type==="variable"&&a.variableCode===e.code;return jsxs("div",{onClick:u=>{u.stopPropagation(),t({type:"variable",pageCode:n,variableCode:e.code,rosterCode:d});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",cursor:"pointer",backgroundColor:s?"#eff6ff":"transparent",borderLeft:s?"3px solid #2563eb":"3px solid transparent",fontSize:"13px"},children:[jsx("span",{style:{color:"#94a3b8",fontSize:"11px",width:"60px",flexShrink:0},children:e.type}),jsx("span",{style:{color:"#334155",flex:1},children:l(e.name)||e.code}),e.isRequired&&jsx("span",{style:{color:"#ef4444",fontSize:"11px"},children:"*"}),e.conditions&&e.conditions.length>0&&jsx("span",{style:{color:"#f59e0b",fontSize:"11px"},title:o.canvas.hasConditionsTitle,children:"\u26A1"}),e.dataSourceId&&jsx("span",{style:{color:"#22c55e",fontSize:"11px"},title:o.canvas.dataSourceConnectedTitle,children:"\u27F3"}),jsx("button",{onClick:u=>{u.stopPropagation(),r(n,e.code,d);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px",padding:"0 2px",opacity:.5},children:"\xD7"})]})}function po({roster:e,pageCode:n}){let{selection:d,select:a,removeRoster:t,addVariable:r}=h(),o=C(),l=ue(),s=d.type==="roster"&&d.rosterCode===e.code,u=p=>{p.stopPropagation();let b=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;r(n,{id:`var-${Date.now()}`,code:b,name:o.canvas.newFieldName,type:"text",order:e.variables.length,isRequired:false,isReadonly:false,isHidden:false},e.code);};return jsxs("div",{style:{margin:"4px 8px",border:`1px solid ${s?"#2563eb":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:p=>{p.stopPropagation(),a({type:"roster",pageCode:n,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:s?"#fef3c7":"#fffbeb",fontSize:"12px",fontWeight:600,color:"#92400e",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[jsxs("span",{children:["\u25A4 ",l(e.name)||e.code]}),jsx("span",{style:{fontSize:"10px",padding:"1px 4px",borderRadius:"3px",backgroundColor:"#fde68a",color:"#78350f"},children:e.rosterType}),e.pilotVariableCode&&jsxs("span",{style:{fontSize:"10px",color:"#92400e",fontWeight:400},children:[o.canvas.pilotPrefix," ",e.pilotVariableCode]})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[jsx("span",{style:{fontSize:"11px",color:"#b45309"},children:o.canvas.rosterVarsCount(e.variables.length)}),jsx("button",{onClick:p=>{p.stopPropagation(),t(n,e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px"},children:"\xD7"})]})]}),e.variables.slice().sort((p,b)=>p.order-b.order).map(p=>jsx(ce,{variable:p,pageCode:n,rosterCode:e.code},p.code)),jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsx("button",{onClick:u,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:o.canvas.addFieldToRoster})})]})}function Te(e,n,d="fr"){if(e==null)return "";if(typeof e=="string")return e;let a=e[n];if(typeof a=="string"&&a!=="")return a;let t=e[d];if(typeof t=="string"&&t!=="")return t;for(let r of Object.values(e))if(typeof r=="string"&&r!=="")return r;return ""}var ae={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},fo={padding:"4px 10px",border:"1px solid #e2e8f0",borderBottom:"none",borderTopLeftRadius:"4px",borderTopRightRadius:"4px",fontSize:"11px",fontWeight:600,cursor:"pointer",textTransform:"uppercase",letterSpacing:"0.5px",minWidth:"38px"};function we(e,n,d){if(e==null)return "";if(typeof e=="string")return n===d?e:"";let a=e[n];return typeof a=="string"?a:""}function Q({value:e,onChange:n,availableLangs:d,defaultLang:a="fr",placeholder:t,multiline:r,testIdPrefix:o,disabled:l}){let s=d.length>0?d:[a],u=s.length>1,[p,b]=useState(s[0]),i=C();s.includes(p)||b(s[0]);let x=(f,g)=>{if(!u){n(g);return}let m=typeof e=="string"?{[a]:e}:{...e??{}};m[f]=g,n(m);};if(!u){let f=s[0],g=we(e,f,a);return r?jsx("textarea",{value:g,rows:3,placeholder:t,disabled:l,"data-testid":o?`${o}-${f}`:void 0,onChange:m=>x(f,m.target.value),style:ae}):jsx("input",{type:"text",value:g,placeholder:t,disabled:l,"data-testid":o?`${o}-${f}`:void 0,onChange:m=>x(f,m.target.value),style:ae})}let c=we(e,p,a);return jsxs("div",{"data-testid":o,style:{display:"flex",flexDirection:"column"},children:[jsx("div",{role:"tablist","aria-label":i.properties.title,style:{display:"flex",gap:"2px"},children:s.map(f=>{let g=f===p;return jsx("button",{type:"button",role:"tab","aria-selected":g,"data-testid":o?`${o}-tab-${f}`:void 0,onClick:()=>b(f),style:{...fo,backgroundColor:g?"#fff":"#f1f5f9",color:g?"#2563eb":"#64748b",borderColor:"#e2e8f0"},children:f},f)})}),r?jsx("textarea",{value:c,rows:3,placeholder:t,disabled:l,"data-testid":o?`${o}-${p}`:void 0,onChange:f=>x(p,f.target.value),style:{...ae,borderTopLeftRadius:0}}):jsx("input",{type:"text",value:c,placeholder:t,disabled:l,"data-testid":o?`${o}-${p}`:void 0,onChange:f=>x(p,f.target.value),style:{...ae,borderTopLeftRadius:0}})]})}function A({label:e,value:n,onChange:d,placeholder:a,multiline:t,testIdPrefix:r,disabled:o}){let s=h(u=>u.form).langConfig??DEFAULT_LANG_CONFIG;return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),jsx(Q,{value:n,onChange:d,availableLangs:s.availableLangs,defaultLang:s.defaultLang,placeholder:a,multiline:t,testIdPrefix:r,disabled:o})]})}var bo=["fr","en"];function Y(){let{form:e,formTypes:n,updateFormMeta:d}=h(),a=C(),t=e.langConfig??DEFAULT_LANG_CONFIG,r=e.pages.reduce((o,l)=>o+l.variables.length+l.rosters.reduce((s,u)=>s+u.variables.length,0),0);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(A,{label:a.properties.name,value:e.name,onChange:o=>d({name:o}),testIdPrefix:"form-name"}),jsx(F,{label:a.properties.code,value:e.code,onChange:o=>d({code:o})}),jsx(A,{label:a.properties.description,value:e.description,onChange:o=>d({description:o}),multiline:true,testIdPrefix:"form-description"}),jsx(F,{label:a.properties.version,value:e.version,onChange:o=>d({version:o})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:a.properties.formType}),jsxs("select",{"data-testid":"form-properties-type-select",value:e.formTypeId??"",onChange:o=>d({formTypeId:o.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:[jsx("option",{value:"",children:a.properties.noType}),n.map(o=>jsx("option",{value:o.id,children:o.name},o.id))]})]}),jsx(yo,{langConfig:t}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8",marginTop:"8px"},children:a.properties.formSummary(e.pages.length,r)})]})}function yo({langConfig:e}){let{form:n,updateFormMeta:d,setForm:a}=h(),t=C(),[r,o]=useState(null),l={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},s={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},u=c=>{d({langConfig:c});},p=c=>{e.availableLangs.includes(c)||u({...e,availableLangs:[...e.availableLangs,c]});},b=c=>{e.availableLangs.length<=1||c!==e.defaultLang&&o(c);},i=c=>{let f=e.availableLangs.filter(P=>P!==c),g=f.includes(e.defaultLang)?e.defaultLang:f[0]??"fr",m=xo(n,c,g,f.length===1),y={...e,defaultLang:g,availableLangs:f};a({...m,langConfig:y}),o(null);},x=()=>o(null);return jsxs("div",{"data-testid":"form-lang-config",style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px",marginTop:"4px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:t.properties.langConfigSection}),jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigAvailable}),jsx("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap"},children:bo.map(c=>{let f=e.availableLangs.includes(c),g=c===e.defaultLang,m=e.availableLangs.length<=1,y=f&&(g||m);return jsxs("label",{style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",color:"#334155",cursor:y?"default":"pointer",opacity:y?.6:1},children:[jsx("input",{type:"checkbox","data-testid":`lang-toggle-${c}`,checked:f,disabled:y,onChange:P=>{P.target.checked?p(c):b(c);}}),jsx("span",{children:c.toUpperCase()}),g&&jsxs("span",{style:{fontSize:"10px",color:"#94a3b8",fontStyle:"italic"},children:["(",t.properties.langConfigDefault,")"]})]},c)})})]}),jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigDefault}),jsx("select",{"data-testid":"lang-default-select",value:e.defaultLang,onChange:c=>u({...e,defaultLang:c.target.value}),style:s,children:e.availableLangs.map(c=>jsx("option",{value:c,children:c.toUpperCase()},c))})]}),jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigStrategy}),jsxs("select",{"data-testid":"lang-strategy-select",value:e.strategy,onChange:c=>u({...e,strategy:c.target.value}),style:s,children:[jsx("option",{value:"prop",children:t.properties.langConfigStrategies.prop}),jsx("option",{value:"browser",children:t.properties.langConfigStrategies.browser}),jsx("option",{value:"selector",children:t.properties.langConfigStrategies.selector}),jsx("option",{value:"auto",children:t.properties.langConfigStrategies.auto})]})]}),e.strategy==="selector"&&jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigSelectorPosition}),jsxs("select",{"data-testid":"lang-selector-position-select",value:e.selectorPosition??"top",onChange:c=>u({...e,selectorPosition:c.target.value}),style:s,children:[jsx("option",{value:"top",children:t.properties.langConfigPositions.top}),jsx("option",{value:"bottom",children:t.properties.langConfigPositions.bottom})]})]}),r&&jsxs("div",{"data-testid":"lang-remove-confirm",style:{padding:"8px",backgroundColor:"#fef2f2",border:"1px solid #fecaca",borderRadius:"6px",fontSize:"12px",color:"#b91c1c",display:"flex",flexDirection:"column",gap:"8px"},children:[jsx("span",{children:t.properties.langConfigConfirmRemove(r)}),jsxs("div",{style:{display:"flex",gap:"8px"},children:[jsx("button",{type:"button","data-testid":"lang-remove-confirm-yes",onClick:()=>i(r),style:{padding:"4px 10px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:t.properties.langConfigConfirmYes}),jsx("button",{type:"button","data-testid":"lang-remove-confirm-no",onClick:x,style:{padding:"4px 10px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:t.properties.langConfigConfirmNo})]})]})]})}function xo(e,n,d,a){let t=i=>{if(i===void 0)return;if(typeof i=="string")return i;let x={...i};return delete x[n],a?Te(x,d,"fr"):x},r=i=>({...i,label:t(i.label)??""}),o=i=>({...i,message:t(i.message)??""}),l=i=>({...i,errorMessage:t(i.errorMessage)}),s=i=>({...i,name:t(i.name)??"",description:t(i.description),placeholder:t(i.placeholder),options:i.options?i.options.map(r):i.options,validationRules:i.validationRules?i.validationRules.map(o):i.validationRules,conditions:i.conditions?i.conditions.map(l):i.conditions}),u=i=>({...i,name:t(i.name)??"",options:i.options?i.options.map(r):i.options,variables:i.variables.map(s),conditions:i.conditions?i.conditions.map(l):i.conditions}),p=i=>({...i,instanceLabel:t(i.instanceLabel)}),b=i=>({...i,name:t(i.name)??"",repeatConfig:i.repeatConfig?p(i.repeatConfig):i.repeatConfig,variables:i.variables.map(s),rosters:i.rosters.map(u),conditions:i.conditions?i.conditions.map(l):i.conditions});return {...e,name:t(e.name)??"",description:t(e.description),pages:e.pages.map(b)}}function F({label:e,value:n,onChange:d,multiline:a,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 jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),a?jsx("textarea",{value:n,onChange:o=>d(o.target.value),rows:3,style:r}):jsx("input",{type:t,value:n,onChange:o=>d(o.target.value),style:r})]})}function ze({page:e}){let{updatePage:n}=h(),d=C();return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(A,{label:d.properties.name,value:e.name,onChange:a=>n(e.code,{name:a}),testIdPrefix:"page-name"}),jsx(F,{label:d.properties.code,value:e.code,onChange:()=>{}}),jsx("div",{children:jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsx("input",{type:"checkbox",checked:e.isRepeatable,onChange:a=>n(e.code,{isRepeatable:a.target.checked,repeatConfig:a.target.checked?{min:1,max:10}:void 0})}),d.properties.repeatablePage]})}),e.isRepeatable&&e.repeatConfig&&jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsx(F,{label:d.properties.minInstances,value:String(e.repeatConfig.min??1),type:"number",onChange:a=>n(e.code,{repeatConfig:{...e.repeatConfig,min:parseInt(a)||1}})}),jsx(F,{label:d.properties.maxInstances,value:String(e.repeatConfig.max??10),type:"number",onChange:a=>n(e.code,{repeatConfig:{...e.repeatConfig,max:parseInt(a)||10}})}),jsx(F,{label:d.properties.controlVariableCode,value:e.repeatConfig.controlVariableCode??"",onChange:a=>n(e.code,{repeatConfig:{...e.repeatConfig,controlVariableCode:a||void 0}})}),jsx(A,{label:d.properties.instanceLabel,value:e.repeatConfig.instanceLabel,onChange:a=>n(e.code,{repeatConfig:{...e.repeatConfig,instanceLabel:a}}),testIdPrefix:"page-instance-label"})]}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:d.properties.pageSummary(e.variables.length,e.rosters.length)})]})}var ho=["equals","not_equals","greater_than","less_than","greater_than_or_equal","less_than_or_equal","contains","not_contains","is_empty","is_not_empty","starts_with","ends_with","in","regex"],So=["show","hide","validate","require","readonly","setValue"],Ro=["is_empty","is_not_empty"];function ye({conditions:e,onChange:n,availableVariables:d,rosterContext:a}){let t=C(),[r,o]=useState(null),l=()=>{let p={id:generateId(),action:"show",expression:""};n([...e,p]),o(p.id);},s=p=>{n(e.filter(b=>b.id!==p)),r===p&&o(null);},u=(p,b)=>{n(e.map(i=>i.id===p?{...i,...b}:i));};return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:t.conditionBuilder.conditionsCount(e.length)}),e.map(p=>jsx(Lo,{condition:p,isExpanded:r===p.id,onToggle:()=>o(r===p.id?null:p.id),onUpdate:b=>u(p.id,b),onRemove:()=>s(p.id),availableVariables:d,rosterContext:a},p.id)),jsx("button",{type:"button",onClick:l,style:{padding:"6px 12px",border:"1px dashed #cbd5e1",borderRadius:"6px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:"pointer"},children:t.conditionBuilder.addCondition})]})}function Lo({condition:e,isExpanded:n,onToggle:d,onUpdate:a,onRemove:t,availableVariables:r,rosterContext:o}){let l=C(),[s,u]=useState(()=>wo(e.expression)),p=(m,y)=>{u(m);let P=De(m,y);a({expression:P});},b=m=>{a({action:m});let y=De(s,m);a({action:m,expression:y});},i=()=>{let m={id:generateId(),variableCode:"",operator:"equals",value:""},y={...s,rules:[...s.rules,m]};p(y,e.action);},x=m=>{let y={...s,rules:s.rules.filter(P=>P.id!==m)};p(y,e.action);},c=(m,y)=>{let P={...s,rules:s.rules.map(z=>z.id===m?{...z,...y}:z)};p(P,e.action);},f=m=>{let y={...s,logic:m};p(y,e.action);},g=l.conditionBuilder.actions[e.action]??e.action;return jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:d,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"6px 10px",backgroundColor:"#f8fafc",cursor:"pointer",fontSize:"12px",color:"#334155"},children:[jsxs("span",{style:{fontWeight:500},children:[g,s.rules.length>0?l.conditionBuilder.rulesCount(s.rules.length):""]}),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("span",{style:{color:"#94a3b8"},children:n?"\u25B2":"\u25BC"}),jsx("span",{onClick:m=>{m.stopPropagation(),t();},style:{color:"#ef4444",cursor:"pointer",padding:"0 4px"},role:"button",children:"\xD7"})]})]}),n&&jsxs("div",{style:{padding:"10px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.action}),jsx("select",{value:e.action,onChange:m=>b(m.target.value),style:ge,children:So.map(m=>jsx("option",{value:m,children:l.conditionBuilder.actions[m]},m))})]}),s.rules.length>1&&jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#64748b"},children:l.conditionBuilder.match}),jsx("button",{type:"button",onClick:()=>f("and"),style:{...Ee,backgroundColor:s.logic==="and"?"#2563eb":"#f1f5f9",color:s.logic==="and"?"#fff":"#64748b"},children:l.conditionBuilder.all}),jsx("button",{type:"button",onClick:()=>f("or"),style:{...Ee,backgroundColor:s.logic==="or"?"#2563eb":"#f1f5f9",color:s.logic==="or"?"#fff":"#64748b"},children:l.conditionBuilder.any})]}),s.rules.map(m=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxs("select",{value:m.variableCode,onChange:y=>c(m.id,{variableCode:y.target.value}),style:{...ge,flex:1},children:[jsx("option",{value:"",children:l.conditionBuilder.variablePlaceholder}),r.map(y=>jsxs("option",{value:y.code,children:[y.name," (",y.code,")"]},y.code))]}),jsx("select",{value:m.operator,onChange:y=>c(m.id,{operator:y.target.value}),style:{...ge,width:"130px"},children:ho.map(y=>jsx("option",{value:y,children:l.conditionBuilder.operators[y]},y))}),!Ro.includes(m.operator)&&jsx("input",{type:"text",value:m.value,onChange:y=>c(m.id,{value:y.target.value}),placeholder:l.conditionBuilder.valuePlaceholder,style:{...be,flex:1}}),jsx("button",{type:"button",onClick:()=>x(m.id),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px"},children:"\xD7"})]},m.id)),jsx("button",{type:"button",onClick:i,style:{padding:"4px 8px",border:"1px dashed #cbd5e1",borderRadius:"4px",backgroundColor:"transparent",color:"#64748b",fontSize:"11px",cursor:"pointer"},children:l.conditionBuilder.addRule}),e.expression&&jsx("div",{style:{padding:"6px 8px",backgroundColor:"#f0fdf4",borderRadius:"4px",fontSize:"11px",fontFamily:"monospace",color:"#166534",wordBreak:"break-all"},children:e.expression}),o&&e.expression&&(()=>{let m=RosterConditionEngine.validateCondition(e.expression,o.variables,o.currentVariableCode,o.currentVariableOrder);return m.isValid?null: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:m.errors.map((y,P)=>jsxs("div",{children:[jsx("strong",{children:y.type}),y.variableCode?`: \${${y.variableCode}}`:""," \u2014 ",y.message]},P))})})(),e.action==="validate"&&jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.errorMessage}),jsx(Po,{value:e.errorMessage,onChange:m=>a({errorMessage:m}),placeholder:l.conditionBuilder.errorMessagePlaceholder})]}),e.action==="setValue"&&jsxs(Fragment,{children:[jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.targetVariableCode}),jsx("input",{type:"text",value:e.targetVariableCode??"",onChange:m=>a({targetVariableCode:m.target.value||void 0}),placeholder:l.conditionBuilder.targetVariablePlaceholder,style:be})]}),jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.valueToSet}),jsx("input",{type:"text",value:e.setValue!==void 0?String(e.setValue):"",onChange:m=>a({setValue:m.target.value}),placeholder:l.conditionBuilder.valueToSetPlaceholder,style:be})]})]})]})]})}function Po({value:e,onChange:n,placeholder:d}){let t=h(r=>r.form).langConfig??DEFAULT_LANG_CONFIG;return jsx(Q,{value:e,onChange:r=>n(r),availableLangs:t.availableLangs,defaultLang:t.defaultLang,placeholder:d,testIdPrefix:"condition-error-message"})}function Io(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 De(e,n){if(e.rules.length===0)return "";let d=e.rules.filter(t=>t.variableCode).map(t=>{let r=`\${${t.variableCode}}`,o=Io(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 l=/^\d+(\.\d+)?$/.test(t.value)?t.value:`"${t.value}"`;return `${r} ${o} ${l}`});if(d.length===0)return "";let a=d.join(e.logic==="and"?" && ":" || ");return n==="show"?`show(${a})`:n==="hide"?`hide(${a})`:n==="validate"?`ConditionEval(${a})`:a}function wo(e){return {logic:"and",rules:[]}}var ge={padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none"},be={width:"100%",padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"},Ee={padding:"2px 8px",borderRadius:"10px",border:"none",fontSize:"10px",fontWeight:600,cursor:"pointer"};function xe({dataSourceId:e,dependencies:n={},availableConnectors:d,availableVariables:a,onConnectorChange:t,onDependenciesChange:r}){let o=C(),[l,s]=useState(""),u=d.find(c=>c.id===e),p=Object.entries(n),b=()=>{l.trim()&&(r({...n,[l.trim()]:""}),s(""));},i=c=>{let f={...n};delete f[c],r(f);},x=(c,f)=>{r({...n,[c]:f});};return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",padding:"8px",backgroundColor:"#f0fdf4",borderRadius:"6px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#166534",textTransform:"uppercase",letterSpacing:"0.5px"},children:o.dataSource.title}),jsxs("div",{children:[jsx("label",{style:zo,children:o.dataSource.connector}),jsxs("select",{value:e??"",onChange:c=>{let f=c.target.value||void 0;t(f),f||r({});},style:Ae,children:[jsx("option",{value:"",children:o.dataSource.none}),d.map(c=>jsxs("option",{value:c.id,children:[c.name," (",c.id,")"]},c.id))]})]}),u&&jsxs("div",{style:{fontSize:"11px",color:"#166534",padding:"4px 6px",backgroundColor:"#dcfce7",borderRadius:"4px"},children:[o.dataSource.connectedTo," ",jsx("strong",{children:u.name})]}),e&&jsxs(Fragment,{children:[jsx("div",{style:{fontSize:"11px",fontWeight:500,color:"#166534"},children:o.dataSource.dependencies(p.length)}),p.map(([c,f])=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#334155",minWidth:"60px",fontFamily:"monospace"},children:c}),jsx("span",{style:{fontSize:"11px",color:"#94a3b8"},children:"\u2192"}),jsxs("select",{value:f,onChange:g=>x(c,g.target.value),style:{...Ae,flex:1},children:[jsx("option",{value:"",children:o.dataSource.selectVariable}),a.map(g=>jsxs("option",{value:g.code,children:[g.name," (",g.code,")"]},g.code))]}),jsx("button",{type:"button",onClick:()=>i(c),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px"},children:"\xD7"})]},c)),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("input",{type:"text",value:l,onChange:c=>s(c.target.value),placeholder:o.dataSource.dependencyKeyPlaceholder,style:{...Do,flex:1},onKeyDown:c=>c.key==="Enter"&&b()}),jsx("button",{type:"button",onClick:b,disabled:!l.trim(),style:{padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",backgroundColor:"#fff",color:"#2563eb",fontSize:"11px",cursor:"pointer",opacity:l.trim()?1:.5},children:o.dataSource.addDependency})]})]})]})}var zo={fontSize:"11px",fontWeight:500,color:"#166534",display:"block",marginBottom:"2px"},Ae={width:"100%",padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",backgroundColor:"#fff"},Do={padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"};function Vo(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"")}function $e(e){return typeof e=="string"?e:e==null?"":String(e)}function ve(e,n){if(e==null)return "";if(typeof e=="string")return e;let d=e[n];if(typeof d=="string"&&d!=="")return d;for(let a of Object.values(e))if(typeof a=="string"&&a!=="")return a;return ""}function Ne({options:e,onChange:n,disabled:d}){let a=C(),r=h(f=>f.form).langConfig??DEFAULT_LANG_CONFIG,o=(f,g)=>{let m=e.map((y,P)=>P===f?{...y,...g}:y);n(m);},l=(f,g)=>{let m=e[f],y=$e(m.value),P=ve(m.label,r.defaultLang),z=ve(g,r.defaultLang);y===""&&P===""&&z!==""?o(f,{label:g,value:Vo(z)}):o(f,{label:g});},s=(f,g)=>{o(f,{value:g});},u=()=>{n([...e,{label:"",value:""}]);},p=f=>{n(e.filter((g,m)=>m!==f));},b={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},i={flex:1,padding:"6px 8px",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"},x="1px solid #e2e8f0",c="1px solid #ef4444";return jsxs("div",{"data-testid":"options-editor",children:[jsx("label",{style:b,children:a.optionsEditor.optionsCount(e.length)}),e.length===0&&jsx("div",{"data-testid":"options-editor-empty",style:{fontSize:"12px",color:"#94a3b8",marginBottom:"8px"},children:a.optionsEditor.noOptions}),jsx("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:e.map((f,g)=>{let m=ve(f.label,r.defaultLang),y=$e(f.value),P=m.trim()==="",z=y.trim()==="";return jsxs("div",{"data-testid":`option-row-${g}`,style:{display:"flex",alignItems:"flex-start",gap:"6px"},children:[jsx("div",{"aria-label":a.optionsEditor.optionLabelAria(g),"data-testid":`option-label-${g}`,style:{flex:1,border:P?c:x,borderRadius:"4px"},children:jsx(Q,{value:f.label,onChange:w=>l(g,w),availableLangs:r.availableLangs,defaultLang:r.defaultLang,placeholder:a.optionsEditor.optionLabelPlaceholder,disabled:d,testIdPrefix:`option-label-input-${g}`})}),jsx("input",{type:"text","aria-label":a.optionsEditor.optionValueAria(g),"data-testid":`option-value-${g}`,value:y,placeholder:a.optionsEditor.optionValuePlaceholder,disabled:d,onChange:w=>s(g,w.target.value),style:{...i,border:z?c:x,maxWidth:"40%"}}),jsx("button",{type:"button","aria-label":a.optionsEditor.removeOptionAria(g),"data-testid":`option-remove-${g}`,onClick:()=>p(g),disabled:d,style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:d?"not-allowed":"pointer",lineHeight:1,fontSize:"14px"},children:"\xD7"})]},g)})}),jsx("button",{type:"button","data-testid":"options-editor-add",onClick:u,disabled:d,style:{marginTop:"8px",padding:"6px 10px",border:"1px dashed #94a3b8",borderRadius:"4px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:d?"not-allowed":"pointer"},children:a.optionsEditor.addOption})]})}function Oe({variable:e,pageCode:n,rosterCode:d,availableConnectors:a=[]}){let{form:t,updateVariable:r}=h(),o=C(),l=useMemo(()=>[{value:"text",label:o.toolbox.types.text},{value:"textarea",label:o.toolbox.types.textarea},{value:"number",label:o.toolbox.types.number},{value:"date",label:o.toolbox.types.date},{value:"datetime",label:o.toolbox.types.datetime},{value:"time",label:o.toolbox.types.time},{value:"select",label:o.toolbox.types.select},{value:"multiselect",label:o.toolbox.types.multiselect},{value:"radio",label:o.toolbox.types.radio},{value:"checkbox",label:o.toolbox.types.checkbox},{value:"file",label:o.toolbox.types.file},{value:"gps",label:o.toolbox.types.gps},{value:"rating",label:o.toolbox.types.rating},{value:"calculated",label:o.toolbox.types.calculated},{value:"hidden",label:o.toolbox.types.hidden},{value:"label",label:o.toolbox.types.label}],[o]),s=i=>{r(n,e.code,i,d);},u=t.langConfig?.defaultLang??"fr",p=i=>typeof i=="string"?i:i[u]??Object.values(i)[0]??"",b=t.pages.flatMap(i=>[...i.variables.map(x=>({code:x.code,name:p(x.name)})),...i.rosters.flatMap(x=>x.variables.map(c=>({code:c.code,name:p(c.name)})))]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(A,{label:o.properties.name,value:e.name,onChange:i=>s({name:i}),testIdPrefix:"variable-name"}),jsx(F,{label:o.properties.code,value:e.code,onChange:()=>{}}),jsx(A,{label:o.properties.description,value:e.description,onChange:i=>s({description:i}),testIdPrefix:"variable-description"}),jsx(A,{label:o.properties.placeholder,value:e.placeholder,onChange:i=>s({placeholder:i}),testIdPrefix:"variable-placeholder"}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:o.properties.type}),jsx("select",{value:e.type,onChange:i=>s({type:i.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:l.map(i=>jsx("option",{value:i.value,children:i.label},i.value))})]}),e.type==="rating"&&jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:o.properties.ratingStyle}),jsxs("select",{value:e.metadata?.ratingStyle??"star",onChange:i=>s({metadata:{...e.metadata,ratingStyle:i.target.value}}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"star",children:o.properties.ratingStyles.star}),jsx("option",{value:"number",children:o.properties.ratingStyles.number}),jsx("option",{value:"color",children:o.properties.ratingStyles.color})]})]}),jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"6px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase"},children:o.properties.layout}),jsx(ie,{label:o.properties.startNewRow,checked:e.startWithNewLine!==false,onChange:i=>s({startWithNewLine:i?void 0:false})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"2px"},children:o.properties.columnSpan}),jsxs("select",{value:e.colSpan??"auto",onChange:i=>s({colSpan:i.target.value==="auto"?void 0:parseInt(i.target.value)}),style:{width:"100%",padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"auto",children:o.properties.columnSpanAuto}),[1,2,3,4,5,6,7,8,9,10,11,12].map(i=>jsxs("option",{value:i,children:[i,"/12",i===6?o.properties.columnSpanHalf:i===4?o.properties.columnSpanThird:i===12?o.properties.columnSpanFull:""]},i))]})]})]}),jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsx(ie,{label:o.properties.required,checked:e.isRequired,onChange:i=>s({isRequired:i})}),jsx(ie,{label:o.properties.readonly,checked:e.isReadonly,onChange:i=>s({isReadonly:i})}),jsx(ie,{label:o.properties.hidden,checked:e.isHidden,onChange:i=>s({isHidden:i})})]}),e.type==="calculated"&&jsx(F,{label:o.properties.expression,value:e.expression??"",onChange:i=>s({expression:i||void 0}),multiline:true}),["select","multiselect","radio"].includes(e.type)&&jsx(xe,{dataSourceId:e.dataSourceId,dependencies:e.dataSourceDependencies,availableConnectors:a,availableVariables:b,onConnectorChange:i=>s({dataSourceId:i}),onDependenciesChange:i=>s({dataSourceDependencies:Object.keys(i).length>0?i:void 0})}),["select","multiselect","radio","checkbox"].includes(e.type)&&!e.dataSourceId&&jsx(Ne,{options:e.options??[],onChange:i=>s({options:i})}),jsx(ye,{conditions:e.conditions??[],onChange:i=>s({conditions:i}),availableVariables:b,rosterContext:(()=>{if(!d)return;let x=t.pages.find(c=>c.code===n)?.rosters.find(c=>c.code===d);if(x)return {variables:x.variables.map(c=>({code:c.code,order:c.order})),currentVariableCode:e.code,currentVariableOrder:e.order}})()})]})}function ie({label:e,checked:n,onChange:d}){return jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsx("input",{type:"checkbox",checked:n,onChange:a=>d(a.target.checked)}),e]})}function Me({roster:e,pageCode:n}){let{updateRoster:d}=h(),a=C(),t=useMemo(()=>[{value:"check",label:a.properties.rosterTypes.check},{value:"list",label:a.properties.rosterTypes.list},{value:"collection",label:a.properties.rosterTypes.collection},{value:"collection_extend",label:a.properties.rosterTypes.collection_extend}],[a]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(A,{label:a.properties.name,value:e.name,onChange:r=>d(n,e.code,{name:r}),testIdPrefix:"roster-name"}),jsx(F,{label:a.properties.code,value:e.code,onChange:()=>{}}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:a.properties.rosterType}),jsx("select",{value:e.rosterType,onChange:r=>d(n,e.code,{rosterType:r.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:t.map(r=>jsx("option",{value:r.value,children:r.label},r.value))})]}),jsx(F,{label:a.properties.pilotVariableCode,value:e.pilotVariableCode??"",onChange:r=>d(n,e.code,{pilotVariableCode:r||void 0})}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:a.properties.rosterSummary(e.variables.length,e.options?.length??0)})]})}function Ce({availableConnectors:e=[]}){let{selection:n,form:d}=h(),a=C(),t=(()=>{switch(n.type){case "form":return jsx(Y,{});case "page":{let r=d.pages.find(o=>o.code===n.pageCode);return r?jsx(ze,{page:r}):jsx(Y,{})}case "roster":{let r=d.pages.find(l=>l.code===n.pageCode),o=r?.rosters.find(l=>l.code===n.rosterCode);return !r||!o?jsx(Y,{}):jsx(Me,{roster:o,pageCode:r.code})}case "variable":{let r=d.pages.find(u=>u.code===n.pageCode);if(!r)return jsx(Y,{});let o=n.rosterCode?r.rosters.find(u=>u.code===n.rosterCode):void 0,s=(o?o.variables:r.variables).find(u=>u.code===n.variableCode);return s?jsx(Oe,{variable:s,pageCode:r.code,rosterCode:n.rosterCode,availableConnectors:e}):jsx(Y,{})}}})();return jsxs("div",{style:{width:"300px",borderLeft:"1px solid #e2e8f0",backgroundColor:"#fff",overflowY:"auto"},children:[jsx("div",{style:{padding:"12px 16px",borderBottom:"1px solid #e2e8f0",fontSize:"12px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:a.properties.title}),jsx("div",{style:{padding:"16px"},children:t})]})}function Bo({theme:e,dataSources:n,adapter:d,initialForm:a,formId:t,onChange:r,onSave:o,labels:l,PreviewComponent:s,ToolboxComponent:u,CanvasComponent:p,Wrapper:b}){let{form:i,view:x,setForm:c,setAdapter:f,load:g}=h(),m=useMemo(()=>re(W,l),[l]);useEffect(()=>{d&&f(d);},[d,f]),useEffect(()=>{a?c(a):t&&d?.loadForm&&g(t);},[a,t]);let y=useRef(r),P=useRef(true);y.current=r,useEffect(()=>{if(P.current){P.current=false;return}y.current?.(i);},[i]);let z=u??pe,w=p??fe,X=b??No.Fragment,v=jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsx(de,{onSave:o}),jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[x==="canvas"&&jsxs(Fragment,{children:[jsx(z,{}),jsx(w,{}),jsx(Ce,{availableConnectors:n?Object.values(n):[]})]}),x==="preview"&&s&&jsx("div",{style:{flex:1,overflow:"auto"},children:jsx(s,{formSchema:i,theme:e,dataSources:n,mode:"fill"})}),x==="preview"&&!s&&jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:m.formEditor.previewMissing}),x==="json"&&jsx("div",{style:{flex:1,overflow:"auto",padding:"16px"},children: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(i,null,2)})})]})]});return jsx(te,{labels:m,children:jsx(X,{children:v})})}export{fe as Canvas,ye as ConditionBuilder,xe as DataSourceSelector,te as EditorLabelsProvider,de as EditorToolbar,Bo as FormEditor,Ce as PropertiesPanel,pe as Toolbox,W as defaultLabels,Re as enLabels,W as frLabels,re as mergeLabels,h as useEditorStore,C as useLabels};//# sourceMappingURL=index.mjs.map
1
+ import xt,{createContext,useContext,useState,useMemo,useEffect,useRef}from'react';import {create}from'zustand';import {deserializeForm,serializeForm,generateId,deepClone,migrateFormToItems,DEFAULT_LANG_CONFIG,resolveLabel,getPageVariables,isPageVariable,isPageRoster,RosterConditionEngine,getPageRosters}from'@msbci/form-core';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function Ve(e,r){return {itemType:"variable",id:generateId(),code:e.code,name:e.name,type:e.variableType,order:r,isRequired:e.isRequired??false,isReadonly:e.isReadonly??false,isHidden:e.isHidden??false,description:e.description,placeholder:e.placeholder,options:e.options,validationRules:e.validationRules,conditions:e.conditions,expression:e.expression,dataSourceId:e.dataSourceId,dataSourceDependencies:e.dataSourceDependencies,style:e.style,metadata:e.metadata,templateId:e.id,templateOverrides:{}}}function ze(e,r,s){return r==="variableType"?{...e,type:s}:{...e,[r]:s}}function bo(e,r){return r==="variableType"?e.variableType:e[r]}var mo=50;function go(){return {id:"",code:"",name:"New Form",version:"1.0.0",isPublished:false,pages:[]}}function w(e,r){let s=Array.isArray(e.items)?e.items:[...getPageVariables(e),...getPageRosters(e)],{variables:i,rosters:t,...o}=e;return {...o,items:r(s)}}var T=create((e,r)=>{function s(t){let o=r(),a={form:deepClone(o.form),description:t,timestamp:Date.now()},l=o.history.slice(0,o.historyIndex+1);l.push(a),l.length>mo&&l.shift(),e({history:l,historyIndex:l.length-1});}function i(t,o){s(t);let a=r(),l=o(deepClone(a.form));e({form:l,isDirty:true});}return {form:go(),formTypes:[],selection:{type:"form"},view:"canvas",isDirty:false,isSaving:false,history:[],historyIndex:-1,adapter:null,availableTemplates:[],setForm:t=>{e({form:migrateFormToItems(deepClone(t)),isDirty:false,history:[],historyIndex:-1,selection:{type:"form"}});},updateFormMeta:t=>{i("Update form metadata",o=>({...o,...t}));},addPage:t=>{let o=Array.isArray(t.items)?t:{...t,items:[...t.variables??[],...t.rosters??[]]};i(`Add page "${o.name}"`,a=>({...a,pages:[...a.pages,o]}));},updatePage:(t,o)=>{i(`Update page "${t}"`,a=>({...a,pages:a.pages.map(l=>l.code===t?{...l,...o}:l)}));},removePage:t=>{i(`Remove page "${t}"`,a=>({...a,pages:a.pages.filter(l=>l.code!==t)}));let o=r();o.selection.type==="page"&&o.selection.pageCode===t&&e({selection:{type:"form"}});},reorderPages:t=>{i("Reorder pages",o=>{let a=new Map(o.pages.map(p=>[p.code,p])),l=t.map((p,n)=>{let c=a.get(p);return c?{...c,order:n}:void 0}).filter(p=>p!==void 0);return {...o,pages:l}});},addRoster:(t,o)=>{i(`Add roster "${o.name}" to page "${t}"`,a=>({...a,pages:a.pages.map(l=>l.code!==t?l:w(l,p=>[...p,{...o,itemType:"roster",order:p.length}]))}));},updateRoster:(t,o,a)=>{i(`Update roster "${o}"`,l=>({...l,pages:l.pages.map(p=>p.code!==t?p:w(p,n=>n.map(c=>isPageRoster(c)&&c.code===o?{...c,...a,itemType:"roster"}:c)))}));},removeRoster:(t,o)=>{i(`Remove roster "${o}"`,a=>({...a,pages:a.pages.map(l=>l.code!==t?l:w(l,p=>p.filter(n=>!(isPageRoster(n)&&n.code===o))))}));},addVariable:(t,o,a)=>{i(`Add variable "${o.name}"`,l=>({...l,pages:l.pages.map(p=>p.code!==t?p:a?w(p,n=>n.map(c=>isPageRoster(c)&&c.code===a?{...c,variables:[...c.variables,o]}:c)):w(p,n=>[...n,{...o,itemType:"variable",order:n.length}]))}));},updateVariable:(t,o,a,l)=>{i(`Update variable "${o}"`,p=>({...p,pages:p.pages.map(n=>n.code!==t?n:l?w(n,c=>c.map(y=>isPageRoster(y)&&y.code===l?{...y,variables:y.variables.map(v=>v.code===o?{...v,...a}:v)}:y)):w(n,c=>c.map(y=>isPageVariable(y)&&y.code===o?{...y,...a,itemType:"variable"}:y)))}));},removeVariable:(t,o,a)=>{i(`Remove variable "${o}"`,l=>({...l,pages:l.pages.map(p=>p.code!==t?p:a?w(p,n=>n.map(c=>isPageRoster(c)&&c.code===a?{...c,variables:c.variables.filter(y=>y.code!==o)}:c)):w(p,n=>n.filter(c=>!(isPageVariable(c)&&c.code===o))))}));},addVariableFromTemplate:(t,o,a)=>{i(`Add variable from template "${o.code}"`,l=>({...l,pages:l.pages.map(p=>p.code!==t?p:a?w(p,n=>n.map(c=>{if(!(isPageRoster(c)&&c.code===a))return c;let y=Ve(o,c.variables.length);return {...c,variables:[...c.variables,y]}})):w(p,n=>[...n,Ve(o,n.length)]))}));},setVariableOverride:(t,o,a,l,p)=>{i(`Override "${String(a)}" on "${o}"`,n=>({...n,pages:n.pages.map(c=>{if(c.code!==t)return c;let y=v=>{let d={...v.templateOverrides??{},[a]:l};return {...ze(v,a,l),templateOverrides:d}};return p?w(c,v=>v.map(d=>isPageRoster(d)&&d.code===p?{...d,variables:d.variables.map(u=>u.code===o?y(u):u)}:d)):w(c,v=>v.map(d=>isPageVariable(d)&&d.code===o?y(d):d))})}));},resetVariableOverride:(t,o,a,l)=>{let p=r().availableTemplates;i(`Reset override "${String(a)}" on "${o}"`,n=>({...n,pages:n.pages.map(c=>{if(c.code!==t)return c;let y=v=>{let d={...v.templateOverrides??{}};delete d[a];let u=v.templateId?p.find(m=>m.id===v.templateId):void 0,b=u?bo(u,a):void 0;return {...ze(v,a,b),templateOverrides:d}};return l?w(c,v=>v.map(d=>isPageRoster(d)&&d.code===l?{...d,variables:d.variables.map(u=>u.code===o?y(u):u)}:d)):w(c,v=>v.map(d=>isPageVariable(d)&&d.code===o?y(d):d))})}));},moveVariable:(t,o,a,l,p,n)=>{i(`Move variable "${a}"`,c=>{let y,v=c.pages.map(u=>u.code!==t?u:p?w(u,b=>b.map(f=>{if(!(isPageRoster(f)&&f.code===p))return f;let m=f.variables.find(x=>x.code===a);return m&&(y={...m}),{...f,variables:f.variables.filter(x=>x.code!==a)}})):w(u,b=>b.filter(f=>isPageVariable(f)&&f.code===a?(y={...f},false):true)));if(!y)return c;y={...y,order:l,itemType:"variable"};let d=v.map(u=>u.code!==o?u:n?w(u,b=>b.map(f=>isPageRoster(f)&&f.code===n?{...f,variables:[...f.variables,y].sort((m,x)=>m.order-x.order)}:f)):w(u,b=>[...b,y].sort((f,m)=>f.order-m.order)));return {...c,pages:d}});},moveItem:(t,o,a)=>{i(`Reorder page items in "${t}"`,l=>({...l,pages:l.pages.map(p=>p.code!==t?p:w(p,n=>{if(o<0||o>=n.length||a<0||a>=n.length||o===a)return n;let c=n.slice(),[y]=c.splice(o,1);return c.splice(a,0,y),c.map((v,d)=>({...v,order:d}))}))}));},select:t=>e({selection:t}),clearSelection:()=>e({selection:{type:"form"}}),setView:t=>e({view:t}),undo:()=>{let{history:t,historyIndex:o,form:a}=r();if(!(o<0))if(o===t.length-1){let l={form:deepClone(a),description:"Current state",timestamp:Date.now()};e({form:deepClone(t[o].form),historyIndex:o-1,isDirty:true,history:[...t,l]});}else e({form:deepClone(t[o].form),historyIndex:o-1,isDirty:true});},redo:()=>{let{history:t,historyIndex:o}=r();if(o>=t.length-2)return;let a=o+2;a<t.length&&e({form:deepClone(t[a].form),historyIndex:a-1,isDirty:true});},canUndo:()=>r().historyIndex>=0,canRedo:()=>{let{history:t,historyIndex:o}=r();return o<t.length-2},addFormType:t=>{let o={...t,id:generateId()};e(a=>({formTypes:[...a.formTypes,o]}));},updateFormType:(t,o)=>{e(a=>({formTypes:a.formTypes.map(l=>l.id===t?{...l,...o}:l)}));},removeFormType:t=>{let o=r();if(o.form.formTypeId===t){let{formTypeId:a,...l}=o.form;e({form:{...l}});}e(a=>({formTypes:a.formTypes.filter(l=>l.id!==t)}));},setAvailableTemplates:t=>{e({availableTemplates:t});},setAdapter:t=>e({adapter:t}),save:async()=>{let{adapter:t,form:o}=r();if(t?.saveForm){e({isSaving:true});try{await t.saveForm(o),e({isDirty:!1});}finally{e({isSaving:false});}}},load:async t=>{let{adapter:o}=r();if(!o?.loadForm)return;let a=await o.loadForm(t);r().setForm(a);},exportJson:()=>serializeForm(r().form),importJson:t=>{let o=deserializeForm(t);r().setForm(o);}}});var j={toolbar:{formNamePlaceholder:"Nom du formulaire",unsaved:"Non sauvegard\xE9",addPage:"+ Page",types:"Types",manageFormTypesTitle:"G\xE9rer les types de formulaire",undo:"Annuler",redo:"R\xE9tablir",save:"Enregistrer",saving:"Enregistrement...",export:"Exporter",import:"Importer",viewEditor:"\xC9diteur",viewPreview:"Aper\xE7u",viewJson:"JSON"},toolbox:{searchPlaceholder:"Rechercher...",addPageFirst:"Ajoutez d\u2019abord une page",tabFields:"Champs",tabVariables:"Variables",noTemplates:"Aucune variable dans ce scope",noScope:"Configurez un scope pour acc\xE9der au r\xE9f\xE9rentiel",groupText:"Texte",groupSelection:"S\xE9lection",groupDateTime:"Date et heure",groupMedia:"M\xE9dias",groupAdvanced:"Avanc\xE9",groupRoster:"Roster",typeRosterCheck:"Cases \xE0 cocher",typeRosterList:"Liste",typeRosterCollection:"Collection",typeRosterCollectionExtend:"Collection \xE9tendue",types:{text:"Texte court",textarea:"Zone de texte",number:"Nombre",email:"Email",select:"Liste d\xE9roulante",multiselect:"Multi-s\xE9lection",radio:"Boutons radio",checkbox:"Cases \xE0 cocher",date:"Date",datetime:"Date et heure",time:"Heure",file:"Fichier",image:"Image",gps:"GPS",rating:"Note (\xE9toiles)",calculated:"Calcul\xE9",hidden:"Masqu\xE9",label:"\xC9tiquette"}},canvas:{emptyStateNoPage:"Cliquez sur \xAB + Page \xBB dans la barre d\u2019outils pour commencer",emptyStateNoPageDnd:"Glissez un champ depuis la bo\xEEte \xE0 outils ou ajoutez une page pour commencer",emptyStatePage:"Cliquez sur un type de champ dans la bo\xEEte \xE0 outils pour l\u2019ajouter ici",unnamedPage:"Page sans nom",repeatable:"R\xE9p\xE9table",fieldsRostersCount:(e,r)=>`${e} champ${e>1?"s":""} \xB7 ${r} roster${r>1?"s":""}`,fieldsCount:e=>`${e} champ${e>1?"s":""}`,rosterVarsCount:e=>`${e} variable${e>1?"s":""}`,addRoster:"+ Ajouter un roster",addFieldToRoster:"+ Ajouter un champ au roster",pilotPrefix:"pilote :",newRosterName:"Nouveau roster",newFieldName:"Nouveau champ",newVariableName:e=>`Nouveau ${e.toLowerCase()}`,hasConditionsTitle:"Contient des conditions",dataSourceConnectedTitle:"Source de donn\xE9es connect\xE9e"},properties:{title:"Propri\xE9t\xE9s",name:"Nom",code:"Code",description:"Description",placeholder:"Placeholder",version:"Version",formType:"Type de formulaire",noType:"\u2014 Aucun type \u2014",formSummary:(e,r)=>`${e} page${e>1?"s":""} \xB7 ${r} variable${r>1?"s":""}`,pageSummary:(e,r)=>`${e} variable${e>1?"s":""} \xB7 ${r} roster${r>1?"s":""}`,rosterSummary:(e,r)=>`${e} variable${e>1?"s":""} \xB7 ${r} option${r>1?"s":""}`,repeatablePage:"Page r\xE9p\xE9table",minInstances:"Minimum d\u2019instances",maxInstances:"Maximum d\u2019instances",controlVariableCode:"Code de la variable de contr\xF4le",instanceLabel:"Mod\xE8le de libell\xE9 d\u2019instance",rosterType:"Type de roster",pilotVariableCode:"Code de la variable pilote",rosterTypes:{check:"Cases \xE0 cocher (s\xE9lection multiple)",list:"Liste (dropdown par ligne)",collection:"Collection (ajout/suppression de lignes)",collection_extend:"Collection \xE9tendue (vue tableau)"},linkedTemplate:"Variable li\xE9e au r\xE9f\xE9rentiel",templateCode:"Code (non modifiable)",templateName:"Nom (non modifiable)",resetOverride:"R\xE9initialiser",type:"Type",ratingStyle:"Style de notation",ratingStyles:{star:"\u2605 \xC9toiles",number:"123 Nombres",color:"\u25CF Points de couleur"},layout:"Mise en page",startNewRow:"Nouvelle ligne",columnSpan:"Largeur (colonnes, 1-12)",columnSpanAuto:"Auto (part \xE9gale)",columnSpanHalf:" (moiti\xE9)",columnSpanThird:" (tiers)",columnSpanFull:" (pleine largeur)",required:"Obligatoire",readonly:"Lecture seule",hidden:"Masqu\xE9 par d\xE9faut",expression:"Expression",langConfigSection:"Langues",langConfigAvailable:"Langues disponibles",langConfigDefault:"Langue par d\xE9faut",langConfigStrategy:"Strat\xE9gie de d\xE9tection",langConfigStrategies:{prop:"Propri\xE9t\xE9 (prop)",browser:"Navigateur",selector:"S\xE9lecteur dans le formulaire",auto:"Auto (navigateur puis d\xE9faut)"},langConfigSelectorPosition:"Position du s\xE9lecteur",langConfigPositions:{top:"Haut",bottom:"Bas"},langConfigConfirmRemove:e=>`Supprimer la langue \xAB ${e.toUpperCase()} \xBB supprimera toutes les traductions ${e.toUpperCase()}. Confirmer ?`,langConfigConfirmYes:"Supprimer",langConfigConfirmNo:"Annuler"},optionsEditor:{optionsCount:e=>`Options (${e})`,noOptions:"Aucune option. Ajoutez-en une pour peupler les choix.",optionLabelPlaceholder:"Libell\xE9",optionValuePlaceholder:"valeur",addOption:"+ Ajouter une option",optionLabelAria:e=>`Libell\xE9 de l\u2019option ${e+1}`,optionValueAria:e=>`Valeur de l\u2019option ${e+1}`,removeOptionAria:e=>`Supprimer l\u2019option ${e+1}`},conditionBuilder:{conditionsCount:e=>`Conditions (${e})`,addCondition:"+ Ajouter une condition",rulesCount:e=>` (${e} r\xE8gle${e>1?"s":""})`,addRule:"+ Ajouter une r\xE8gle",action:"Action",match:"Correspondance",all:"TOUT (ET)",any:"AU MOINS UN (OU)",actions:{show:"Afficher si",hide:"Masquer si",validate:"Valider que",require:"Obligatoire si",readonly:"Lecture seule si",setValue:"D\xE9finir la valeur si"},operators:{equals:"est \xE9gal \xE0",not_equals:"est diff\xE9rent de",greater_than:"est sup\xE9rieur \xE0",less_than:"est inf\xE9rieur \xE0",greater_than_or_equal:"est sup\xE9rieur ou \xE9gal \xE0",less_than_or_equal:"est inf\xE9rieur ou \xE9gal \xE0",contains:"contient",not_contains:"ne contient pas",is_empty:"est vide",is_not_empty:"n\u2019est pas vide",starts_with:"commence par",ends_with:"se termine par",in:"est dans la liste",not_in:"n\u2019est pas dans la liste",between:"est entre",regex:"correspond au pattern"},variablePlaceholder:"Variable...",valuePlaceholder:"Valeur",errorMessage:"Message d\u2019erreur",errorMessagePlaceholder:"Message d\u2019erreur de validation",targetVariableCode:"Code de la variable cible",targetVariablePlaceholder:"VAR_CIBLE",valueToSet:"Valeur \xE0 d\xE9finir",valueToSetPlaceholder:"Valeur"},dataSource:{title:"Source de donn\xE9es",connector:"Connecteur",none:"Aucune (options statiques)",connectedTo:"Connect\xE9 \xE0 :",dependencies:e=>`D\xE9pendances (${e})`,selectVariable:"S\xE9lectionner une variable...",dependencyKeyPlaceholder:"Cl\xE9 de d\xE9pendance (ex : parentId)",addDependency:"+ Ajouter"},formTypesDialog:{dialogAriaLabel:"Types de formulaires",title:"Types de formulaires",closeAriaLabel:"Fermer",noTypes:"Aucun type d\xE9fini. Ajoutez-en un ci-dessous.",confirmDelete:"Ce type est utilis\xE9 par le formulaire courant. Confirmer la suppression ?",deleteConfirm:"Supprimer",deleteCancel:"Annuler",removeTypeAria:e=>`Supprimer ${e}`,newTypeNamePlaceholder:"Nom du nouveau type",newTypeCodePlaceholder:"CODE (auto)",addButton:"+ Ajouter"},formEditor:{previewMissing:"Passer la prop PreviewComponent pour activer l\u2019aper\xE7u"}};var Ee={toolbar:{formNamePlaceholder:"Form name",unsaved:"Unsaved",addPage:"+ Page",types:"Types",manageFormTypesTitle:"Manage form types",undo:"Undo",redo:"Redo",save:"Save",saving:"Saving...",export:"Export",import:"Import",viewEditor:"Editor",viewPreview:"Preview",viewJson:"JSON"},toolbox:{searchPlaceholder:"Search fields...",addPageFirst:"Add a page first",tabFields:"Fields",tabVariables:"Variables",noTemplates:"No variables in this scope",noScope:"Configure a scope to access the variable library",groupText:"Text",groupSelection:"Selection",groupDateTime:"Date & Time",groupMedia:"Media",groupAdvanced:"Advanced",groupRoster:"Roster",typeRosterCheck:"Checks",typeRosterList:"List",typeRosterCollection:"Collection",typeRosterCollectionExtend:"Collection extended",types:{text:"Text",textarea:"Text Area",number:"Number",email:"Email",select:"Dropdown",multiselect:"Multi Select",radio:"Radio",checkbox:"Checkbox",date:"Date",datetime:"DateTime",time:"Time",file:"File",image:"Image",gps:"GPS",rating:"Rating (stars)",calculated:"Calculated",hidden:"Hidden",label:"Label"}},canvas:{emptyStateNoPage:'Click "+ Page" in the toolbar to get started',emptyStateNoPageDnd:"Drag a field from the toolbox or add a page to get started",emptyStatePage:"Click a field type in the toolbox to add it here",unnamedPage:"Unnamed Page",repeatable:"Repeatable",fieldsRostersCount:(e,r)=>`${e} field${e===1?"":"s"} \xB7 ${r} roster${r===1?"":"s"}`,fieldsCount:e=>`${e} field${e===1?"":"s"}`,rosterVarsCount:e=>`${e} var${e===1?"":"s"}`,addRoster:"+ Add Roster",addFieldToRoster:"+ Add field to roster",pilotPrefix:"pilot:",newRosterName:"New Roster",newFieldName:"New field",newVariableName:e=>`New ${e}`,hasConditionsTitle:"Has conditions",dataSourceConnectedTitle:"Data source connected"},properties:{title:"Properties",name:"Name",code:"Code",description:"Description",placeholder:"Placeholder",version:"Version",formType:"Form type",noType:"\u2014 No type \u2014",formSummary:(e,r)=>`${e} page${e===1?"":"s"} \xB7 ${r} variable${r===1?"":"s"}`,pageSummary:(e,r)=>`${e} variable${e===1?"":"s"} \xB7 ${r} roster${r===1?"":"s"}`,rosterSummary:(e,r)=>`${e} variable${e===1?"":"s"} \xB7 ${r} option${r===1?"":"s"}`,repeatablePage:"Repeatable page",minInstances:"Min instances",maxInstances:"Max instances",controlVariableCode:"Control variable code",instanceLabel:"Instance label template",rosterType:"Roster Type",pilotVariableCode:"Pilot variable code",rosterTypes:{check:"Check (multi-select checkboxes)",list:"List (dropdown per row)",collection:"Collection (add/remove rows)",collection_extend:"Collection Extended (table view)"},linkedTemplate:"Linked to variable library",templateCode:"Code (read-only)",templateName:"Name (read-only)",resetOverride:"Reset",type:"Type",ratingStyle:"Rating style",ratingStyles:{star:"\u2605 Stars",number:"123 Numbers",color:"\u25CF Color dots"},layout:"Layout",startNewRow:"Start new row",columnSpan:"Column span (1-12)",columnSpanAuto:"Auto (equal share)",columnSpanHalf:" (half)",columnSpanThird:" (third)",columnSpanFull:" (full)",required:"Required",readonly:"Read only",hidden:"Hidden by default",expression:"Expression",langConfigSection:"Languages",langConfigAvailable:"Available languages",langConfigDefault:"Default language",langConfigStrategy:"Detection strategy",langConfigStrategies:{prop:"Prop (host-controlled)",browser:"Browser",selector:"In-form selector",auto:"Auto (browser then default)"},langConfigSelectorPosition:"Selector position",langConfigPositions:{top:"Top",bottom:"Bottom"},langConfigConfirmRemove:e=>`Removing "${e.toUpperCase()}" will delete every ${e.toUpperCase()} translation. Confirm?`,langConfigConfirmYes:"Delete",langConfigConfirmNo:"Cancel"},optionsEditor:{optionsCount:e=>`Options (${e})`,noOptions:"No options yet \u2014 add one to populate the choices.",optionLabelPlaceholder:"Label",optionValuePlaceholder:"value",addOption:"+ Add option",optionLabelAria:e=>`Option ${e+1} label`,optionValueAria:e=>`Option ${e+1} value`,removeOptionAria:e=>`Remove option ${e+1}`},conditionBuilder:{conditionsCount:e=>`Conditions (${e})`,addCondition:"+ Add condition",rulesCount:e=>` (${e} rule${e===1?"":"s"})`,addRule:"+ Add rule",action:"Action",match:"Match",all:"ALL (AND)",any:"ANY (OR)",actions:{show:"Show when",hide:"Hide when",validate:"Validate that",require:"Require when",readonly:"Read-only when",setValue:"Set value when"},operators:{equals:"equals",not_equals:"not equals",greater_than:"greater than",less_than:"less than",greater_than_or_equal:"greater than or equal",less_than_or_equal:"less than or equal",contains:"contains",not_contains:"not contains",is_empty:"is empty",is_not_empty:"is not empty",starts_with:"starts with",ends_with:"ends with",in:"in",not_in:"not in",between:"between",regex:"matches regex"},variablePlaceholder:"Variable...",valuePlaceholder:"Value",errorMessage:"Error message",errorMessagePlaceholder:"Validation error message",targetVariableCode:"Target variable code",targetVariablePlaceholder:"TARGET_VAR",valueToSet:"Value to set",valueToSetPlaceholder:"Value"},dataSource:{title:"Data Source Connector",connector:"Connector",none:"None (static options)",connectedTo:"Connected to:",dependencies:e=>`Dependencies (${e})`,selectVariable:"Select variable...",dependencyKeyPlaceholder:"Dependency key (e.g. parentId)",addDependency:"+ Add"},formTypesDialog:{dialogAriaLabel:"Form types",title:"Form types",closeAriaLabel:"Close",noTypes:"No form types yet. Add one below.",confirmDelete:"This type is used by the current form. Confirm deletion?",deleteConfirm:"Delete",deleteCancel:"Cancel",removeTypeAria:e=>`Remove ${e}`,newTypeNamePlaceholder:"New type name",newTypeCodePlaceholder:"CODE (auto)",addButton:"+ Add"},formEditor:{previewMissing:"Pass PreviewComponent prop to enable preview"}};var Ae=createContext(j);function pe({labels:e,children:r}){return jsx(Ae.Provider,{value:e,children:r})}function I(){return useContext(Ae)}function de(e){if(e===null||typeof e!="object")return false;let r=Object.getPrototypeOf(e);return r===Object.prototype||r===null}function ce(e,r){return r?$e(e,r):e}function $e(e,r){if(!de(e)||!de(r))return r===void 0?e:r;let s={...e};for(let i of Object.keys(r)){let t=e[i],o=r[i];de(t)&&de(o)?s[i]=$e(t,o):o!==void 0&&(s[i]=o);}return s}function Oe({open:e,onClose:r}){let{formTypes:s,form:i,addFormType:t,updateFormType:o,removeFormType:a}=T(),l=I(),[p,n]=useState(""),[c,y]=useState(""),[v,d]=useState(null),[u,b]=useState(""),[f,m]=useState(null);if(!e)return null;let x=()=>{p.trim()&&(t({name:p.trim(),code:c.trim()||p.trim().toUpperCase().replace(/\s+/g,"_")}),n(""),y(""));},g=(C,Y)=>{d(C),b(Y);},S=()=>{v&&u.trim()&&o(v,{name:u.trim()}),d(null),b("");},R=C=>{i.formTypeId===C?m(C):a(C);},U=()=>{f&&a(f),m(null);};return jsx("div",{role:"dialog","aria-modal":"true","aria-label":l.formTypesDialog.dialogAriaLabel,"data-testid":"form-types-dialog",onClick:r,style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.3)",zIndex:50,display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"},children:jsxs("div",{onClick:C=>C.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:[jsxs("header",{style:{padding:"16px",borderBottom:"1px solid #e2e8f0",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[jsx("h3",{style:{fontSize:"16px",fontWeight:600,margin:0},children:l.formTypesDialog.title}),jsx("button",{type:"button",onClick:r,"aria-label":l.formTypesDialog.closeAriaLabel,"data-testid":"form-types-dialog-close-x",style:{background:"transparent",border:"none",fontSize:"18px",cursor:"pointer",color:"#64748b",padding:"4px 8px"},children:"\xD7"})]}),jsxs("section",{style:{padding:"16px"},children:[s.length===0&&jsx("div",{"data-testid":"form-types-empty",style:{fontSize:"13px",color:"#94a3b8",marginBottom:"12px"},children:l.formTypesDialog.noTypes}),jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"6px"},children:s.map(C=>{let Y=v===C.id,se=i.formTypeId===C.id,ae=f===C.id;return jsxs("li",{"data-testid":`form-type-row-${C.id}`,style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:"1px solid #e2e8f0",borderRadius:"6px",backgroundColor:se?"#f1f5f9":"#fff"},children:[Y?jsx("input",{type:"text",value:u,autoFocus:true,"data-testid":`form-type-name-edit-${C.id}`,onChange:oe=>b(oe.target.value),onBlur:S,onKeyDown:oe=>{oe.key==="Enter"&&S(),oe.key==="Escape"&&(d(null),b(""));},style:{flex:1,padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}):jsx("span",{"data-testid":`form-type-name-${C.id}`,onClick:()=>g(C.id,C.name),style:{flex:1,fontSize:"13px",cursor:"pointer",padding:"4px 8px"},children:C.name}),jsx("span",{style:{fontSize:"11px",color:"#94a3b8",fontFamily:"monospace"},children:C.code}),jsx("button",{type:"button","aria-label":l.formTypesDialog.removeTypeAria(C.name),"data-testid":`form-type-remove-${C.id}`,onClick:()=>R(C.id),style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:"pointer",fontSize:"14px",lineHeight:1},children:"\xD7"}),ae&&jsxs("div",{"data-testid":`form-type-confirm-${C.id}`,style:{flexBasis:"100%",fontSize:"12px",color:"#b91c1c",backgroundColor:"#fef2f2",padding:"6px 8px",borderRadius:"4px",display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{flex:1},children:l.formTypesDialog.confirmDelete}),jsx("button",{type:"button","data-testid":`form-type-confirm-yes-${C.id}`,onClick:U,style:{padding:"4px 8px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:l.formTypesDialog.deleteConfirm}),jsx("button",{type:"button","data-testid":`form-type-confirm-no-${C.id}`,onClick:()=>m(null),style:{padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:l.formTypesDialog.deleteCancel})]})]},C.id)})})]}),jsxs("section",{style:{padding:"12px 16px",borderTop:"1px solid #e2e8f0",display:"flex",alignItems:"center",gap:"8px",backgroundColor:"#f8fafc"},children:[jsx("input",{type:"text",value:p,"data-testid":"form-types-new-name",placeholder:l.formTypesDialog.newTypeNamePlaceholder,onChange:C=>n(C.target.value),onKeyDown:C=>{C.key==="Enter"&&x();},style:{flex:1,padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"}}),jsx("input",{type:"text",value:c,"data-testid":"form-types-new-code",placeholder:l.formTypesDialog.newTypeCodePlaceholder,onChange:C=>y(C.target.value),style:{width:"120px",padding:"6px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none",fontFamily:"monospace"}}),jsx("button",{type:"button","data-testid":"form-types-add",onClick:x,disabled:p.trim()==="",style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:p.trim()===""?"#cbd5e1":"#2563eb",color:"#fff",fontSize:"13px",cursor:p.trim()===""?"not-allowed":"pointer"},children:l.formTypesDialog.addButton})]})]})})}function ge({onSave:e,onExport:r,onImport:s}){let{form:i,updateFormMeta:t,view:o,setView:a,isDirty:l,isSaving:p,canUndo:n,canRedo:c,undo:y,redo:v,save:d,addPage:u}=T(),b=I(),[f,m]=useState(false),x=async()=>{await d(),e?.();},g=()=>{let R=i.pages.length;u({id:`page-${Date.now()}`,code:`PAGE_${R+1}`,name:`Page ${R+1}`,order:R,isRepeatable:false,items:[]});},S=[{view:"canvas",label:b.toolbar.viewEditor},{view:"preview",label:b.toolbar.viewPreview},{view:"json",label:b.toolbar.viewJson}];return jsxs("div",{style:{display:"flex",alignItems:"center",padding:"8px 16px",borderBottom:"1px solid #e2e8f0",backgroundColor:"#fff",gap:"8px"},children:[jsx("input",{type:"text",value:resolveLabel(i.name,i.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,i.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang),onChange:R=>{let U=i.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,C;typeof i.name=="string"?C=R.target.value:C={...i.name??{},[U]:R.target.value},t({name:C});},style:{border:"none",fontSize:"16px",fontWeight:600,color:"#1e293b",padding:"4px 8px",borderRadius:"4px",outline:"none",minWidth:"200px",backgroundColor:"transparent"},placeholder:b.toolbar.formNamePlaceholder}),l&&jsx("span",{style:{fontSize:"11px",color:"#f59e0b",fontWeight:500},children:b.toolbar.unsaved}),jsx("div",{style:{flex:1}}),jsx(Z,{onClick:g,label:b.toolbar.addPage}),jsx(Z,{onClick:()=>m(true),label:b.toolbar.types,title:b.toolbar.manageFormTypesTitle}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(Z,{onClick:y,label:"\u21A9",disabled:!n(),title:b.toolbar.undo}),jsx(Z,{onClick:v,label:"\u21AA",disabled:!c(),title:b.toolbar.redo}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx("div",{style:{display:"flex",borderRadius:"6px",overflow:"hidden",border:"1px solid #e2e8f0"},children:S.map(R=>jsx("button",{type:"button",onClick:()=>a(R.view),style:{padding:"4px 12px",fontSize:"12px",fontWeight:500,border:"none",cursor:"pointer",backgroundColor:o===R.view?"#2563eb":"#fff",color:o===R.view?"#fff":"#64748b"},children:R.label},R.view))}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(Z,{onClick:x,label:p?b.toolbar.saving:b.toolbar.save,primary:true,disabled:p||!l}),r&&jsx(Z,{onClick:r,label:b.toolbar.export}),s&&jsx(Z,{onClick:s,label:b.toolbar.import}),jsx(Oe,{open:f,onClose:()=>m(false)})]})}function Z({onClick:e,label:r,primary:s,disabled:i,title:t}){return 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:r})}function ye(){let e=I(),[r,s]=useState("fields"),[i,t]=useState(""),{form:o,selection:a,addVariable:l,addRoster:p,addVariableFromTemplate:n,availableTemplates:c}=T(),y=useMemo(()=>[{label:e.toolbox.groupText,items:[{kind:"variable",type:"text",label:e.toolbox.types.text,icon:"T"},{kind:"variable",type:"textarea",label:e.toolbox.types.textarea,icon:"\xB6"},{kind:"variable",type:"number",label:e.toolbox.types.number,icon:"#"},{kind:"variable",type:"email",label:e.toolbox.types.email,icon:"@"}]},{label:e.toolbox.groupSelection,items:[{kind:"variable",type:"select",label:e.toolbox.types.select,icon:"\u25BC"},{kind:"variable",type:"multiselect",label:e.toolbox.types.multiselect,icon:"\u2611"},{kind:"variable",type:"radio",label:e.toolbox.types.radio,icon:"\u25C9"},{kind:"variable",type:"checkbox",label:e.toolbox.types.checkbox,icon:"\u2610"}]},{label:e.toolbox.groupDateTime,items:[{kind:"variable",type:"date",label:e.toolbox.types.date,icon:"\u{1F4C5}"},{kind:"variable",type:"datetime",label:e.toolbox.types.datetime,icon:"\u{1F550}"},{kind:"variable",type:"time",label:e.toolbox.types.time,icon:"\u23F0"}]},{label:e.toolbox.groupMedia,items:[{kind:"variable",type:"file",label:e.toolbox.types.file,icon:"\u{1F4CE}"},{kind:"variable",type:"image",label:e.toolbox.types.image,icon:"\u{1F5BC}"},{kind:"variable",type:"gps",label:e.toolbox.types.gps,icon:"\u{1F4CD}"}]},{label:e.toolbox.groupAdvanced,items:[{kind:"variable",type:"rating",label:e.toolbox.types.rating,icon:"\u2605"},{kind:"variable",type:"calculated",label:e.toolbox.types.calculated,icon:"fx"},{kind:"variable",type:"hidden",label:e.toolbox.types.hidden,icon:"\u{1F441}"},{kind:"variable",type:"label",label:e.toolbox.types.label,icon:"Aa"}]},{label:e.toolbox.groupRoster,items:[{kind:"roster",rosterType:"check",label:e.toolbox.typeRosterCheck,icon:"\u25A4"},{kind:"roster",rosterType:"list",label:e.toolbox.typeRosterList,icon:"\u25A6"},{kind:"roster",rosterType:"collection",label:e.toolbox.typeRosterCollection,icon:"\u25A5"},{kind:"roster",rosterType:"collection_extend",label:e.toolbox.typeRosterCollectionExtend,icon:"\u25A9"}]}],[e]),v=a.type==="page"||a.type==="variable"||a.type==="roster"?a.pageCode:o.pages[0]?.code,d=f=>{if(!v||!o.pages.find(g=>g.code===v))return;if(f.kind==="roster"){let g=`ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`;p(v,{id:`roster-${Date.now()}`,code:g,name:e.canvas.newRosterName,rosterType:f.rosterType,order:0,variables:[]});return}let x=`${f.type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`;l(v,{id:`var-${Date.now()}`,code:x,name:e.canvas.newVariableName(f.label),type:f.type,order:0,isRequired:false,isReadonly:false,isHidden:false});},u=f=>{v&&n(v,f);},b=y.map(f=>({...f,items:f.items.filter(m=>m.label.toLowerCase().includes(i.toLowerCase()))})).filter(f=>f.items.length>0);return jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx(Lo,{tab:r,setTab:s,labels:e}),jsx("div",{style:{padding:"12px",borderBottom:"1px solid #e2e8f0"},children:jsx("input",{type:"text",placeholder:e.toolbox.searchPlaceholder,value:i,onChange:f=>t(f.target.value),style:{width:"100%",padding:"6px 10px",border:"1px solid #e2e8f0",borderRadius:"6px",fontSize:"13px",outline:"none",boxSizing:"border-box"}})}),jsxs("div",{style:{flex:1,overflowY:"auto",padding:"8px"},children:[!v&&jsx("div",{style:{padding:"12px",color:"#94a3b8",fontSize:"12px",textAlign:"center"},children:e.toolbox.addPageFirst}),r==="fields"&&b.map(f=>jsxs("div",{style:{marginBottom:"16px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#94a3b8",textTransform:"uppercase",letterSpacing:"0.5px",marginBottom:"6px",padding:"0 4px"},children:f.label}),f.items.map(m=>{let x=m.kind==="roster"?`roster-${m.rosterType}`:`var-${m.type}`,g=m.kind==="roster"?`toolbox-roster-${m.rosterType}`:`toolbox-variable-${m.type}`;return jsxs("div",{"data-testid":g,onClick:()=>d(m),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:S=>{S.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:S=>{S.currentTarget.style.backgroundColor="transparent";},children:[jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:m.icon}),jsx("span",{children:m.label})]},x)})]},f.label)),r==="variables"&&jsx(ko,{templates:c,scopeId:o.scopeId,search:i,onAdd:u,defaultLang:o.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,labels:e})]})]})}function Lo({tab:e,setTab:r,labels:s}){let i={flex:1,padding:"8px 0",fontSize:"12px",fontWeight:500,textAlign:"center",cursor:"pointer",userSelect:"none",color:"#64748b",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:"transparent"},t={...i,color:"#2563eb",fontWeight:600,borderBottomColor:"#2563eb"};return jsxs("div",{style:{display:"flex",borderBottom:"1px solid #e2e8f0",backgroundColor:"#fff"},children:[jsx("div",{role:"tab","aria-selected":e==="fields","data-testid":"toolbox-tab-fields",onClick:()=>r("fields"),style:e==="fields"?t:i,children:s.toolbox.tabFields}),jsx("div",{role:"tab","aria-selected":e==="variables","data-testid":"toolbox-tab-variables",onClick:()=>r("variables"),style:e==="variables"?t:i,children:s.toolbox.tabVariables})]})}function ko({templates:e,scopeId:r,search:s,onAdd:i,defaultLang:t,labels:o}){let a=n=>jsx("div",{"data-testid":"toolbox-variables-empty",style:{padding:"14px",color:"#94a3b8",fontSize:"12px",textAlign:"center",fontStyle:"italic"},children:n});if(!r)return a(o.toolbox.noScope);if(e.length===0)return a(o.toolbox.noTemplates);let l=s.toLowerCase(),p=e.filter(n=>{if(!l)return true;let c=n.code.toLowerCase().includes(l),y=Ne(n.name,t).toLowerCase().includes(l);return c||y}).slice().sort((n,c)=>n.code.localeCompare(c.code));return p.length===0?a(o.toolbox.noTemplates):jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:p.map(n=>jsxs("div",{"data-testid":`toolbox-template-${n.code}`,onClick:()=>i(n),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:c=>{c.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:c=>{c.currentTarget.style.backgroundColor="transparent";},children:[jsx("span",{style:{fontSize:"10px",fontWeight:600,padding:"2px 6px",borderRadius:"4px",backgroundColor:"#e0e7ff",color:"#3730a3",textTransform:"uppercase",letterSpacing:"0.3px",minWidth:"42px",textAlign:"center"},children:n.variableType}),jsxs("div",{style:{display:"flex",flexDirection:"column",minWidth:0,flex:1},children:[jsx("span",{style:{fontFamily:"monospace",fontSize:"11px",color:"#475569",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:n.code}),jsx("span",{style:{fontSize:"12px",color:"#1e293b",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Ne(n.name,t)})]})]},n.id))})}function Ne(e,r){return resolveLabel(e,r,r)}function ve(){let r=T(s=>s.form).langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang;return s=>resolveLabel(s,r,r)}function zo(e){let r=e.slice().sort((t,o)=>t.order-o.order),s=[],i=null;for(let t of r){if(isPageRoster(t)){i&&(s.push({kind:"variables",variables:i}),i=null),s.push({kind:"roster",roster:t});continue}let o=t;o.startWithNewLine===false&&i&&i.length>0?i.push(o):(i&&s.push({kind:"variables",variables:i}),i=[o]);}return i&&s.push({kind:"variables",variables:i}),s}function he(){let{form:e}=T(),r=I();return e.pages.length===0?jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:r.canvas.emptyStateNoPage}):jsx("div",{style:{flex:1,overflowY:"auto",padding:"16px",backgroundColor:"#fff"},children:e.pages.slice().sort((s,i)=>s.order-i.order).map(s=>jsx(Do,{page:s},s.code))})}function Do({page:e}){let{selection:r,select:s,removePage:i}=T(),t=I(),o=ve(),a=r.type==="page"&&r.pageCode===e.code,l=e.items??[...getPageVariables(e),...e.rosters??[]],p=l.filter(isPageVariable).length,n=l.filter(isPageRoster).length,c=zo(l);return jsxs("div",{style:{marginBottom:"16px",border:`2px solid ${a?"#2563eb":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden"},children:[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:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{fontSize:"14px",fontWeight:600,color:"#1e293b"},children:o(e.name)||t.canvas.unnamedPage}),e.isRepeatable&&jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:t.canvas.repeatable})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{fontSize:"12px",color:"#94a3b8"},children:t.canvas.fieldsRostersCount(p,n)}),jsx("button",{onClick:y=>{y.stopPropagation(),i(e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px 4px"},children:"\xD7"})]})]}),jsxs("div",{style:{padding:"4px 0"},children:[c.map((y,v)=>y.kind==="roster"?jsx(Eo,{roster:y.roster,pageCode:e.code},`r-${y.roster.code}`):y.variables.length===1?jsx(xe,{variable:y.variables[0],pageCode:e.code},y.variables[0].code):jsx("div",{style:{display:"flex",gap:"2px",backgroundColor:"#f0f4ff",borderLeft:"2px solid #c7d2fe",margin:"1px 0"},children:y.variables.map(d=>jsx("div",{style:{flex:d.colSpan?`0 0 ${d.colSpan/12*100}%`:"1 1 0%",minWidth:0},children:jsx(xe,{variable:d,pageCode:e.code})},d.code))},`row-${v}`)),l.length===0&&jsx("div",{style:{padding:"12px 14px",color:"#94a3b8",fontSize:"12px",fontStyle:"italic"},children:t.canvas.emptyStatePage})]})]})}function xe({variable:e,pageCode:r,rosterCode:s}){let{selection:i,select:t,removeVariable:o}=T(),a=I(),l=ve(),p=i.type==="variable"&&i.variableCode===e.code;return jsxs("div",{onClick:n=>{n.stopPropagation(),t({type:"variable",pageCode:r,variableCode:e.code,rosterCode:s});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",cursor:"pointer",backgroundColor:p?"#eff6ff":"transparent",borderLeft:p?"3px solid #2563eb":"3px solid transparent",fontSize:"13px"},children:[jsx("span",{style:{color:"#94a3b8",fontSize:"11px",width:"60px",flexShrink:0},children:e.type}),jsx("span",{style:{color:"#334155",flex:1},children:l(e.name)||e.code}),e.isRequired&&jsx("span",{style:{color:"#ef4444",fontSize:"11px"},children:"*"}),e.conditions&&e.conditions.length>0&&jsx("span",{style:{color:"#f59e0b",fontSize:"11px"},title:a.canvas.hasConditionsTitle,children:"\u26A1"}),e.dataSourceId&&jsx("span",{style:{color:"#22c55e",fontSize:"11px"},title:a.canvas.dataSourceConnectedTitle,children:"\u27F3"}),jsx("button",{onClick:n=>{n.stopPropagation(),o(r,e.code,s);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px",padding:"0 2px",opacity:.5},children:"\xD7"})]})}function Eo({roster:e,pageCode:r}){let{selection:s,select:i,removeRoster:t,addVariable:o}=T(),a=I(),l=ve(),p=s.type==="roster"&&s.rosterCode===e.code,n=c=>{c.stopPropagation();let y=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;o(r,{id:`var-${Date.now()}`,code:y,name:a.canvas.newFieldName,type:"text",order:e.variables.length,isRequired:false,isReadonly:false,isHidden:false},e.code);};return jsxs("div",{style:{margin:"4px 8px",border:`1px solid ${p?"#2563eb":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:c=>{c.stopPropagation(),i({type:"roster",pageCode:r,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:p?"#fef3c7":"#fffbeb",fontSize:"12px",fontWeight:600,color:"#92400e",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[jsxs("span",{children:["\u25A4 ",l(e.name)||e.code]}),jsx("span",{style:{fontSize:"10px",padding:"1px 4px",borderRadius:"3px",backgroundColor:"#fde68a",color:"#78350f"},children:e.rosterType}),e.pilotVariableCode&&jsxs("span",{style:{fontSize:"10px",color:"#92400e",fontWeight:400},children:[a.canvas.pilotPrefix," ",e.pilotVariableCode]})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[jsx("span",{style:{fontSize:"11px",color:"#b45309"},children:a.canvas.rosterVarsCount(e.variables.length)}),jsx("button",{onClick:c=>{c.stopPropagation(),t(r,e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px"},children:"\xD7"})]})]}),e.variables.slice().sort((c,y)=>c.order-y.order).map(c=>jsx(xe,{variable:c,pageCode:r,rosterCode:e.code},c.code)),jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsx("button",{onClick:n,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:a.canvas.addFieldToRoster})})]})}function Me(e,r,s="fr"){if(e==null)return "";if(typeof e=="string")return e;let i=e[r];if(typeof i=="string"&&i!=="")return i;let t=e[s];if(typeof t=="string"&&t!=="")return t;for(let o of Object.values(e))if(typeof o=="string"&&o!=="")return o;return ""}var ue={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},Oo={padding:"4px 10px",border:"1px solid #e2e8f0",borderBottom:"none",borderTopLeftRadius:"4px",borderTopRightRadius:"4px",fontSize:"11px",fontWeight:600,cursor:"pointer",textTransform:"uppercase",letterSpacing:"0.5px",minWidth:"38px"};function We(e,r,s){if(e==null)return "";if(typeof e=="string")return r===s?e:"";let i=e[r];return typeof i=="string"?i:""}function le({value:e,onChange:r,availableLangs:s,defaultLang:i="fr",placeholder:t,multiline:o,testIdPrefix:a,disabled:l}){let p=s.length>0?s:[i],n=p.length>1,[c,y]=useState(p[0]),v=I();p.includes(c)||y(p[0]);let d=(b,f)=>{if(!n){r(f);return}let m=typeof e=="string"?{[i]:e}:{...e??{}};m[b]=f,r(m);};if(!n){let b=p[0],f=We(e,b,i);return o?jsx("textarea",{value:f,rows:3,placeholder:t,disabled:l,"data-testid":a?`${a}-${b}`:void 0,onChange:m=>d(b,m.target.value),style:ue}):jsx("input",{type:"text",value:f,placeholder:t,disabled:l,"data-testid":a?`${a}-${b}`:void 0,onChange:m=>d(b,m.target.value),style:ue})}let u=We(e,c,i);return jsxs("div",{"data-testid":a,style:{display:"flex",flexDirection:"column"},children:[jsx("div",{role:"tablist","aria-label":v.properties.title,style:{display:"flex",gap:"2px"},children:p.map(b=>{let f=b===c;return jsx("button",{type:"button",role:"tab","aria-selected":f,"data-testid":a?`${a}-tab-${b}`:void 0,onClick:()=>y(b),style:{...Oo,backgroundColor:f?"#fff":"#f1f5f9",color:f?"#2563eb":"#64748b",borderColor:"#e2e8f0"},children:b},b)})}),o?jsx("textarea",{value:u,rows:3,placeholder:t,disabled:l,"data-testid":a?`${a}-${c}`:void 0,onChange:b=>d(c,b.target.value),style:{...ue,borderTopLeftRadius:0}}):jsx("input",{type:"text",value:u,placeholder:t,disabled:l,"data-testid":a?`${a}-${c}`:void 0,onChange:b=>d(c,b.target.value),style:{...ue,borderTopLeftRadius:0}})]})}function _({label:e,value:r,onChange:s,placeholder:i,multiline:t,testIdPrefix:o,disabled:a}){let p=T(n=>n.form).langConfig??DEFAULT_LANG_CONFIG;return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),jsx(le,{value:r,onChange:s,availableLangs:p.availableLangs,defaultLang:p.defaultLang,placeholder:i,multiline:t,testIdPrefix:o,disabled:a})]})}var Wo=["fr","en"];function re(){let{form:e,formTypes:r,updateFormMeta:s}=T(),i=I(),t=e.langConfig??DEFAULT_LANG_CONFIG,o=e.pages.reduce((a,l)=>a+getPageVariables(l).length+getPageRosters(l).reduce((p,n)=>p+n.variables.length,0),0);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(_,{label:i.properties.name,value:e.name,onChange:a=>s({name:a}),testIdPrefix:"form-name"}),jsx($,{label:i.properties.code,value:e.code,onChange:a=>s({code:a})}),jsx(_,{label:i.properties.description,value:e.description,onChange:a=>s({description:a}),multiline:true,testIdPrefix:"form-description"}),jsx($,{label:i.properties.version,value:e.version,onChange:a=>s({version:a})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:i.properties.formType}),jsxs("select",{"data-testid":"form-properties-type-select",value:e.formTypeId??"",onChange:a=>s({formTypeId:a.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:[jsx("option",{value:"",children:i.properties.noType}),r.map(a=>jsx("option",{value:a.id,children:a.name},a.id))]})]}),jsx(Mo,{langConfig:t}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8",marginTop:"8px"},children:i.properties.formSummary(e.pages.length,o)})]})}function Mo({langConfig:e}){let{form:r,updateFormMeta:s,setForm:i}=T(),t=I(),[o,a]=useState(null),l={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},p={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},n=u=>{s({langConfig:u});},c=u=>{e.availableLangs.includes(u)||n({...e,availableLangs:[...e.availableLangs,u]});},y=u=>{e.availableLangs.length<=1||u!==e.defaultLang&&a(u);},v=u=>{let b=e.availableLangs.filter(g=>g!==u),f=b.includes(e.defaultLang)?e.defaultLang:b[0]??"fr",m=qo(r,u,f,b.length===1),x={...e,defaultLang:f,availableLangs:b};i({...m,langConfig:x}),a(null);},d=()=>a(null);return jsxs("div",{"data-testid":"form-lang-config",style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px",marginTop:"4px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:t.properties.langConfigSection}),jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigAvailable}),jsx("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap"},children:Wo.map(u=>{let b=e.availableLangs.includes(u),f=u===e.defaultLang,m=e.availableLangs.length<=1,x=b&&(f||m);return jsxs("label",{style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",color:"#334155",cursor:x?"default":"pointer",opacity:x?.6:1},children:[jsx("input",{type:"checkbox","data-testid":`lang-toggle-${u}`,checked:b,disabled:x,onChange:g=>{g.target.checked?c(u):y(u);}}),jsx("span",{children:u.toUpperCase()}),f&&jsxs("span",{style:{fontSize:"10px",color:"#94a3b8",fontStyle:"italic"},children:["(",t.properties.langConfigDefault,")"]})]},u)})})]}),jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigDefault}),jsx("select",{"data-testid":"lang-default-select",value:e.defaultLang,onChange:u=>n({...e,defaultLang:u.target.value}),style:p,children:e.availableLangs.map(u=>jsx("option",{value:u,children:u.toUpperCase()},u))})]}),jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigStrategy}),jsxs("select",{"data-testid":"lang-strategy-select",value:e.strategy,onChange:u=>n({...e,strategy:u.target.value}),style:p,children:[jsx("option",{value:"prop",children:t.properties.langConfigStrategies.prop}),jsx("option",{value:"browser",children:t.properties.langConfigStrategies.browser}),jsx("option",{value:"selector",children:t.properties.langConfigStrategies.selector}),jsx("option",{value:"auto",children:t.properties.langConfigStrategies.auto})]})]}),e.strategy==="selector"&&jsxs("div",{children:[jsx("label",{style:l,children:t.properties.langConfigSelectorPosition}),jsxs("select",{"data-testid":"lang-selector-position-select",value:e.selectorPosition??"top",onChange:u=>n({...e,selectorPosition:u.target.value}),style:p,children:[jsx("option",{value:"top",children:t.properties.langConfigPositions.top}),jsx("option",{value:"bottom",children:t.properties.langConfigPositions.bottom})]})]}),o&&jsxs("div",{"data-testid":"lang-remove-confirm",style:{padding:"8px",backgroundColor:"#fef2f2",border:"1px solid #fecaca",borderRadius:"6px",fontSize:"12px",color:"#b91c1c",display:"flex",flexDirection:"column",gap:"8px"},children:[jsx("span",{children:t.properties.langConfigConfirmRemove(o)}),jsxs("div",{style:{display:"flex",gap:"8px"},children:[jsx("button",{type:"button","data-testid":"lang-remove-confirm-yes",onClick:()=>v(o),style:{padding:"4px 10px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:t.properties.langConfigConfirmYes}),jsx("button",{type:"button","data-testid":"lang-remove-confirm-no",onClick:d,style:{padding:"4px 10px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:t.properties.langConfigConfirmNo})]})]})]})}function qo(e,r,s,i){let t=d=>{if(d===void 0)return;if(typeof d=="string")return d;let u={...d};return delete u[r],i?Me(u,s,"fr"):u},o=d=>({...d,label:t(d.label)??""}),a=d=>({...d,message:t(d.message)??""}),l=d=>({...d,errorMessage:t(d.errorMessage)}),p=d=>({...d,name:t(d.name)??"",description:t(d.description),placeholder:t(d.placeholder),options:d.options?d.options.map(o):d.options,validationRules:d.validationRules?d.validationRules.map(a):d.validationRules,conditions:d.conditions?d.conditions.map(l):d.conditions}),n=d=>({...d,name:t(d.name)??"",options:d.options?d.options.map(o):d.options,variables:d.variables.map(p),conditions:d.conditions?d.conditions.map(l):d.conditions}),c=d=>({...d,instanceLabel:t(d.instanceLabel)}),y=d=>isPageRoster(d)?n(d):p(d),v=d=>{let u=Array.isArray(d.items)?d.items.map(y):[...getPageVariables(d).map(p),...getPageRosters(d).map(n)],{variables:b,rosters:f,...m}=d;return {...m,name:t(d.name)??"",repeatConfig:d.repeatConfig?c(d.repeatConfig):d.repeatConfig,items:u,conditions:d.conditions?d.conditions.map(l):d.conditions}};return {...e,name:t(e.name)??"",description:t(e.description),pages:e.pages.map(v)}}function $({label:e,value:r,onChange:s,multiline:i,type:t="text",readOnly:o}){let a={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:o?"#64748b":"#334155",backgroundColor:o?"#f1f5f9":"#fff",outline:"none",boxSizing:"border-box",cursor:o?"not-allowed":"text"};return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),i?jsx("textarea",{value:r,onChange:l=>s(l.target.value),rows:3,style:a,readOnly:o}):jsx("input",{type:t,value:r,onChange:l=>s(l.target.value),style:a,readOnly:o})]})}function He({page:e}){let{updatePage:r}=T(),s=I();return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(_,{label:s.properties.name,value:e.name,onChange:i=>r(e.code,{name:i}),testIdPrefix:"page-name"}),jsx($,{label:s.properties.code,value:e.code,onChange:()=>{}}),jsx("div",{children:jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsx("input",{type:"checkbox",checked:e.isRepeatable,onChange:i=>r(e.code,{isRepeatable:i.target.checked,repeatConfig:i.target.checked?{min:1,max:10}:void 0})}),s.properties.repeatablePage]})}),e.isRepeatable&&e.repeatConfig&&jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsx($,{label:s.properties.minInstances,value:String(e.repeatConfig.min??1),type:"number",onChange:i=>r(e.code,{repeatConfig:{...e.repeatConfig,min:parseInt(i)||1}})}),jsx($,{label:s.properties.maxInstances,value:String(e.repeatConfig.max??10),type:"number",onChange:i=>r(e.code,{repeatConfig:{...e.repeatConfig,max:parseInt(i)||10}})}),jsx($,{label:s.properties.controlVariableCode,value:e.repeatConfig.controlVariableCode??"",onChange:i=>r(e.code,{repeatConfig:{...e.repeatConfig,controlVariableCode:i||void 0}})}),jsx(_,{label:s.properties.instanceLabel,value:e.repeatConfig.instanceLabel,onChange:i=>r(e.code,{repeatConfig:{...e.repeatConfig,instanceLabel:i}}),testIdPrefix:"page-instance-label"})]}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:s.properties.pageSummary(getPageVariables(e).length,getPageRosters(e).length)})]})}var Ko=["equals","not_equals","greater_than","less_than","greater_than_or_equal","less_than_or_equal","contains","not_contains","is_empty","is_not_empty","starts_with","ends_with","in","regex"],Jo=["show","hide","validate","require","readonly","setValue"],Yo=["is_empty","is_not_empty"];function Ie({conditions:e,onChange:r,availableVariables:s,rosterContext:i}){let t=I(),[o,a]=useState(null),l=()=>{let c={id:generateId(),action:"show",expression:""};r([...e,c]),a(c.id);},p=c=>{r(e.filter(y=>y.id!==c)),o===c&&a(null);},n=(c,y)=>{r(e.map(v=>v.id===c?{...v,...y}:v));};return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:t.conditionBuilder.conditionsCount(e.length)}),e.map(c=>jsx(Xo,{condition:c,isExpanded:o===c.id,onToggle:()=>a(o===c.id?null:c.id),onUpdate:y=>n(c.id,y),onRemove:()=>p(c.id),availableVariables:s,rosterContext:i},c.id)),jsx("button",{type:"button",onClick:l,style:{padding:"6px 12px",border:"1px dashed #cbd5e1",borderRadius:"6px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:"pointer"},children:t.conditionBuilder.addCondition})]})}function Xo({condition:e,isExpanded:r,onToggle:s,onUpdate:i,onRemove:t,availableVariables:o,rosterContext:a}){let l=I(),[p,n]=useState(()=>et(e.expression)),c=(m,x)=>{n(m);let g=je(m,x);i({expression:g});},y=m=>{i({action:m});let x=je(p,m);i({action:m,expression:x});},v=()=>{let m={id:generateId(),variableCode:"",operator:"equals",value:""},x={...p,rules:[...p.rules,m]};c(x,e.action);},d=m=>{let x={...p,rules:p.rules.filter(g=>g.id!==m)};c(x,e.action);},u=(m,x)=>{let g={...p,rules:p.rules.map(S=>S.id===m?{...S,...x}:S)};c(g,e.action);},b=m=>{let x={...p,logic:m};c(x,e.action);},f=l.conditionBuilder.actions[e.action]??e.action;return jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:s,style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"6px 10px",backgroundColor:"#f8fafc",cursor:"pointer",fontSize:"12px",color:"#334155"},children:[jsxs("span",{style:{fontWeight:500},children:[f,p.rules.length>0?l.conditionBuilder.rulesCount(p.rules.length):""]}),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("span",{style:{color:"#94a3b8"},children:r?"\u25B2":"\u25BC"}),jsx("span",{onClick:m=>{m.stopPropagation(),t();},style:{color:"#ef4444",cursor:"pointer",padding:"0 4px"},role:"button",children:"\xD7"})]})]}),r&&jsxs("div",{style:{padding:"10px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.action}),jsx("select",{value:e.action,onChange:m=>y(m.target.value),style:Se,children:Jo.map(m=>jsx("option",{value:m,children:l.conditionBuilder.actions[m]},m))})]}),p.rules.length>1&&jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#64748b"},children:l.conditionBuilder.match}),jsx("button",{type:"button",onClick:()=>b("and"),style:{...Ke,backgroundColor:p.logic==="and"?"#2563eb":"#f1f5f9",color:p.logic==="and"?"#fff":"#64748b"},children:l.conditionBuilder.all}),jsx("button",{type:"button",onClick:()=>b("or"),style:{...Ke,backgroundColor:p.logic==="or"?"#2563eb":"#f1f5f9",color:p.logic==="or"?"#fff":"#64748b"},children:l.conditionBuilder.any})]}),p.rules.map(m=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxs("select",{value:m.variableCode,onChange:x=>u(m.id,{variableCode:x.target.value}),style:{...Se,flex:1},children:[jsx("option",{value:"",children:l.conditionBuilder.variablePlaceholder}),o.map(x=>jsxs("option",{value:x.code,children:[x.name," (",x.code,")"]},x.code))]}),jsx("select",{value:m.operator,onChange:x=>u(m.id,{operator:x.target.value}),style:{...Se,width:"130px"},children:Ko.map(x=>jsx("option",{value:x,children:l.conditionBuilder.operators[x]},x))}),!Yo.includes(m.operator)&&jsx("input",{type:"text",value:m.value,onChange:x=>u(m.id,{value:x.target.value}),placeholder:l.conditionBuilder.valuePlaceholder,style:{...Re,flex:1}}),jsx("button",{type:"button",onClick:()=>d(m.id),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px"},children:"\xD7"})]},m.id)),jsx("button",{type:"button",onClick:v,style:{padding:"4px 8px",border:"1px dashed #cbd5e1",borderRadius:"4px",backgroundColor:"transparent",color:"#64748b",fontSize:"11px",cursor:"pointer"},children:l.conditionBuilder.addRule}),e.expression&&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 m=RosterConditionEngine.validateCondition(e.expression,a.variables,a.currentVariableCode,a.currentVariableOrder);return m.isValid?null: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:m.errors.map((x,g)=>jsxs("div",{children:[jsx("strong",{children:x.type}),x.variableCode?`: \${${x.variableCode}}`:""," \u2014 ",x.message]},g))})})(),e.action==="validate"&&jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.errorMessage}),jsx(Zo,{value:e.errorMessage,onChange:m=>i({errorMessage:m}),placeholder:l.conditionBuilder.errorMessagePlaceholder})]}),e.action==="setValue"&&jsxs(Fragment,{children:[jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.targetVariableCode}),jsx("input",{type:"text",value:e.targetVariableCode??"",onChange:m=>i({targetVariableCode:m.target.value||void 0}),placeholder:l.conditionBuilder.targetVariablePlaceholder,style:Re})]}),jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:l.conditionBuilder.valueToSet}),jsx("input",{type:"text",value:e.setValue!==void 0?String(e.setValue):"",onChange:m=>i({setValue:m.target.value}),placeholder:l.conditionBuilder.valueToSetPlaceholder,style:Re})]})]})]})]})}function Zo({value:e,onChange:r,placeholder:s}){let t=T(o=>o.form).langConfig??DEFAULT_LANG_CONFIG;return jsx(le,{value:e,onChange:o=>r(o),availableLangs:t.availableLangs,defaultLang:t.defaultLang,placeholder:s,testIdPrefix:"condition-error-message"})}function Qo(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 je(e,r){if(e.rules.length===0)return "";let s=e.rules.filter(t=>t.variableCode).map(t=>{let o=`\${${t.variableCode}}`,a=Qo(t.operator);if(t.operator==="is_empty")return `isEmpty(${o})`;if(t.operator==="is_not_empty")return `isNotEmpty(${o})`;if(t.operator==="contains")return `contains(${o}, "${t.value}")`;if(t.operator==="starts_with")return `startsWith(${o}, "${t.value}")`;if(t.operator==="ends_with")return `endsWith(${o}, "${t.value}")`;let l=/^\d+(\.\d+)?$/.test(t.value)?t.value:`"${t.value}"`;return `${o} ${a} ${l}`});if(s.length===0)return "";let i=s.join(e.logic==="and"?" && ":" || ");return r==="show"?`show(${i})`:r==="hide"?`hide(${i})`:r==="validate"?`ConditionEval(${i})`:i}function et(e){return {logic:"and",rules:[]}}var Se={padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none"},Re={width:"100%",padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"},Ke={padding:"2px 8px",borderRadius:"10px",border:"none",fontSize:"10px",fontWeight:600,cursor:"pointer"};function Te({dataSourceId:e,dependencies:r={},availableConnectors:s,availableVariables:i,onConnectorChange:t,onDependenciesChange:o}){let a=I(),[l,p]=useState(""),n=s.find(u=>u.id===e),c=Object.entries(r),y=()=>{l.trim()&&(o({...r,[l.trim()]:""}),p(""));},v=u=>{let b={...r};delete b[u],o(b);},d=(u,b)=>{o({...r,[u]:b});};return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",padding:"8px",backgroundColor:"#f0fdf4",borderRadius:"6px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#166534",textTransform:"uppercase",letterSpacing:"0.5px"},children:a.dataSource.title}),jsxs("div",{children:[jsx("label",{style:rt,children:a.dataSource.connector}),jsxs("select",{value:e??"",onChange:u=>{let b=u.target.value||void 0;t(b),b||o({});},style:Xe,children:[jsx("option",{value:"",children:a.dataSource.none}),s.map(u=>jsxs("option",{value:u.id,children:[u.name," (",u.id,")"]},u.id))]})]}),n&&jsxs("div",{style:{fontSize:"11px",color:"#166534",padding:"4px 6px",backgroundColor:"#dcfce7",borderRadius:"4px"},children:[a.dataSource.connectedTo," ",jsx("strong",{children:n.name})]}),e&&jsxs(Fragment,{children:[jsx("div",{style:{fontSize:"11px",fontWeight:500,color:"#166534"},children:a.dataSource.dependencies(c.length)}),c.map(([u,b])=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#334155",minWidth:"60px",fontFamily:"monospace"},children:u}),jsx("span",{style:{fontSize:"11px",color:"#94a3b8"},children:"\u2192"}),jsxs("select",{value:b,onChange:f=>d(u,f.target.value),style:{...Xe,flex:1},children:[jsx("option",{value:"",children:a.dataSource.selectVariable}),i.map(f=>jsxs("option",{value:f.code,children:[f.name," (",f.code,")"]},f.code))]}),jsx("button",{type:"button",onClick:()=>v(u),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px"},children:"\xD7"})]},u)),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("input",{type:"text",value:l,onChange:u=>p(u.target.value),placeholder:a.dataSource.dependencyKeyPlaceholder,style:{...at,flex:1},onKeyDown:u=>u.key==="Enter"&&y()}),jsx("button",{type:"button",onClick:y,disabled:!l.trim(),style:{padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",backgroundColor:"#fff",color:"#2563eb",fontSize:"11px",cursor:"pointer",opacity:l.trim()?1:.5},children:a.dataSource.addDependency})]})]})]})}var rt={fontSize:"11px",fontWeight:500,color:"#166534",display:"block",marginBottom:"2px"},Xe={width:"100%",padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",backgroundColor:"#fff"},at={padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"};function lt(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"")}function Ze(e){return typeof e=="string"?e:e==null?"":String(e)}function Le(e,r){if(e==null)return "";if(typeof e=="string")return e;let s=e[r];if(typeof s=="string"&&s!=="")return s;for(let i of Object.values(e))if(typeof i=="string"&&i!=="")return i;return ""}function eo({options:e,onChange:r,disabled:s}){let i=I(),o=T(b=>b.form).langConfig??DEFAULT_LANG_CONFIG,a=(b,f)=>{let m=e.map((x,g)=>g===b?{...x,...f}:x);r(m);},l=(b,f)=>{let m=e[b],x=Ze(m.value),g=Le(m.label,o.defaultLang),S=Le(f,o.defaultLang);x===""&&g===""&&S!==""?a(b,{label:f,value:lt(S)}):a(b,{label:f});},p=(b,f)=>{a(b,{value:f});},n=()=>{r([...e,{label:"",value:""}]);},c=b=>{r(e.filter((f,m)=>m!==b));},y={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},v={flex:1,padding:"6px 8px",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"},d="1px solid #e2e8f0",u="1px solid #ef4444";return jsxs("div",{"data-testid":"options-editor",children:[jsx("label",{style:y,children:i.optionsEditor.optionsCount(e.length)}),e.length===0&&jsx("div",{"data-testid":"options-editor-empty",style:{fontSize:"12px",color:"#94a3b8",marginBottom:"8px"},children:i.optionsEditor.noOptions}),jsx("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:e.map((b,f)=>{let m=Le(b.label,o.defaultLang),x=Ze(b.value),g=m.trim()==="",S=x.trim()==="";return jsxs("div",{"data-testid":`option-row-${f}`,style:{display:"flex",alignItems:"flex-start",gap:"6px"},children:[jsx("div",{"aria-label":i.optionsEditor.optionLabelAria(f),"data-testid":`option-label-${f}`,style:{flex:1,border:g?u:d,borderRadius:"4px"},children:jsx(le,{value:b.label,onChange:R=>l(f,R),availableLangs:o.availableLangs,defaultLang:o.defaultLang,placeholder:i.optionsEditor.optionLabelPlaceholder,disabled:s,testIdPrefix:`option-label-input-${f}`})}),jsx("input",{type:"text","aria-label":i.optionsEditor.optionValueAria(f),"data-testid":`option-value-${f}`,value:x,placeholder:i.optionsEditor.optionValuePlaceholder,disabled:s,onChange:R=>p(f,R.target.value),style:{...v,border:S?u:d,maxWidth:"40%"}}),jsx("button",{type:"button","aria-label":i.optionsEditor.removeOptionAria(f),"data-testid":`option-remove-${f}`,onClick:()=>c(f),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"})]},f)})}),jsx("button",{type:"button","data-testid":"options-editor-add",onClick:n,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:i.optionsEditor.addOption})]})}var ct=new Set(["type","description","placeholder","isRequired","isReadonly","isHidden","options","validationRules","conditions","expression","dataSourceId","dataSourceDependencies","style","metadata"]);function ke(e){return e==="type"?"variableType":e}function to({variable:e,pageCode:r,rosterCode:s,availableConnectors:i=[]}){let {form:t,updateVariable:o,setVariableOverride:a,resetVariableOverride:l,availableTemplates:p}=T(),n=I(),c=useMemo(()=>[{value:"text",label:n.toolbox.types.text},{value:"textarea",label:n.toolbox.types.textarea},{value:"number",label:n.toolbox.types.number},{value:"date",label:n.toolbox.types.date},{value:"datetime",label:n.toolbox.types.datetime},{value:"time",label:n.toolbox.types.time},{value:"select",label:n.toolbox.types.select},{value:"multiselect",label:n.toolbox.types.multiselect},{value:"radio",label:n.toolbox.types.radio},{value:"checkbox",label:n.toolbox.types.checkbox},{value:"file",label:n.toolbox.types.file},{value:"gps",label:n.toolbox.types.gps},{value:"rating",label:n.toolbox.types.rating},{value:"calculated",label:n.toolbox.types.calculated},{value:"hidden",label:n.toolbox.types.hidden},{value:"label",label:n.toolbox.types.label}],[n]),y=!!e.templateId;y?p.find(g=>g.id===e.templateId):void 0;let d=t.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,u=g=>{if(!y){o(r,e.code,g,s);return}let S={},R=false;for(let[U,C]of Object.entries(g))if(ct.has(U)){let Y=ke(U);a(r,e.code,Y,C,s);}else S[U]=C,R=true;R&&o(r,e.code,S,s);},b=g=>{if(!y)return false;let S=ke(g);return Object.prototype.hasOwnProperty.call(e.templateOverrides??{},S)},f=g=>{y&&l(r,e.code,ke(g),s);},m=g=>resolveLabel(g,d,d),x=t.pages.flatMap(g=>[...getPageVariables(g).map(S=>({code:S.code,name:m(S.name)})),...getPageRosters(g).flatMap(S=>S.variables.map(R=>({code:R.code,name:m(R.name)})))]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[y&&jsx(ut,{variable:e,templateCodeLabel:n.properties.templateCode,templateNameLabel:n.properties.templateName,bannerTitle:n.properties.linkedTemplate,defaultLang:d}),y?jsx(ft,{label:n.properties.templateName,value:e.name,defaultLang:d,testId:"variable-name-readonly"}):jsx(_,{label:n.properties.name,value:e.name,onChange:g=>u({name:g}),testIdPrefix:"variable-name"}),jsx($,{label:y?n.properties.templateCode:n.properties.code,value:e.code,onChange:()=>{},readOnly:true}),jsx(H,{isOverridden:b("description"),onReset:()=>f("description"),resetLabel:n.properties.resetOverride,children:jsx(_,{label:n.properties.description,value:e.description,onChange:g=>u({description:g}),testIdPrefix:"variable-description"})}),jsx(H,{isOverridden:b("placeholder"),onReset:()=>f("placeholder"),resetLabel:n.properties.resetOverride,children:jsx(_,{label:n.properties.placeholder,value:e.placeholder,onChange:g=>u({placeholder:g}),testIdPrefix:"variable-placeholder"})}),jsx(H,{isOverridden:b("type"),onReset:()=>f("type"),resetLabel:n.properties.resetOverride,children:jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:n.properties.type}),jsx("select",{value:e.type,onChange:g=>u({type:g.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:c.map(g=>jsx("option",{value:g.value,children:g.label},g.value))})]})}),e.type==="rating"&&jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:n.properties.ratingStyle}),jsxs("select",{value:e.metadata?.ratingStyle??"star",onChange:g=>u({metadata:{...e.metadata,ratingStyle:g.target.value}}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"star",children:n.properties.ratingStyles.star}),jsx("option",{value:"number",children:n.properties.ratingStyles.number}),jsx("option",{value:"color",children:n.properties.ratingStyles.color})]})]}),jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"6px"},children:[jsx("div",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase"},children:n.properties.layout}),jsx(fe,{label:n.properties.startNewRow,checked:e.startWithNewLine!==false,onChange:g=>u({startWithNewLine:g?void 0:false})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"2px"},children:n.properties.columnSpan}),jsxs("select",{value:e.colSpan??"auto",onChange:g=>u({colSpan:g.target.value==="auto"?void 0:parseInt(g.target.value)}),style:{width:"100%",padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"auto",children:n.properties.columnSpanAuto}),[1,2,3,4,5,6,7,8,9,10,11,12].map(g=>jsxs("option",{value:g,children:[g,"/12",g===6?n.properties.columnSpanHalf:g===4?n.properties.columnSpanThird:g===12?n.properties.columnSpanFull:""]},g))]})]})]}),jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsx(H,{isOverridden:b("isRequired"),onReset:()=>f("isRequired"),resetLabel:n.properties.resetOverride,inline:true,children:jsx(fe,{label:n.properties.required,checked:e.isRequired,onChange:g=>u({isRequired:g})})}),jsx(H,{isOverridden:b("isReadonly"),onReset:()=>f("isReadonly"),resetLabel:n.properties.resetOverride,inline:true,children:jsx(fe,{label:n.properties.readonly,checked:e.isReadonly,onChange:g=>u({isReadonly:g})})}),jsx(H,{isOverridden:b("isHidden"),onReset:()=>f("isHidden"),resetLabel:n.properties.resetOverride,inline:true,children:jsx(fe,{label:n.properties.hidden,checked:e.isHidden,onChange:g=>u({isHidden:g})})})]}),e.type==="calculated"&&jsx(H,{isOverridden:b("expression"),onReset:()=>f("expression"),resetLabel:n.properties.resetOverride,children:jsx($,{label:n.properties.expression,value:e.expression??"",onChange:g=>u({expression:g||void 0}),multiline:true})}),["select","multiselect","radio"].includes(e.type)&&jsx(Te,{dataSourceId:e.dataSourceId,dependencies:e.dataSourceDependencies,availableConnectors:i,availableVariables:x,onConnectorChange:g=>u({dataSourceId:g}),onDependenciesChange:g=>u({dataSourceDependencies:Object.keys(g).length>0?g:void 0})}),["select","multiselect","radio","checkbox"].includes(e.type)&&!e.dataSourceId&&jsx(H,{isOverridden:b("options"),onReset:()=>f("options"),resetLabel:n.properties.resetOverride,children:jsx(eo,{options:e.options??[],onChange:g=>u({options:g})})}),jsx(H,{isOverridden:b("conditions"),onReset:()=>f("conditions"),resetLabel:n.properties.resetOverride,children:jsx(Ie,{conditions:e.conditions??[],onChange:g=>u({conditions:g}),availableVariables:x,rosterContext:(()=>{if(!s)return;let g=t.pages.find(R=>R.code===r),S=g?getPageRosters(g).find(R=>R.code===s):void 0;if(S)return {variables:S.variables.map(R=>({code:R.code,order:R.order})),currentVariableCode:e.code,currentVariableOrder:e.order}})()})})]})}function ut({variable:e,templateCodeLabel:r,templateNameLabel:s,bannerTitle:i,defaultLang:t}){return jsxs("div",{"data-testid":"variable-linked-banner",style:{padding:"10px 12px",backgroundColor:"#eff6ff",border:"1px solid #bfdbfe",borderRadius:"6px",fontSize:"12px",color:"#1e40af",display:"flex",flexDirection:"column",gap:"4px"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px",fontWeight:600},children:[jsx("span",{children:"\u{1F517}"}),jsx("span",{children:i})]}),jsxs("div",{style:{fontSize:"11px",color:"#1e3a8a"},children:[r," : ",jsx("span",{style:{fontFamily:"monospace"},children:e.code})]}),jsxs("div",{style:{fontSize:"11px",color:"#1e3a8a"},children:[s," : ",resolveLabel(e.name,t,t)]})]})}function ft({label:e,value:r,defaultLang:s,testId:i}){return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),jsx("div",{"data-testid":i,style:{padding:"6px 8px",backgroundColor:"#f1f5f9",color:"#64748b",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",cursor:"not-allowed",userSelect:"text"},children:resolveLabel(r,s,s)})]})}function H({isOverridden:e,onReset:r,resetLabel:s,children:i,inline:t=false}){if(!e)return jsx(Fragment,{children:i});let o=jsxs("button",{type:"button","data-testid":"reset-override",onClick:r,style:{padding:"2px 8px",border:"1px solid #fde68a",borderRadius:"4px",backgroundColor:"#fffbeb",color:"#92400e",fontSize:"10px",cursor:"pointer",fontWeight:500},children:["\u21BA ",s]});return t?jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("div",{style:{flex:1},children:i}),o]}):jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[i,jsx("div",{style:{display:"flex",justifyContent:"flex-end"},children:o})]})}function fe({label:e,checked:r,onChange:s}){return jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsx("input",{type:"checkbox",checked:r,onChange:i=>s(i.target.checked)}),e]})}function ao({roster:e,pageCode:r}){let{updateRoster:s}=T(),i=I(),t=useMemo(()=>[{value:"check",label:i.properties.rosterTypes.check},{value:"list",label:i.properties.rosterTypes.list},{value:"collection",label:i.properties.rosterTypes.collection},{value:"collection_extend",label:i.properties.rosterTypes.collection_extend}],[i]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(_,{label:i.properties.name,value:e.name,onChange:o=>s(r,e.code,{name:o}),testIdPrefix:"roster-name"}),jsx($,{label:i.properties.code,value:e.code,onChange:()=>{}}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:i.properties.rosterType}),jsx("select",{value:e.rosterType,onChange:o=>s(r,e.code,{rosterType:o.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:t.map(o=>jsx("option",{value:o.value,children:o.label},o.value))})]}),jsx($,{label:i.properties.pilotVariableCode,value:e.pilotVariableCode??"",onChange:o=>s(r,e.code,{pilotVariableCode:o||void 0})}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:i.properties.rosterSummary(e.variables.length,e.options?.length??0)})]})}function we({availableConnectors:e=[]}){let{selection:r,form:s}=T(),i=I(),t=(()=>{switch(r.type){case "form":return jsx(re,{});case "page":{let o=s.pages.find(a=>a.code===r.pageCode);return o?jsx(He,{page:o}):jsx(re,{})}case "roster":{let o=s.pages.find(l=>l.code===r.pageCode),a=o?getPageRosters(o).find(l=>l.code===r.rosterCode):void 0;return !o||!a?jsx(re,{}):jsx(ao,{roster:a,pageCode:o.code})}case "variable":{let o=s.pages.find(n=>n.code===r.pageCode);if(!o)return jsx(re,{});let a=r.rosterCode?getPageRosters(o).find(n=>n.code===r.rosterCode):void 0,p=(a?a.variables:getPageVariables(o)).find(n=>n.code===r.variableCode);return p?jsx(to,{variable:p,pageCode:o.code,rosterCode:r.rosterCode,availableConnectors:e}):jsx(re,{})}}})();return jsxs("div",{style:{width:"300px",borderLeft:"1px solid #e2e8f0",backgroundColor:"#fff",overflowY:"auto"},children:[jsx("div",{style:{padding:"12px 16px",borderBottom:"1px solid #e2e8f0",fontSize:"12px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:i.properties.title}),jsx("div",{style:{padding:"16px"},children:t})]})}function ht({theme:e,dataSources:r,adapter:s,initialForm:i,formId:t,onChange:o,onSave:a,labels:l,PreviewComponent:p,ToolboxComponent:n,CanvasComponent:c,Wrapper:y}){let{form:v,view:d,setForm:u,setAdapter:b,load:f,setAvailableTemplates:m}=T(),x=useMemo(()=>ce(j,l),[l]);useEffect(()=>{s&&b(s);},[s,b]),useEffect(()=>{i?u(i):t&&s?.loadForm&&f(t);},[i,t]),useEffect(()=>{let se=v.scopeId;if(!se||!s?.loadTemplates){m([]);return}let ae=false;return s.loadTemplates(se).then(oe=>{ae||m(oe);}).catch(()=>{ae||m([]);}),()=>{ae=true;}},[v.scopeId,s,m]);let g=useRef(o),S=useRef(true);g.current=o,useEffect(()=>{if(S.current){S.current=false;return}g.current?.(v);},[v]);let R=n??ye,U=c??he,C=y??xt.Fragment,Y=jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsx(ge,{onSave:a}),jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[d==="canvas"&&jsxs(Fragment,{children:[jsx(R,{}),jsx(U,{}),jsx(we,{availableConnectors:r?Object.values(r):[]})]}),d==="preview"&&p&&jsx("div",{style:{flex:1,overflow:"auto"},children:jsx(p,{formSchema:v,theme:e,dataSources:r,mode:"fill"})}),d==="preview"&&!p&&jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:x.formEditor.previewMissing}),d==="json"&&jsx("div",{style:{flex:1,overflow:"auto",padding:"16px"},children: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(v,null,2)})})]})]});return jsx(pe,{labels:x,children:jsx(C,{children:Y})})}export{he as Canvas,Ie as ConditionBuilder,Te as DataSourceSelector,pe as EditorLabelsProvider,ge as EditorToolbar,ht as FormEditor,we as PropertiesPanel,ye as Toolbox,j as defaultLabels,Ee as enLabels,j as frLabels,ce as mergeLabels,T as useEditorStore,I as useLabels};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map