@msbci/form-editor 1.3.1 → 1.3.2

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 Qt,{createContext,useContext,useState,useMemo,useEffect,useRef}from'react';import {create}from'zustand';import {deserializeForm,serializeForm,generateId,deepClone,migrateFormToItems,DEFAULT_LANG_CONFIG,resolveLabel,getPageVariables,isPageRoster,RosterConditionEngine,getPageRosters,isPageVariable}from'@msbci/form-core';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useDraggable,useDroppable,useSensors,useSensor,PointerSensor,KeyboardSensor,DndContext,closestCenter,DragOverlay}from'@dnd-kit/core';import {SortableContext,verticalListSortingStrategy,useSortable,arrayMove,sortableKeyboardCoordinates}from'@dnd-kit/sortable';import {CSS}from'@dnd-kit/utilities';function Be(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 We(e,r,s){return r==="variableType"?{...e,type:s}:{...e,[r]:s}}function Eo(e,r){return r==="variableType"?e.variableType:e[r]}var Ao=50;function $o(){return {id:"",code:"",name:"New Form",version:"1.0.0",isPublished:false,pages:[]}}function F(e,r){let s=Array.isArray(e.items)?e.items:[...getPageVariables(e),...getPageRosters(e)],{variables:a,rosters:t,...o}=e;return {...o,items:r(s)}}var C=create((e,r)=>{function s(t){let o=r(),n={form:deepClone(o.form),description:t,timestamp:Date.now()},d=o.history.slice(0,o.historyIndex+1);d.push(n),d.length>Ao&&d.shift(),e({history:d,historyIndex:d.length-1});}function a(t,o){s(t);let n=r(),d=o(deepClone(n.form));e({form:d,isDirty:true});}return {form:$o(),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=>{a("Update form metadata",o=>({...o,...t}));},addPage:t=>{let o=Array.isArray(t.items)?t:{...t,items:[...t.variables??[],...t.rosters??[]]};a(`Add page "${o.name}"`,n=>({...n,pages:[...n.pages,o]}));},updatePage:(t,o)=>{a(`Update page "${t}"`,n=>({...n,pages:n.pages.map(d=>d.code===t?{...d,...o}:d)}));},removePage:t=>{a(`Remove page "${t}"`,n=>({...n,pages:n.pages.filter(d=>d.code!==t)}));let o=r();o.selection.type==="page"&&o.selection.pageCode===t&&e({selection:{type:"form"}});},reorderPages:t=>{a("Reorder pages",o=>{let n=new Map(o.pages.map(i=>[i.code,i])),d=t.map((i,l)=>{let c=n.get(i);return c?{...c,order:l}:void 0}).filter(i=>i!==void 0);return {...o,pages:d}});},addRoster:(t,o)=>{a(`Add roster "${o.name}" to page "${t}"`,n=>({...n,pages:n.pages.map(d=>d.code!==t?d:F(d,i=>[...i,{...o,itemType:"roster",order:i.length}]))}));},updateRoster:(t,o,n)=>{a(`Update roster "${o}"`,d=>({...d,pages:d.pages.map(i=>i.code!==t?i:F(i,l=>l.map(c=>isPageRoster(c)&&c.code===o?{...c,...n,itemType:"roster"}:c)))}));},removeRoster:(t,o)=>{a(`Remove roster "${o}"`,n=>({...n,pages:n.pages.map(d=>d.code!==t?d:F(d,i=>i.filter(l=>!(isPageRoster(l)&&l.code===o))))}));},addVariable:(t,o,n)=>{a(`Add variable "${o.name}"`,d=>({...d,pages:d.pages.map(i=>i.code!==t?i:n?F(i,l=>l.map(c=>isPageRoster(c)&&c.code===n?{...c,variables:[...c.variables,o]}:c)):F(i,l=>[...l,{...o,itemType:"variable",order:l.length}]))}));},updateVariable:(t,o,n,d)=>{a(`Update variable "${o}"`,i=>({...i,pages:i.pages.map(l=>l.code!==t?l:d?F(l,c=>c.map(m=>isPageRoster(m)&&m.code===d?{...m,variables:m.variables.map(v=>v.code===o?{...v,...n}:v)}:m)):F(l,c=>c.map(m=>isPageVariable(m)&&m.code===o?{...m,...n,itemType:"variable"}:m)))}));},removeVariable:(t,o,n)=>{a(`Remove variable "${o}"`,d=>({...d,pages:d.pages.map(i=>i.code!==t?i:n?F(i,l=>l.map(c=>isPageRoster(c)&&c.code===n?{...c,variables:c.variables.filter(m=>m.code!==o)}:c)):F(i,l=>l.filter(c=>!(isPageVariable(c)&&c.code===o))))}));},addVariableFromTemplate:(t,o,n)=>{a(`Add variable from template "${o.code}"`,d=>({...d,pages:d.pages.map(i=>i.code!==t?i:n?F(i,l=>l.map(c=>{if(!(isPageRoster(c)&&c.code===n))return c;let m=Be(o,c.variables.length);return {...c,variables:[...c.variables,m]}})):F(i,l=>[...l,Be(o,l.length)]))}));},setVariableOverride:(t,o,n,d,i)=>{a(`Override "${String(n)}" on "${o}"`,l=>({...l,pages:l.pages.map(c=>{if(c.code!==t)return c;let m=v=>{let p={...v.templateOverrides??{},[n]:d};return {...We(v,n,d),templateOverrides:p}};return i?F(c,v=>v.map(p=>isPageRoster(p)&&p.code===i?{...p,variables:p.variables.map(u=>u.code===o?m(u):u)}:p)):F(c,v=>v.map(p=>isPageVariable(p)&&p.code===o?m(p):p))})}));},resetVariableOverride:(t,o,n,d)=>{let i=r().availableTemplates;a(`Reset override "${String(n)}" on "${o}"`,l=>({...l,pages:l.pages.map(c=>{if(c.code!==t)return c;let m=v=>{let p={...v.templateOverrides??{}};delete p[n];let u=v.templateId?i.find(g=>g.id===v.templateId):void 0,f=u?Eo(u,n):void 0;return {...We(v,n,f),templateOverrides:p}};return d?F(c,v=>v.map(p=>isPageRoster(p)&&p.code===d?{...p,variables:p.variables.map(u=>u.code===o?m(u):u)}:p)):F(c,v=>v.map(p=>isPageVariable(p)&&p.code===o?m(p):p))})}));},moveVariable:(t,o,n,d,i,l)=>{a(`Move variable "${n}"`,c=>{let m,v=c.pages.map(u=>u.code!==t?u:i?F(u,f=>f.map(b=>{if(!(isPageRoster(b)&&b.code===i))return b;let g=b.variables.find(x=>x.code===n);return g&&(m={...g}),{...b,variables:b.variables.filter(x=>x.code!==n)}})):F(u,f=>f.filter(b=>isPageVariable(b)&&b.code===n?(m={...b},false):true)));if(!m)return c;m={...m,order:d,itemType:"variable"};let p=v.map(u=>u.code!==o?u:l?F(u,f=>f.map(b=>isPageRoster(b)&&b.code===l?{...b,variables:[...b.variables,m].sort((g,x)=>g.order-x.order)}:b)):F(u,f=>[...f,m].sort((b,g)=>b.order-g.order)));return {...c,pages:p}});},moveItem:(t,o,n)=>{a(`Reorder page items in "${t}"`,d=>({...d,pages:d.pages.map(i=>i.code!==t?i:F(i,l=>{if(o<0||o>=l.length||n<0||n>=l.length||o===n)return l;let c=l.slice(),[m]=c.splice(o,1);return c.splice(n,0,m),c.map((v,p)=>({...v,order:p}))}))}));},select:t=>e({selection:t}),clearSelection:()=>e({selection:{type:"form"}}),setView:t=>e({view:t}),undo:()=>{let{history:t,historyIndex:o,form:n}=r();if(!(o<0))if(o===t.length-1){let d={form:deepClone(n),description:"Current state",timestamp:Date.now()};e({form:deepClone(t[o].form),historyIndex:o-1,isDirty:true,history:[...t,d]});}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 n=o+2;n<t.length&&e({form:deepClone(t[n].form),historyIndex:n-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(n=>({formTypes:[...n.formTypes,o]}));},updateFormType:(t,o)=>{e(n=>({formTypes:n.formTypes.map(d=>d.id===t?{...d,...o}:d)}));},removeFormType:t=>{let o=r();if(o.form.formTypeId===t){let{formTypeId:n,...d}=o.form;e({form:{...d}});}e(n=>({formTypes:n.formTypes.filter(d=>d.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 n=await o.loadForm(t);r().setForm(n);},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 qe={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 Ue=createContext(J);function fe({labels:e,children:r}){return jsx(Ue.Provider,{value:e,children:r})}function R(){return useContext(Ue)}function ue(e){if(e===null||typeof e!="object")return false;let r=Object.getPrototypeOf(e);return r===Object.prototype||r===null}function be(e,r){return r?Ge(e,r):e}function Ge(e,r){if(!ue(e)||!ue(r))return r===void 0?e:r;let s={...e};for(let a of Object.keys(r)){let t=e[a],o=r[a];ue(t)&&ue(o)?s[a]=Ge(t,o):o!==void 0&&(s[a]=o);}return s}function He({open:e,onClose:r}){let{formTypes:s,form:a,addFormType:t,updateFormType:o,removeFormType:n}=C(),d=R(),[i,l]=useState(""),[c,m]=useState(""),[v,p]=useState(null),[u,f]=useState(""),[b,g]=useState(null);if(!e)return null;let x=()=>{i.trim()&&(t({name:i.trim(),code:c.trim()||i.trim().toUpperCase().replace(/\s+/g,"_")}),l(""),m(""));},y=(S,Q)=>{p(S),f(Q);},T=()=>{v&&u.trim()&&o(v,{name:u.trim()}),p(null),f("");},I=S=>{a.formTypeId===S?g(S):n(S);},H=()=>{b&&n(b),g(null);};return jsx("div",{role:"dialog","aria-modal":"true","aria-label":d.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:S=>S.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:d.formTypesDialog.title}),jsx("button",{type:"button",onClick:r,"aria-label":d.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:d.formTypesDialog.noTypes}),jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"6px"},children:s.map(S=>{let Q=v===S.id,Ce=a.formTypeId===S.id,ce=b===S.id;return jsxs("li",{"data-testid":`form-type-row-${S.id}`,style:{display:"flex",alignItems:"center",gap:"8px",padding:"8px",border:"1px solid #e2e8f0",borderRadius:"6px",backgroundColor:Ce?"#f1f5f9":"#fff"},children:[Q?jsx("input",{type:"text",value:u,autoFocus:true,"data-testid":`form-type-name-edit-${S.id}`,onChange:Y=>f(Y.target.value),onBlur:T,onKeyDown:Y=>{Y.key==="Enter"&&T(),Y.key==="Escape"&&(p(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-${S.id}`,onClick:()=>y(S.id,S.name),style:{flex:1,fontSize:"13px",cursor:"pointer",padding:"4px 8px"},children:S.name}),jsx("span",{style:{fontSize:"11px",color:"#94a3b8",fontFamily:"monospace"},children:S.code}),jsx("button",{type:"button","aria-label":d.formTypesDialog.removeTypeAria(S.name),"data-testid":`form-type-remove-${S.id}`,onClick:()=>I(S.id),style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:"pointer",fontSize:"14px",lineHeight:1},children:"\xD7"}),ce&&jsxs("div",{"data-testid":`form-type-confirm-${S.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:d.formTypesDialog.confirmDelete}),jsx("button",{type:"button","data-testid":`form-type-confirm-yes-${S.id}`,onClick:H,style:{padding:"4px 8px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:d.formTypesDialog.deleteConfirm}),jsx("button",{type:"button","data-testid":`form-type-confirm-no-${S.id}`,onClick:()=>g(null),style:{padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:d.formTypesDialog.deleteCancel})]})]},S.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:i,"data-testid":"form-types-new-name",placeholder:d.formTypesDialog.newTypeNamePlaceholder,onChange:S=>l(S.target.value),onKeyDown:S=>{S.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:d.formTypesDialog.newTypeCodePlaceholder,onChange:S=>m(S.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:i.trim()==="",style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:i.trim()===""?"#cbd5e1":"#2563eb",color:"#fff",fontSize:"13px",cursor:i.trim()===""?"not-allowed":"pointer"},children:d.formTypesDialog.addButton})]})]})})}function Se({onSave:e,onExport:r,onImport:s}){let{form:a,updateFormMeta:t,view:o,setView:n,isDirty:d,isSaving:i,canUndo:l,canRedo:c,undo:m,redo:v,save:p,addPage:u}=C(),f=R(),[b,g]=useState(false),x=async()=>{await p(),e?.();},y=()=>{let I=a.pages.length;u({id:`page-${Date.now()}`,code:`PAGE_${I+1}`,name:`Page ${I+1}`,order:I,isRepeatable:false,items:[]});},T=[{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:I=>{let H=a.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,S;typeof a.name=="string"?S=I.target.value:S={...a.name??{},[H]:I.target.value},t({name:S});},style:{border:"none",fontSize:"16px",fontWeight:600,color:"#1e293b",padding:"4px 8px",borderRadius:"4px",outline:"none",minWidth:"200px",backgroundColor:"transparent"},placeholder:f.toolbar.formNamePlaceholder}),d&&jsx("span",{style:{fontSize:"11px",color:"#f59e0b",fontWeight:500},children:f.toolbar.unsaved}),jsx("div",{style:{flex:1}}),jsx(oe,{onClick:y,label:f.toolbar.addPage}),jsx(oe,{onClick:()=>g(true),label:f.toolbar.types,title:f.toolbar.manageFormTypesTitle}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(oe,{onClick:m,label:"\u21A9",disabled:!l(),title:f.toolbar.undo}),jsx(oe,{onClick:v,label:"\u21AA",disabled:!c(),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:T.map(I=>jsx("button",{type:"button",onClick:()=>n(I.view),style:{padding:"4px 12px",fontSize:"12px",fontWeight:500,border:"none",cursor:"pointer",backgroundColor:o===I.view?"#2563eb":"#fff",color:o===I.view?"#fff":"#64748b"},children:I.label},I.view))}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(oe,{onClick:x,label:i?f.toolbar.saving:f.toolbar.save,primary:true,disabled:i||!d}),r&&jsx(oe,{onClick:r,label:f.toolbar.export}),s&&jsx(oe,{onClick:s,label:f.toolbar.import}),jsx(He,{open:b,onClose:()=>g(false)})]})}function oe({onClick:e,label:r,primary:s,disabled:a,title:t}){return jsx("button",{type:"button",onClick:e,disabled:a,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:a?"default":"pointer",opacity:a?.5:1},children:r})}function ge(){let e=R(),[r,s]=useState("fields"),[a,t]=useState(""),{form:o,availableTemplates:n}=C(),d=o.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,l=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:"#"}]},{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.groupAdvanced,items:[{kind:"variable",type:"file",label:e.toolbox.types.file,icon:"\u{1F4CE}"},{kind:"variable",type:"gps",label:e.toolbox.types.gps,icon:"\u{1F4CD}"},{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]).map(c=>({...c,items:c.items.filter(m=>m.label.toLowerCase().includes(a.toLowerCase()))})).filter(c=>c.items.length>0);return jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx(Ho,{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:a,onChange:c=>t(c.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:[r==="fields"&&l.map(c=>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:c.label}),c.items.map(m=>jsx(jo,{entry:m},`${m.kind}-${m.kind==="roster"?m.rosterType:m.type}`))]},c.label)),r==="variables"&&jsx(Ko,{templates:n,scopeId:o.scopeId,search:a,defaultLang:d,labels:e})]})]})}function Ho({tab:e,setTab:r,labels:s}){let a={flex:1,padding:"8px 0",fontSize:"12px",fontWeight:500,textAlign:"center",cursor:"pointer",userSelect:"none",color:"#64748b",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:"transparent"},t={...a,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:a,children:s.toolbox.tabFields}),jsx("div",{role:"tab","aria-selected":e==="variables","data-testid":"toolbox-tab-variables",onClick:()=>r("variables"),style:e==="variables"?t:a,children:s.toolbox.tabVariables})]})}function jo({entry:e}){let r=e.kind==="roster"?`toolbox-roster-${e.rosterType}`:`toolbox-variable-${e.type}`,s=e.kind==="roster"?{type:"new-roster",rosterType:e.rosterType}:{type:"new-variable",variableType:e.type},{attributes:a,listeners:t,setNodeRef:o,isDragging:n}=useDraggable({id:r,data:s});return jsxs("div",{ref:o,"data-testid":r,...t,...a,style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"grab",fontSize:"13px",color:"#334155",backgroundColor:n?"#e2e8f0":"transparent",userSelect:"none"},children:[jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:e.icon}),jsx("span",{children:e.label})]})}function Ko({templates:e,scopeId:r,search:s,defaultLang:a,labels:t}){let o=i=>jsx("div",{"data-testid":"toolbox-variables-empty",style:{padding:"14px",color:"#94a3b8",fontSize:"12px",textAlign:"center",fontStyle:"italic"},children:i});if(!r)return o(t.toolbox.noScope);if(e.length===0)return o(t.toolbox.noTemplates);let n=s.toLowerCase(),d=e.filter(i=>{if(!n)return true;let l=i.code.toLowerCase().includes(n),c=Ye(i.name,a).toLowerCase().includes(n);return l||c}).slice().sort((i,l)=>i.code.localeCompare(l.code));return d.length===0?o(t.toolbox.noTemplates):jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:d.map(i=>jsx(Yo,{template:i,defaultLang:a},i.id))})}function Yo({template:e,defaultLang:r}){let s=`toolbox-template-${e.code}`,{attributes:a,listeners:t,setNodeRef:o,isDragging:n}=useDraggable({id:s,data:{type:"new-variable-from-template",template:e}});return jsxs("div",{ref:o,"data-testid":s,...t,...a,style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",borderRadius:"6px",cursor:"grab",fontSize:"13px",color:"#334155",backgroundColor:n?"#e2e8f0":"transparent",userSelect:"none"},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:e.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:e.code}),jsx("span",{style:{fontSize:"12px",color:"#1e293b",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Ye(e.name,r)})]})]})}function Ye(e,r){return resolveLabel(e,r,r)}function Ie(){let r=C(s=>s.form).langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang;return s=>resolveLabel(s,r,r)}function me(){let{form:e}=C(),r=R();if(e.pages.length===0)return jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:r.canvas.emptyStateNoPageDnd});let s=e.pages.slice().sort((t,o)=>t.order-o.order),a=s.map(t=>`page-${t.code}`);return jsx("div",{style:{flex:1,overflowY:"auto",padding:"16px",backgroundColor:"#fff"},children:jsx(SortableContext,{items:a,strategy:verticalListSortingStrategy,children:s.map(t=>jsx(et,{page:t},t.code))})})}function et({page:e}){let{selection:r,select:s}=C(),a=R(),t=Ie(),o=r.type==="page"&&r.pageCode===e.code,{attributes:n,listeners:d,setNodeRef:i,transform:l,transition:c,isDragging:m,isOver:v}=useSortable({id:`page-${e.code}`,data:{type:"page",pageCode:e.code}}),p=(e.items??[...getPageVariables(e),...e.rosters??[]]).slice().sort((f,b)=>f.order-b.order),u=p.filter(f=>!isPageRoster(f)).length;return jsxs("div",{ref:i,style:{marginBottom:"16px",border:`2px solid ${o?"#2563eb":v?"#93c5fd":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden",transform:CSS.Transform.toString(l),transition:c,opacity:m?.6:1},children:[jsxs("div",{onClick:()=>s({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:o?"#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",{...n,...d,"data-testid":`canvas-page-drag-handle-${e.code}`,"aria-label":`Reorder page ${e.code}`,title:"Drag to reorder",onClick:f=>f.stopPropagation(),style:{color:"#94a3b8",fontSize:"14px",cursor:"grab",padding:"2px 6px",borderRadius:"4px",userSelect:"none",touchAction:"none"},children:"\u283F"}),jsx("span",{style:{fontSize:"14px",fontWeight:600,color:"#1e293b"},children:t(e.name)||a.canvas.unnamedPage}),e.isRepeatable&&jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:a.canvas.repeatable})]}),jsx("span",{style:{fontSize:"12px",color:"#94a3b8"},children:a.canvas.fieldsCount(u)})]}),jsx(SortableContext,{items:p.map(f=>f.code),strategy:verticalListSortingStrategy,children:jsx("div",{style:{padding:"4px 0"},children:p.map(f=>isPageRoster(f)?jsx(ot,{roster:f,pageCode:e.code},f.code):jsx(Qe,{variable:f,pageCode:e.code},f.code))})})]})}function Qe({variable:e,pageCode:r,rosterCode:s}){let{selection:a,select:t}=C(),o=R(),n=Ie(),d=a.type==="variable"&&a.pageCode===r&&a.variableCode===e.code,{attributes:i,listeners:l,setNodeRef:c,transform:m,transition:v,isDragging:p}=useSortable({id:e.code,data:{type:"variable",pageCode:r,variableCode:e.code,rosterCode:s}});return jsxs("div",{ref:c,...i,...l,onClick:u=>{u.stopPropagation(),t({type:"variable",pageCode:r,variableCode:e.code,rosterCode:s});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",margin:"1px 0",cursor:"pointer",backgroundColor:d?"#eff6ff":p?"#f1f5f9":"transparent",borderLeft:d?"3px solid #2563eb":"3px solid transparent",transform:CSS.Transform.toString(m),transition:v,opacity:p?.5:1,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:n(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"})]})}function ot({roster:e,pageCode:r}){let{selection:s,select:a,addVariable:t}=C(),o=R(),n=Ie(),d=s.type==="roster"&&s.pageCode===r&&s.rosterCode===e.code,{attributes:i,listeners:l,setNodeRef:c,transform:m,transition:v,isDragging:p}=useSortable({id:e.code,data:{type:"roster",pageCode:r,rosterCode:e.code}}),{setNodeRef:u,isOver:f}=useDroppable({id:`roster-drop-${e.code}`,data:{type:"roster-drop",pageCode:r,rosterCode:e.code}}),b=g=>{g.stopPropagation();let x=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(r,{id:`var-${Date.now()}`,code:x,name:o.canvas.newFieldName,type:"text",order:e.variables.length,isRequired:false,isReadonly:false,isHidden:false},e.code);};return jsxs("div",{ref:c,style:{margin:"4px 8px",border:`1px solid ${d?"#2563eb":f?"#f59e0b":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden",backgroundColor:f?"#fefce8":void 0,transform:CSS.Transform.toString(m),transition:v,opacity:p?.5:1},children:[jsxs("div",{...i,...l,onClick:g=>{g.stopPropagation(),a({type:"roster",pageCode:r,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:d?"#fef3c7":"#fffbeb",fontSize:"12px",fontWeight:600,color:"#92400e",cursor:"grab",display:"flex",alignItems:"center",gap:"6px"},children:[jsx("span",{style:{fontSize:"10px"},children:"\u25A4"}),n(e.name)||e.code," (",e.rosterType,")"]}),jsxs("div",{ref:u,children:[e.variables.slice().sort((g,x)=>g.order-x.order).map(g=>jsx(Qe,{variable:g,pageCode:r,rosterCode:e.code},g.code)),jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsx("button",{type:"button",onClick:b,"data-testid":`canvas-add-field-to-roster-${e.code}`,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:o.canvas.addFieldToRoster})})]})]})}function bt(e,r){let s=e.pages.find(a=>a.code===r);return s?Array.isArray(s.items)?s.items.slice().sort((a,t)=>a.order-t.order):[...getPageVariables(s),...getPageRosters(s)].sort((a,t)=>a.order-t.order):null}function oo(e){return `${e}_${Date.now().toString(36).slice(-4).toUpperCase()}`}function ro(e,r){return s=>{let{active:a,over:t}=s;if(!a||!t)return;let o=a.data.current;if(!o?.type)return;let n=r(),d=()=>{let i=t.data.current;return i?i.type==="page"&&i.pageCode?{pageCode:i.pageCode}:i.type==="variable"&&i.pageCode?{pageCode:i.pageCode,rosterCode:i.rosterCode}:i.type==="roster"&&i.pageCode?{pageCode:i.pageCode,rosterCode:i.rosterCode}:i.type==="roster-drop"&&i.pageCode?{pageCode:i.pageCode,rosterCode:i.rosterCode}:null:null};if(o.type==="new-variable"){let i=d()??{pageCode:n.pages[0]?.code??""};if(!i.pageCode)return;let l=o.variableType??"text";e.addVariable(i.pageCode,{id:`var-${Date.now()}`,code:oo(l.toUpperCase()),name:`New ${l}`,type:l,order:0,isRequired:false,isReadonly:false,isHidden:false},i.rosterCode);return}if(o.type==="new-roster"){let i=d()??{pageCode:n.pages[0]?.code??""};if(!i.pageCode)return;let l=o.rosterType??"collection";e.addRoster(i.pageCode,{id:`roster-${Date.now()}`,code:oo("ROSTER"),name:"New Roster",rosterType:l,order:0,variables:[]});return}if(o.type==="new-variable-from-template"&&o.template){let i=d()??{pageCode:n.pages[0]?.code??""};if(!i.pageCode)return;e.addVariableFromTemplate(i.pageCode,o.template,i.rosterCode);return}if(o.type==="page"){let i=t.data.current;if(i?.type!=="page"||!i.pageCode||!o.pageCode||o.pageCode===i.pageCode)return;let l=n.pages.slice().sort((p,u)=>p.order-u.order),c=l.findIndex(p=>p.code===o.pageCode),m=l.findIndex(p=>p.code===i.pageCode);if(c===-1||m===-1||c===m)return;let v=arrayMove(l,c,m).map(p=>p.code);e.reorderPages(v);return}if(o.type==="variable"||o.type==="roster"){let i=t.data.current,l=o.pageCode;if(!l||!i)return;let c=p=>p.type==="roster"||p.type==="variable"&&!p.rosterCode,m=c(o),v=c(i);if(i.pageCode===l&&i.type!=="page"&&m&&v){let p=bt(n,l);if(!p)return;let u=String(a.id),f=String(t.id);if(u===f)return;let b=p.findIndex(x=>x.code===u),g=p.findIndex(x=>x.code===f);if(b===-1||g===-1)return;e.moveItem(l,b,g);return}if(o.type==="variable"&&o.variableCode){let p=i.pageCode??l,u=i.type==="page"?void 0:i.rosterCode;if(p===l&&(o.rosterCode??void 0)===(u??void 0))return;e.moveVariable(l,p,o.variableCode,0,o.rosterCode,u);return}}}}function ke({children:e}){let r=C(),[s,a]=useState(null),t=useSensors(useSensor(PointerSensor,{activationConstraint:{distance:8}}),useSensor(KeyboardSensor,{coordinateGetter:sortableKeyboardCoordinates})),o=useMemo(()=>ro({addVariable:r.addVariable,addRoster:r.addRoster,addVariableFromTemplate:r.addVariableFromTemplate,moveItem:r.moveItem,moveVariable:r.moveVariable,reorderPages:r.reorderPages},()=>C.getState().form),[r.addVariable,r.addRoster,r.addVariableFromTemplate,r.moveItem,r.moveVariable,r.reorderPages]);return jsxs(DndContext,{sensors:t,collisionDetection:closestCenter,onDragStart:d=>{let i=d.active.data.current;i&&(i.type==="new-variable"?a(i.variableType??"variable"):i.type==="new-roster"?a(`roster:${i.rosterType??""}`):i.type==="new-variable-from-template"?a(`tpl:${i.template?.code??""}`):i.type==="variable"?a(i.variableCode??""):i.type==="roster"?a(`\u25A4 ${String(d.active.id)}`):i.type==="page"&&a(`\u{1F4C4} ${i.pageCode??""}`));},onDragEnd:d=>{a(null),o(d);},children:[e,jsx(DragOverlay,{children:s&&jsx("div",{style:{padding:"6px 12px",borderRadius:"6px",backgroundColor:"#2563eb",color:"#fff",fontSize:"13px",fontWeight:500,boxShadow:"0 4px 12px rgba(0,0,0,0.15)"},children:s})})]})}function no(e,r,s="fr"){if(e==null)return "";if(typeof e=="string")return e;let a=e[r];if(typeof a=="string"&&a!=="")return a;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 ye={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},xt={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 ao(e,r,s){if(e==null)return "";if(typeof e=="string")return r===s?e:"";let a=e[r];return typeof a=="string"?a:""}function pe({value:e,onChange:r,availableLangs:s,defaultLang:a="fr",placeholder:t,multiline:o,testIdPrefix:n,disabled:d}){let i=s.length>0?s:[a],l=i.length>1,[c,m]=useState(i[0]),v=R();i.includes(c)||m(i[0]);let p=(f,b)=>{if(!l){r(b);return}let g=typeof e=="string"?{[a]:e}:{...e??{}};g[f]=b,r(g);};if(!l){let f=i[0],b=ao(e,f,a);return o?jsx("textarea",{value:b,rows:3,placeholder:t,disabled:d,"data-testid":n?`${n}-${f}`:void 0,onChange:g=>p(f,g.target.value),style:ye}):jsx("input",{type:"text",value:b,placeholder:t,disabled:d,"data-testid":n?`${n}-${f}`:void 0,onChange:g=>p(f,g.target.value),style:ye})}let u=ao(e,c,a);return jsxs("div",{"data-testid":n,style:{display:"flex",flexDirection:"column"},children:[jsx("div",{role:"tablist","aria-label":v.properties.title,style:{display:"flex",gap:"2px"},children:i.map(f=>{let b=f===c;return jsx("button",{type:"button",role:"tab","aria-selected":b,"data-testid":n?`${n}-tab-${f}`:void 0,onClick:()=>m(f),style:{...xt,backgroundColor:b?"#fff":"#f1f5f9",color:b?"#2563eb":"#64748b",borderColor:"#e2e8f0"},children:f},f)})}),o?jsx("textarea",{value:u,rows:3,placeholder:t,disabled:d,"data-testid":n?`${n}-${c}`:void 0,onChange:f=>p(c,f.target.value),style:{...ye,borderTopLeftRadius:0}}):jsx("input",{type:"text",value:u,placeholder:t,disabled:d,"data-testid":n?`${n}-${c}`:void 0,onChange:f=>p(c,f.target.value),style:{...ye,borderTopLeftRadius:0}})]})}function N({label:e,value:r,onChange:s,placeholder:a,multiline:t,testIdPrefix:o,disabled:n}){let i=C(l=>l.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(pe,{value:r,onChange:s,availableLangs:i.availableLangs,defaultLang:i.defaultLang,placeholder:a,multiline:t,testIdPrefix:o,disabled:n})]})}var St=["fr","en"];function le(){let{form:e,formTypes:r,updateFormMeta:s}=C(),a=R(),t=e.langConfig??DEFAULT_LANG_CONFIG,o=e.pages.reduce((n,d)=>n+getPageVariables(d).length+getPageRosters(d).reduce((i,l)=>i+l.variables.length,0),0);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(N,{label:a.properties.name,value:e.name,onChange:n=>s({name:n}),testIdPrefix:"form-name"}),jsx(_,{label:a.properties.code,value:e.code,onChange:n=>s({code:n})}),jsx(N,{label:a.properties.description,value:e.description,onChange:n=>s({description:n}),multiline:true,testIdPrefix:"form-description"}),jsx(_,{label:a.properties.version,value:e.version,onChange:n=>s({version:n})}),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:n=>s({formTypeId:n.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}),r.map(n=>jsx("option",{value:n.id,children:n.name},n.id))]})]}),jsx(Rt,{langConfig:t}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8",marginTop:"8px"},children:a.properties.formSummary(e.pages.length,o)})]})}function Rt({langConfig:e}){let{form:r,updateFormMeta:s,setForm:a}=C(),t=R(),[o,n]=useState(null),d={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},i={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},l=u=>{s({langConfig:u});},c=u=>{e.availableLangs.includes(u)||l({...e,availableLangs:[...e.availableLangs,u]});},m=u=>{e.availableLangs.length<=1||u!==e.defaultLang&&n(u);},v=u=>{let f=e.availableLangs.filter(y=>y!==u),b=f.includes(e.defaultLang)?e.defaultLang:f[0]??"fr",g=Tt(r,u,b,f.length===1),x={...e,defaultLang:b,availableLangs:f};a({...g,langConfig:x}),n(null);},p=()=>n(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:d,children:t.properties.langConfigAvailable}),jsx("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap"},children:St.map(u=>{let f=e.availableLangs.includes(u),b=u===e.defaultLang,g=e.availableLangs.length<=1,x=f&&(b||g);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:f,disabled:x,onChange:y=>{y.target.checked?c(u):m(u);}}),jsx("span",{children:u.toUpperCase()}),b&&jsxs("span",{style:{fontSize:"10px",color:"#94a3b8",fontStyle:"italic"},children:["(",t.properties.langConfigDefault,")"]})]},u)})})]}),jsxs("div",{children:[jsx("label",{style:d,children:t.properties.langConfigDefault}),jsx("select",{"data-testid":"lang-default-select",value:e.defaultLang,onChange:u=>l({...e,defaultLang:u.target.value}),style:i,children:e.availableLangs.map(u=>jsx("option",{value:u,children:u.toUpperCase()},u))})]}),jsxs("div",{children:[jsx("label",{style:d,children:t.properties.langConfigStrategy}),jsxs("select",{"data-testid":"lang-strategy-select",value:e.strategy,onChange:u=>l({...e,strategy:u.target.value}),style:i,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:d,children:t.properties.langConfigSelectorPosition}),jsxs("select",{"data-testid":"lang-selector-position-select",value:e.selectorPosition??"top",onChange:u=>l({...e,selectorPosition:u.target.value}),style:i,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:p,style:{padding:"4px 10px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:t.properties.langConfigConfirmNo})]})]})]})}function Tt(e,r,s,a){let t=p=>{if(p===void 0)return;if(typeof p=="string")return p;let u={...p};return delete u[r],a?no(u,s,"fr"):u},o=p=>({...p,label:t(p.label)??""}),n=p=>({...p,message:t(p.message)??""}),d=p=>({...p,errorMessage:t(p.errorMessage)}),i=p=>({...p,name:t(p.name)??"",description:t(p.description),placeholder:t(p.placeholder),options:p.options?p.options.map(o):p.options,validationRules:p.validationRules?p.validationRules.map(n):p.validationRules,conditions:p.conditions?p.conditions.map(d):p.conditions}),l=p=>({...p,name:t(p.name)??"",options:p.options?p.options.map(o):p.options,variables:p.variables.map(i),conditions:p.conditions?p.conditions.map(d):p.conditions}),c=p=>({...p,instanceLabel:t(p.instanceLabel)}),m=p=>isPageRoster(p)?l(p):i(p),v=p=>{let u=Array.isArray(p.items)?p.items.map(m):[...getPageVariables(p).map(i),...getPageRosters(p).map(l)],{variables:f,rosters:b,...g}=p;return {...g,name:t(p.name)??"",repeatConfig:p.repeatConfig?c(p.repeatConfig):p.repeatConfig,items:u,conditions:p.conditions?p.conditions.map(d):p.conditions}};return {...e,name:t(e.name)??"",description:t(e.description),pages:e.pages.map(v)}}function _({label:e,value:r,onChange:s,multiline:a,type:t="text",readOnly:o}){let n={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}),a?jsx("textarea",{value:r,onChange:d=>s(d.target.value),rows:3,style:n,readOnly:o}):jsx("input",{type:t,value:r,onChange:d=>s(d.target.value),style:n,readOnly:o})]})}function po({page:e}){let{updatePage:r}=C(),s=R();return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(N,{label:s.properties.name,value:e.name,onChange:a=>r(e.code,{name:a}),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:a=>r(e.code,{isRepeatable:a.target.checked,repeatConfig:a.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:a=>r(e.code,{repeatConfig:{...e.repeatConfig,min:parseInt(a)||1}})}),jsx(_,{label:s.properties.maxInstances,value:String(e.repeatConfig.max??10),type:"number",onChange:a=>r(e.code,{repeatConfig:{...e.repeatConfig,max:parseInt(a)||10}})}),jsx(_,{label:s.properties.controlVariableCode,value:e.repeatConfig.controlVariableCode??"",onChange:a=>r(e.code,{repeatConfig:{...e.repeatConfig,controlVariableCode:a||void 0}})}),jsx(N,{label:s.properties.instanceLabel,value:e.repeatConfig.instanceLabel,onChange:a=>r(e.code,{repeatConfig:{...e.repeatConfig,instanceLabel:a}}),testIdPrefix:"page-instance-label"})]}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:s.properties.pageSummary(getPageVariables(e).length,getPageRosters(e).length)})]})}var Pt=["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"],Ft=["show","hide","validate","require","readonly","setValue"],Dt=["is_empty","is_not_empty"];function Fe({conditions:e,onChange:r,availableVariables:s,rosterContext:a}){let t=R(),[o,n]=useState(null),d=()=>{let c={id:generateId(),action:"show",expression:""};r([...e,c]),n(c.id);},i=c=>{r(e.filter(m=>m.id!==c)),o===c&&n(null);},l=(c,m)=>{r(e.map(v=>v.id===c?{...v,...m}: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(Vt,{condition:c,isExpanded:o===c.id,onToggle:()=>n(o===c.id?null:c.id),onUpdate:m=>l(c.id,m),onRemove:()=>i(c.id),availableVariables:s,rosterContext:a},c.id)),jsx("button",{type:"button",onClick:d,style:{padding:"6px 12px",border:"1px dashed #cbd5e1",borderRadius:"6px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:"pointer"},children:t.conditionBuilder.addCondition})]})}function Vt({condition:e,isExpanded:r,onToggle:s,onUpdate:a,onRemove:t,availableVariables:o,rosterContext:n}){let d=R(),[i,l]=useState(()=>At(e.expression)),c=(g,x)=>{l(g);let y=co(g,x);a({expression:y});},m=g=>{a({action:g});let x=co(i,g);a({action:g,expression:x});},v=()=>{let g={id:generateId(),variableCode:"",operator:"equals",value:""},x={...i,rules:[...i.rules,g]};c(x,e.action);},p=g=>{let x={...i,rules:i.rules.filter(y=>y.id!==g)};c(x,e.action);},u=(g,x)=>{let y={...i,rules:i.rules.map(T=>T.id===g?{...T,...x}:T)};c(y,e.action);},f=g=>{let x={...i,logic:g};c(x,e.action);},b=d.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:[b,i.rules.length>0?d.conditionBuilder.rulesCount(i.rules.length):""]}),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("span",{style:{color:"#94a3b8"},children:r?"\u25B2":"\u25BC"}),jsx("span",{onClick:g=>{g.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:d.conditionBuilder.action}),jsx("select",{value:e.action,onChange:g=>m(g.target.value),style:we,children:Ft.map(g=>jsx("option",{value:g,children:d.conditionBuilder.actions[g]},g))})]}),i.rules.length>1&&jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#64748b"},children:d.conditionBuilder.match}),jsx("button",{type:"button",onClick:()=>f("and"),style:{...uo,backgroundColor:i.logic==="and"?"#2563eb":"#f1f5f9",color:i.logic==="and"?"#fff":"#64748b"},children:d.conditionBuilder.all}),jsx("button",{type:"button",onClick:()=>f("or"),style:{...uo,backgroundColor:i.logic==="or"?"#2563eb":"#f1f5f9",color:i.logic==="or"?"#fff":"#64748b"},children:d.conditionBuilder.any})]}),i.rules.map(g=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxs("select",{value:g.variableCode,onChange:x=>u(g.id,{variableCode:x.target.value}),style:{...we,flex:1},children:[jsx("option",{value:"",children:d.conditionBuilder.variablePlaceholder}),o.map(x=>jsxs("option",{value:x.code,children:[x.name," (",x.code,")"]},x.code))]}),jsx("select",{value:g.operator,onChange:x=>u(g.id,{operator:x.target.value}),style:{...we,width:"130px"},children:Pt.map(x=>jsx("option",{value:x,children:d.conditionBuilder.operators[x]},x))}),!Dt.includes(g.operator)&&jsx("input",{type:"text",value:g.value,onChange:x=>u(g.id,{value:x.target.value}),placeholder:d.conditionBuilder.valuePlaceholder,style:{...Pe,flex:1}}),jsx("button",{type:"button",onClick:()=>p(g.id),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px"},children:"\xD7"})]},g.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:d.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}),n&&e.expression&&(()=>{let g=RosterConditionEngine.validateCondition(e.expression,n.variables,n.currentVariableCode,n.currentVariableOrder);return g.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:g.errors.map((x,y)=>jsxs("div",{children:[jsx("strong",{children:x.type}),x.variableCode?`: \${${x.variableCode}}`:""," \u2014 ",x.message]},y))})})(),e.action==="validate"&&jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:d.conditionBuilder.errorMessage}),jsx(zt,{value:e.errorMessage,onChange:g=>a({errorMessage:g}),placeholder:d.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:d.conditionBuilder.targetVariableCode}),jsx("input",{type:"text",value:e.targetVariableCode??"",onChange:g=>a({targetVariableCode:g.target.value||void 0}),placeholder:d.conditionBuilder.targetVariablePlaceholder,style:Pe})]}),jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:d.conditionBuilder.valueToSet}),jsx("input",{type:"text",value:e.setValue!==void 0?String(e.setValue):"",onChange:g=>a({setValue:g.target.value}),placeholder:d.conditionBuilder.valueToSetPlaceholder,style:Pe})]})]})]})]})}function zt({value:e,onChange:r,placeholder:s}){let t=C(o=>o.form).langConfig??DEFAULT_LANG_CONFIG;return jsx(pe,{value:e,onChange:o=>r(o),availableLangs:t.availableLangs,defaultLang:t.defaultLang,placeholder:s,testIdPrefix:"condition-error-message"})}function Et(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 co(e,r){if(e.rules.length===0)return "";let s=e.rules.filter(t=>t.variableCode).map(t=>{let o=`\${${t.variableCode}}`,n=Et(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 d=/^\d+(\.\d+)?$/.test(t.value)?t.value:`"${t.value}"`;return `${o} ${n} ${d}`});if(s.length===0)return "";let a=s.join(e.logic==="and"?" && ":" || ");return r==="show"?`show(${a})`:r==="hide"?`hide(${a})`:r==="validate"?`ConditionEval(${a})`:a}function At(e){return {logic:"and",rules:[]}}var we={padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none"},Pe={width:"100%",padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"},uo={padding:"2px 8px",borderRadius:"10px",border:"none",fontSize:"10px",fontWeight:600,cursor:"pointer"};function De({dataSourceId:e,dependencies:r={},availableConnectors:s,availableVariables:a,onConnectorChange:t,onDependenciesChange:o}){let n=R(),[d,i]=useState(""),l=s.find(u=>u.id===e),c=Object.entries(r),m=()=>{d.trim()&&(o({...r,[d.trim()]:""}),i(""));},v=u=>{let f={...r};delete f[u],o(f);},p=(u,f)=>{o({...r,[u]: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:n.dataSource.title}),jsxs("div",{children:[jsx("label",{style:_t,children:n.dataSource.connector}),jsxs("select",{value:e??"",onChange:u=>{let f=u.target.value||void 0;t(f),f||o({});},style:go,children:[jsx("option",{value:"",children:n.dataSource.none}),s.map(u=>jsxs("option",{value:u.id,children:[u.name," (",u.id,")"]},u.id))]})]}),l&&jsxs("div",{style:{fontSize:"11px",color:"#166534",padding:"4px 6px",backgroundColor:"#dcfce7",borderRadius:"4px"},children:[n.dataSource.connectedTo," ",jsx("strong",{children:l.name})]}),e&&jsxs(Fragment,{children:[jsx("div",{style:{fontSize:"11px",fontWeight:500,color:"#166534"},children:n.dataSource.dependencies(c.length)}),c.map(([u,f])=>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:f,onChange:b=>p(u,b.target.value),style:{...go,flex:1},children:[jsx("option",{value:"",children:n.dataSource.selectVariable}),a.map(b=>jsxs("option",{value:b.code,children:[b.name," (",b.code,")"]},b.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:d,onChange:u=>i(u.target.value),placeholder:n.dataSource.dependencyKeyPlaceholder,style:{...Nt,flex:1},onKeyDown:u=>u.key==="Enter"&&m()}),jsx("button",{type:"button",onClick:m,disabled:!d.trim(),style:{padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",backgroundColor:"#fff",color:"#2563eb",fontSize:"11px",cursor:"pointer",opacity:d.trim()?1:.5},children:n.dataSource.addDependency})]})]})]})}var _t={fontSize:"11px",fontWeight:500,color:"#166534",display:"block",marginBottom:"2px"},go={width:"100%",padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",backgroundColor:"#fff"},Nt={padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"};function Mt(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"")}function mo(e){return typeof e=="string"?e:e==null?"":String(e)}function Ve(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 a of Object.values(e))if(typeof a=="string"&&a!=="")return a;return ""}function xo({options:e,onChange:r,disabled:s}){let a=R(),o=C(f=>f.form).langConfig??DEFAULT_LANG_CONFIG,n=(f,b)=>{let g=e.map((x,y)=>y===f?{...x,...b}:x);r(g);},d=(f,b)=>{let g=e[f],x=mo(g.value),y=Ve(g.label,o.defaultLang),T=Ve(b,o.defaultLang);x===""&&y===""&&T!==""?n(f,{label:b,value:Mt(T)}):n(f,{label:b});},i=(f,b)=>{n(f,{value:b});},l=()=>{r([...e,{label:"",value:""}]);},c=f=>{r(e.filter((b,g)=>g!==f));},m={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},v={flex:1,padding:"6px 8px",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"},p="1px solid #e2e8f0",u="1px solid #ef4444";return jsxs("div",{"data-testid":"options-editor",children:[jsx("label",{style:m,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,b)=>{let g=Ve(f.label,o.defaultLang),x=mo(f.value),y=g.trim()==="",T=x.trim()==="";return jsxs("div",{"data-testid":`option-row-${b}`,style:{display:"flex",alignItems:"flex-start",gap:"6px"},children:[jsx("div",{"aria-label":a.optionsEditor.optionLabelAria(b),"data-testid":`option-label-${b}`,style:{flex:1,border:y?u:p,borderRadius:"4px"},children:jsx(pe,{value:f.label,onChange:I=>d(b,I),availableLangs:o.availableLangs,defaultLang:o.defaultLang,placeholder:a.optionsEditor.optionLabelPlaceholder,disabled:s,testIdPrefix:`option-label-input-${b}`})}),jsx("input",{type:"text","aria-label":a.optionsEditor.optionValueAria(b),"data-testid":`option-value-${b}`,value:x,placeholder:a.optionsEditor.optionValuePlaceholder,disabled:s,onChange:I=>i(b,I.target.value),style:{...v,border:T?u:p,maxWidth:"40%"}}),jsx("button",{type:"button","aria-label":a.optionsEditor.removeOptionAria(b),"data-testid":`option-remove-${b}`,onClick:()=>c(b),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"})]},b)})}),jsx("button",{type:"button","data-testid":"options-editor-add",onClick:l,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:a.optionsEditor.addOption})]})}var Ht=new Set(["type","description","placeholder","isRequired","isReadonly","isHidden","options","validationRules","conditions","expression","dataSourceId","dataSourceDependencies","style","metadata"]);function ze(e){return e==="type"?"variableType":e}function Co({variable:e,pageCode:r,rosterCode:s,availableConnectors:a=[]}){let {form:t,updateVariable:o,setVariableOverride:n,resetVariableOverride:d,availableTemplates:i}=C(),l=R(),c=useMemo(()=>[{value:"text",label:l.toolbox.types.text},{value:"textarea",label:l.toolbox.types.textarea},{value:"number",label:l.toolbox.types.number},{value:"date",label:l.toolbox.types.date},{value:"datetime",label:l.toolbox.types.datetime},{value:"time",label:l.toolbox.types.time},{value:"select",label:l.toolbox.types.select},{value:"multiselect",label:l.toolbox.types.multiselect},{value:"radio",label:l.toolbox.types.radio},{value:"checkbox",label:l.toolbox.types.checkbox},{value:"file",label:l.toolbox.types.file},{value:"gps",label:l.toolbox.types.gps},{value:"rating",label:l.toolbox.types.rating},{value:"calculated",label:l.toolbox.types.calculated},{value:"hidden",label:l.toolbox.types.hidden},{value:"label",label:l.toolbox.types.label}],[l]),m=!!e.templateId;m?i.find(y=>y.id===e.templateId):void 0;let p=t.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,u=y=>{if(!m){o(r,e.code,y,s);return}let T={},I=false;for(let[H,S]of Object.entries(y))if(Ht.has(H)){let Q=ze(H);n(r,e.code,Q,S,s);}else T[H]=S,I=true;I&&o(r,e.code,T,s);},f=y=>{if(!m)return false;let T=ze(y);return Object.prototype.hasOwnProperty.call(e.templateOverrides??{},T)},b=y=>{m&&d(r,e.code,ze(y),s);},g=y=>resolveLabel(y,p,p),x=t.pages.flatMap(y=>[...getPageVariables(y).map(T=>({code:T.code,name:g(T.name)})),...getPageRosters(y).flatMap(T=>T.variables.map(I=>({code:I.code,name:g(I.name)})))]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[m&&jsx(jt,{variable:e,templateCodeLabel:l.properties.templateCode,templateNameLabel:l.properties.templateName,bannerTitle:l.properties.linkedTemplate,defaultLang:p}),m?jsx(Kt,{label:l.properties.templateName,value:e.name,defaultLang:p,testId:"variable-name-readonly"}):jsx(N,{label:l.properties.name,value:e.name,onChange:y=>u({name:y}),testIdPrefix:"variable-name"}),jsx(_,{label:m?l.properties.templateCode:l.properties.code,value:e.code,onChange:()=>{},readOnly:true}),jsx(K,{isOverridden:f("description"),onReset:()=>b("description"),resetLabel:l.properties.resetOverride,children:jsx(N,{label:l.properties.description,value:e.description,onChange:y=>u({description:y}),testIdPrefix:"variable-description"})}),jsx(K,{isOverridden:f("placeholder"),onReset:()=>b("placeholder"),resetLabel:l.properties.resetOverride,children:jsx(N,{label:l.properties.placeholder,value:e.placeholder,onChange:y=>u({placeholder:y}),testIdPrefix:"variable-placeholder"})}),jsx(K,{isOverridden:f("type"),onReset:()=>b("type"),resetLabel:l.properties.resetOverride,children:jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:l.properties.type}),jsx("select",{value:e.type,onChange:y=>u({type:y.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:c.map(y=>jsx("option",{value:y.value,children:y.label},y.value))})]})}),e.type==="rating"&&jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:l.properties.ratingStyle}),jsxs("select",{value:e.metadata?.ratingStyle??"star",onChange:y=>u({metadata:{...e.metadata,ratingStyle:y.target.value}}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"star",children:l.properties.ratingStyles.star}),jsx("option",{value:"number",children:l.properties.ratingStyles.number}),jsx("option",{value:"color",children:l.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:l.properties.layout}),jsx(xe,{label:l.properties.startNewRow,checked:e.startWithNewLine!==false,onChange:y=>u({startWithNewLine:y?void 0:false})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"2px"},children:l.properties.columnSpan}),jsxs("select",{value:e.colSpan??"auto",onChange:y=>u({colSpan:y.target.value==="auto"?void 0:parseInt(y.target.value)}),style:{width:"100%",padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"auto",children:l.properties.columnSpanAuto}),[1,2,3,4,5,6,7,8,9,10,11,12].map(y=>jsxs("option",{value:y,children:[y,"/12",y===6?l.properties.columnSpanHalf:y===4?l.properties.columnSpanThird:y===12?l.properties.columnSpanFull:""]},y))]})]})]}),jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsx(K,{isOverridden:f("isRequired"),onReset:()=>b("isRequired"),resetLabel:l.properties.resetOverride,inline:true,children:jsx(xe,{label:l.properties.required,checked:e.isRequired,onChange:y=>u({isRequired:y})})}),jsx(K,{isOverridden:f("isReadonly"),onReset:()=>b("isReadonly"),resetLabel:l.properties.resetOverride,inline:true,children:jsx(xe,{label:l.properties.readonly,checked:e.isReadonly,onChange:y=>u({isReadonly:y})})}),jsx(K,{isOverridden:f("isHidden"),onReset:()=>b("isHidden"),resetLabel:l.properties.resetOverride,inline:true,children:jsx(xe,{label:l.properties.hidden,checked:e.isHidden,onChange:y=>u({isHidden:y})})})]}),e.type==="calculated"&&jsx(K,{isOverridden:f("expression"),onReset:()=>b("expression"),resetLabel:l.properties.resetOverride,children:jsx(_,{label:l.properties.expression,value:e.expression??"",onChange:y=>u({expression:y||void 0}),multiline:true})}),["select","multiselect","radio"].includes(e.type)&&jsx(De,{dataSourceId:e.dataSourceId,dependencies:e.dataSourceDependencies,availableConnectors:a,availableVariables:x,onConnectorChange:y=>u({dataSourceId:y}),onDependenciesChange:y=>u({dataSourceDependencies:Object.keys(y).length>0?y:void 0})}),["select","multiselect","radio","checkbox"].includes(e.type)&&!e.dataSourceId&&jsx(K,{isOverridden:f("options"),onReset:()=>b("options"),resetLabel:l.properties.resetOverride,children:jsx(xo,{options:e.options??[],onChange:y=>u({options:y})})}),jsx(K,{isOverridden:f("conditions"),onReset:()=>b("conditions"),resetLabel:l.properties.resetOverride,children:jsx(Fe,{conditions:e.conditions??[],onChange:y=>u({conditions:y}),availableVariables:x,rosterContext:(()=>{if(!s)return;let y=t.pages.find(I=>I.code===r),T=y?getPageRosters(y).find(I=>I.code===s):void 0;if(T)return {variables:T.variables.map(I=>({code:I.code,order:I.order})),currentVariableCode:e.code,currentVariableOrder:e.order}})()})})]})}function jt({variable:e,templateCodeLabel:r,templateNameLabel:s,bannerTitle:a,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:a})]}),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 Kt({label:e,value:r,defaultLang:s,testId:a}){return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),jsx("div",{"data-testid":a,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 K({isOverridden:e,onReset:r,resetLabel:s,children:a,inline:t=false}){if(!e)return jsx(Fragment,{children:a});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:a}),o]}):jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[a,jsx("div",{style:{display:"flex",justifyContent:"flex-end"},children:o})]})}function xe({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:a=>s(a.target.checked)}),e]})}function So({roster:e,pageCode:r}){let{updateRoster:s}=C(),a=R(),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(N,{label:a.properties.name,value:e.name,onChange:o=>s(r,e.code,{name:o}),testIdPrefix:"roster-name"}),jsx(_,{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: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:a.properties.pilotVariableCode,value:e.pilotVariableCode??"",onChange:o=>s(r,e.code,{pilotVariableCode:o||void 0})}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:a.properties.rosterSummary(e.variables.length,e.options?.length??0)})]})}function Ae({availableConnectors:e=[]}){let{selection:r,form:s}=C(),a=R(),t=(()=>{switch(r.type){case "form":return jsx(le,{});case "page":{let o=s.pages.find(n=>n.code===r.pageCode);return o?jsx(po,{page:o}):jsx(le,{})}case "roster":{let o=s.pages.find(d=>d.code===r.pageCode),n=o?getPageRosters(o).find(d=>d.code===r.rosterCode):void 0;return !o||!n?jsx(le,{}):jsx(So,{roster:n,pageCode:o.code})}case "variable":{let o=s.pages.find(l=>l.code===r.pageCode);if(!o)return jsx(le,{});let n=r.rosterCode?getPageRosters(o).find(l=>l.code===r.rosterCode):void 0,i=(n?n.variables:getPageVariables(o)).find(l=>l.code===r.variableCode);return i?jsx(Co,{variable:i,pageCode:o.code,rosterCode:r.rosterCode,availableConnectors:e}):jsx(le,{})}}})();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 or({theme:e,dataSources:r,adapter:s,initialForm:a,formId:t,onChange:o,onSave:n,labels:d,PreviewComponent:i,ToolboxComponent:l,CanvasComponent:c,Wrapper:m}){let{form:v,view:p,setForm:u,setAdapter:f,load:b,setAvailableTemplates:g}=C(),x=useMemo(()=>be(J,d),[d]);useEffect(()=>{s&&f(s);},[s,f]),useEffect(()=>{a?u(a):t&&s?.loadForm&&b(t);},[a,t]),useEffect(()=>{let ce=v.scopeId;if(!ce||!s?.loadTemplates){g([]);return}let Y=false;return s.loadTemplates(ce).then(Lo=>{Y||g(Lo);}).catch(()=>{Y||g([]);}),()=>{Y=true;}},[v.scopeId,s,g]);let y=useRef(o),T=useRef(true);y.current=o,useEffect(()=>{if(T.current){T.current=false;return}y.current?.(v);},[v]);let I=l??ge,H=c??me,S=useRef(false);m&&!S.current&&typeof console<"u"&&(S.current=true,console.warn("[@msbci/form-editor] FormEditor.Wrapper is deprecated \u2014 drag & drop is now provided by the internal DndManager. The custom Wrapper will still be applied AROUND DndManager, but you should remove it."));let Q=m??Qt.Fragment,Ce=jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsx(Se,{onSave:n}),jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[p==="canvas"&&jsxs(Fragment,{children:[jsx(I,{}),jsx(H,{}),jsx(Ae,{availableConnectors:r?Object.values(r):[]})]}),p==="preview"&&i&&jsx("div",{style:{flex:1,overflow:"auto"},children:jsx(i,{formSchema:v,theme:e,dataSources:r,mode:"fill"})}),p==="preview"&&!i&&jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:x.formEditor.previewMissing}),p==="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(fe,{labels:x,children:jsx(Q,{children:jsx(ke,{children:Ce})})})}function ir(){let e=R(),[r,s]=useState("fields"),[a,t]=useState(""),{form:o,selection:n,addVariable:d,addRoster:i,addVariableFromTemplate:l,availableTemplates:c}=C(),m=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=n.type==="page"||n.type==="variable"||n.type==="roster"?n.pageCode:o.pages[0]?.code,p=b=>{if(!v||!o.pages.find(y=>y.code===v))return;if(b.kind==="roster"){let y=`ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`;i(v,{id:`roster-${Date.now()}`,code:y,name:e.canvas.newRosterName,rosterType:b.rosterType,order:0,variables:[]});return}let x=`${b.type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`;d(v,{id:`var-${Date.now()}`,code:x,name:e.canvas.newVariableName(b.label),type:b.type,order:0,isRequired:false,isReadonly:false,isHidden:false});},u=b=>{v&&l(v,b);},f=m.map(b=>({...b,items:b.items.filter(g=>g.label.toLowerCase().includes(a.toLowerCase()))})).filter(b=>b.items.length>0);return jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx(lr,{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:a,onChange:b=>t(b.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"&&f.map(b=>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:b.label}),b.items.map(g=>{let x=g.kind==="roster"?`roster-${g.rosterType}`:`var-${g.type}`,y=g.kind==="roster"?`toolbox-roster-${g.rosterType}`:`toolbox-variable-${g.type}`;return jsxs("div",{"data-testid":y,onClick:()=>p(g),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:T=>{T.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:T=>{T.currentTarget.style.backgroundColor="transparent";},children:[jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:g.icon}),jsx("span",{children:g.label})]},x)})]},b.label)),r==="variables"&&jsx(sr,{templates:c,scopeId:o.scopeId,search:a,onAdd:u,defaultLang:o.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,labels:e})]})]})}function lr({tab:e,setTab:r,labels:s}){let a={flex:1,padding:"8px 0",fontSize:"12px",fontWeight:500,textAlign:"center",cursor:"pointer",userSelect:"none",color:"#64748b",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:"transparent"},t={...a,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:a,children:s.toolbox.tabFields}),jsx("div",{role:"tab","aria-selected":e==="variables","data-testid":"toolbox-tab-variables",onClick:()=>r("variables"),style:e==="variables"?t:a,children:s.toolbox.tabVariables})]})}function sr({templates:e,scopeId:r,search:s,onAdd:a,defaultLang:t,labels:o}){let n=l=>jsx("div",{"data-testid":"toolbox-variables-empty",style:{padding:"14px",color:"#94a3b8",fontSize:"12px",textAlign:"center",fontStyle:"italic"},children:l});if(!r)return n(o.toolbox.noScope);if(e.length===0)return n(o.toolbox.noTemplates);let d=s.toLowerCase(),i=e.filter(l=>{if(!d)return true;let c=l.code.toLowerCase().includes(d),m=Io(l.name,t).toLowerCase().includes(d);return c||m}).slice().sort((l,c)=>l.code.localeCompare(c.code));return i.length===0?n(o.toolbox.noTemplates):jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:i.map(l=>jsxs("div",{"data-testid":`toolbox-template-${l.code}`,onClick:()=>a(l),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:l.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:l.code}),jsx("span",{style:{fontSize:"12px",color:"#1e293b",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Io(l.name,t)})]})]},l.id))})}function Io(e,r){return resolveLabel(e,r,r)}function Ne(){let r=C(s=>s.form).langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang;return s=>resolveLabel(s,r,r)}function fr(e){let r=e.slice().sort((t,o)=>t.order-o.order),s=[],a=null;for(let t of r){if(isPageRoster(t)){a&&(s.push({kind:"variables",variables:a}),a=null),s.push({kind:"roster",roster:t});continue}let o=t;o.startWithNewLine===false&&a&&a.length>0?a.push(o):(a&&s.push({kind:"variables",variables:a}),a=[o]);}return a&&s.push({kind:"variables",variables:a}),s}function br(){let{form:e}=C(),r=R();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,a)=>s.order-a.order).map(s=>jsx(gr,{page:s},s.code))})}function gr({page:e}){let{selection:r,select:s,removePage:a}=C(),t=R(),o=Ne(),n=r.type==="page"&&r.pageCode===e.code,d=e.items??[...getPageVariables(e),...e.rosters??[]],i=d.filter(isPageVariable).length,l=d.filter(isPageRoster).length,c=fr(d);return jsxs("div",{style:{marginBottom:"16px",border:`2px solid ${n?"#2563eb":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden"},children:[jsxs("div",{onClick:()=>s({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:n?"#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(i,l)}),jsx("button",{onClick:m=>{m.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:[c.map((m,v)=>m.kind==="roster"?jsx(mr,{roster:m.roster,pageCode:e.code},`r-${m.roster.code}`):m.variables.length===1?jsx(_e,{variable:m.variables[0],pageCode:e.code},m.variables[0].code):jsx("div",{style:{display:"flex",gap:"2px",backgroundColor:"#f0f4ff",borderLeft:"2px solid #c7d2fe",margin:"1px 0"},children:m.variables.map(p=>jsx("div",{style:{flex:p.colSpan?`0 0 ${p.colSpan/12*100}%`:"1 1 0%",minWidth:0},children:jsx(_e,{variable:p,pageCode:e.code})},p.code))},`row-${v}`)),d.length===0&&jsx("div",{style:{padding:"12px 14px",color:"#94a3b8",fontSize:"12px",fontStyle:"italic"},children:t.canvas.emptyStatePage})]})]})}function _e({variable:e,pageCode:r,rosterCode:s}){let{selection:a,select:t,removeVariable:o}=C(),n=R(),d=Ne(),i=a.type==="variable"&&a.variableCode===e.code;return jsxs("div",{onClick:l=>{l.stopPropagation(),t({type:"variable",pageCode:r,variableCode:e.code,rosterCode:s});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",cursor:"pointer",backgroundColor:i?"#eff6ff":"transparent",borderLeft:i?"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:d(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:n.canvas.hasConditionsTitle,children:"\u26A1"}),e.dataSourceId&&jsx("span",{style:{color:"#22c55e",fontSize:"11px"},title:n.canvas.dataSourceConnectedTitle,children:"\u27F3"}),jsx("button",{onClick:l=>{l.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 mr({roster:e,pageCode:r}){let{selection:s,select:a,removeRoster:t,addVariable:o}=C(),n=R(),d=Ne(),i=s.type==="roster"&&s.rosterCode===e.code,l=c=>{c.stopPropagation();let m=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;o(r,{id:`var-${Date.now()}`,code:m,name:n.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 ${i?"#2563eb":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:c=>{c.stopPropagation(),a({type:"roster",pageCode:r,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:i?"#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 ",d(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:[n.canvas.pilotPrefix," ",e.pilotVariableCode]})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[jsx("span",{style:{fontSize:"11px",color:"#b45309"},children:n.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,m)=>c.order-m.order).map(c=>jsx(_e,{variable:c,pageCode:r,rosterCode:e.code},c.code)),jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsx("button",{onClick:l,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:n.canvas.addFieldToRoster})})]})}export{me as Canvas,me as CanvasDnd,br as CanvasSimple,Fe as ConditionBuilder,De as DataSourceSelector,ke as DndManager,fe as EditorLabelsProvider,Se as EditorToolbar,or as FormEditor,Ae as PropertiesPanel,ge as Toolbox,ge as ToolboxDnd,ir as ToolboxSimple,ro as createDragEndHandler,J as defaultLabels,qe as enLabels,J as frLabels,be as mergeLabels,C as useEditorStore,R as useLabels};//# sourceMappingURL=index.mjs.map
1
+ import gr,{createContext,useContext,useState,useMemo,useEffect,useRef,useCallback}from'react';import {create}from'zustand';import {deserializeForm,serializeForm,generateId,deepClone,migrateFormToItems,DEFAULT_LANG_CONFIG,resolveLabel,getPageVariables,isPageRoster,RosterConditionEngine,getPageRosters,isPageVariable}from'@msbci/form-core';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useDraggable,useDroppable,useSensors,useSensor,PointerSensor,KeyboardSensor,DndContext,closestCenter,DragOverlay}from'@dnd-kit/core';import {SortableContext,verticalListSortingStrategy,useSortable,arrayMove,sortableKeyboardCoordinates}from'@dnd-kit/sortable';import {CSS}from'@dnd-kit/utilities';function qe(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 Ue(e,r,a){return r==="variableType"?{...e,type:a}:{...e,[r]:a}}function Mo(e,r){return r==="variableType"?e.variableType:e[r]}var Wo=50;function qo(){return {id:"",code:"",name:"New Form",version:"1.0.0",isPublished:false,pages:[]}}function D(e,r){let a=Array.isArray(e.items)?e.items:[...getPageVariables(e),...getPageRosters(e)],{variables:n,rosters:o,...t}=e;return {...t,items:r(a)}}var S=create((e,r)=>{function a(o){let t=r(),i={form:deepClone(t.form),description:o,timestamp:Date.now()},d=t.history.slice(0,t.historyIndex+1);d.push(i),d.length>Wo&&d.shift(),e({history:d,historyIndex:d.length-1});}function n(o,t){a(o);let i=r(),d=t(deepClone(i.form));e({form:d,isDirty:true});}return {form:qo(),formTypes:[],selection:{type:"form"},view:"canvas",isDirty:false,isSaving:false,history:[],historyIndex:-1,adapter:null,availableTemplates:[],setForm:o=>{e({form:migrateFormToItems(deepClone(o)),isDirty:false,history:[],historyIndex:-1,selection:{type:"form"}});},updateFormMeta:o=>{n("Update form metadata",t=>({...t,...o}));},addPage:o=>{let t=Array.isArray(o.items)?o:{...o,items:[...o.variables??[],...o.rosters??[]]};n(`Add page "${t.name}"`,i=>({...i,pages:[...i.pages,t]}));},updatePage:(o,t)=>{n(`Update page "${o}"`,i=>({...i,pages:i.pages.map(d=>d.code===o?{...d,...t}:d)}));},removePage:o=>{n(`Remove page "${o}"`,i=>({...i,pages:i.pages.filter(d=>d.code!==o)}));let t=r();t.selection.type==="page"&&t.selection.pageCode===o&&e({selection:{type:"form"}});},reorderPages:o=>{n("Reorder pages",t=>{let i=new Map(t.pages.map(l=>[l.code,l])),d=o.map((l,s)=>{let c=i.get(l);return c?{...c,order:s}:void 0}).filter(l=>l!==void 0);return {...t,pages:d}});},addRoster:(o,t)=>{n(`Add roster "${t.name}" to page "${o}"`,i=>({...i,pages:i.pages.map(d=>d.code!==o?d:D(d,l=>[...l,{...t,itemType:"roster",order:l.length}]))}));},updateRoster:(o,t,i)=>{n(`Update roster "${t}"`,d=>({...d,pages:d.pages.map(l=>l.code!==o?l:D(l,s=>s.map(c=>isPageRoster(c)&&c.code===t?{...c,...i,itemType:"roster"}:c)))}));},removeRoster:(o,t)=>{n(`Remove roster "${t}"`,i=>({...i,pages:i.pages.map(d=>d.code!==o?d:D(d,l=>l.filter(s=>!(isPageRoster(s)&&s.code===t))))}));},addVariable:(o,t,i)=>{n(`Add variable "${t.name}"`,d=>({...d,pages:d.pages.map(l=>l.code!==o?l:i?D(l,s=>s.map(c=>isPageRoster(c)&&c.code===i?{...c,variables:[...c.variables,t]}:c)):D(l,s=>[...s,{...t,itemType:"variable",order:s.length}]))}));},updateVariable:(o,t,i,d)=>{n(`Update variable "${t}"`,l=>({...l,pages:l.pages.map(s=>s.code!==o?s:d?D(s,c=>c.map(g=>isPageRoster(g)&&g.code===d?{...g,variables:g.variables.map(v=>v.code===t?{...v,...i}:v)}:g)):D(s,c=>c.map(g=>isPageVariable(g)&&g.code===t?{...g,...i,itemType:"variable"}:g)))}));},removeVariable:(o,t,i)=>{n(`Remove variable "${t}"`,d=>({...d,pages:d.pages.map(l=>l.code!==o?l:i?D(l,s=>s.map(c=>isPageRoster(c)&&c.code===i?{...c,variables:c.variables.filter(g=>g.code!==t)}:c)):D(l,s=>s.filter(c=>!(isPageVariable(c)&&c.code===t))))}));},addVariableFromTemplate:(o,t,i)=>{n(`Add variable from template "${t.code}"`,d=>({...d,pages:d.pages.map(l=>l.code!==o?l:i?D(l,s=>s.map(c=>{if(!(isPageRoster(c)&&c.code===i))return c;let g=qe(t,c.variables.length);return {...c,variables:[...c.variables,g]}})):D(l,s=>[...s,qe(t,s.length)]))}));},setVariableOverride:(o,t,i,d,l)=>{n(`Override "${String(i)}" on "${t}"`,s=>({...s,pages:s.pages.map(c=>{if(c.code!==o)return c;let g=v=>{let p={...v.templateOverrides??{},[i]:d};return {...Ue(v,i,d),templateOverrides:p}};return l?D(c,v=>v.map(p=>isPageRoster(p)&&p.code===l?{...p,variables:p.variables.map(m=>m.code===t?g(m):m)}:p)):D(c,v=>v.map(p=>isPageVariable(p)&&p.code===t?g(p):p))})}));},resetVariableOverride:(o,t,i,d)=>{let l=r().availableTemplates;n(`Reset override "${String(i)}" on "${t}"`,s=>({...s,pages:s.pages.map(c=>{if(c.code!==o)return c;let g=v=>{let p={...v.templateOverrides??{}};delete p[i];let m=v.templateId?l.find(f=>f.id===v.templateId):void 0,b=m?Mo(m,i):void 0;return {...Ue(v,i,b),templateOverrides:p}};return d?D(c,v=>v.map(p=>isPageRoster(p)&&p.code===d?{...p,variables:p.variables.map(m=>m.code===t?g(m):m)}:p)):D(c,v=>v.map(p=>isPageVariable(p)&&p.code===t?g(p):p))})}));},moveVariable:(o,t,i,d,l,s)=>{n(`Move variable "${i}"`,c=>{let g,v=c.pages.map(m=>m.code!==o?m:l?D(m,b=>b.map(u=>{if(!(isPageRoster(u)&&u.code===l))return u;let f=u.variables.find(x=>x.code===i);return f&&(g={...f}),{...u,variables:u.variables.filter(x=>x.code!==i)}})):D(m,b=>b.filter(u=>isPageVariable(u)&&u.code===i?(g={...u},false):true)));if(!g)return c;g={...g,order:d,itemType:"variable"};let p=v.map(m=>m.code!==t?m:s?D(m,b=>b.map(u=>isPageRoster(u)&&u.code===s?{...u,variables:[...u.variables,g].sort((f,x)=>f.order-x.order)}:u)):D(m,b=>[...b,g].sort((u,f)=>u.order-f.order)));return {...c,pages:p}});},moveItem:(o,t,i)=>{n(`Reorder page items in "${o}"`,d=>({...d,pages:d.pages.map(l=>l.code!==o?l:D(l,s=>{if(t<0||t>=s.length||i<0||i>=s.length||t===i)return s;let c=s.slice(),[g]=c.splice(t,1);return c.splice(i,0,g),c.map((v,p)=>({...v,order:p}))}))}));},select:o=>e({selection:o}),clearSelection:()=>e({selection:{type:"form"}}),setView:o=>e({view:o}),undo:()=>{let{history:o,historyIndex:t,form:i}=r();if(!(t<0))if(t===o.length-1){let d={form:deepClone(i),description:"Current state",timestamp:Date.now()};e({form:deepClone(o[t].form),historyIndex:t-1,isDirty:true,history:[...o,d]});}else e({form:deepClone(o[t].form),historyIndex:t-1,isDirty:true});},redo:()=>{let{history:o,historyIndex:t}=r();if(t>=o.length-2)return;let i=t+2;i<o.length&&e({form:deepClone(o[i].form),historyIndex:i-1,isDirty:true});},canUndo:()=>r().historyIndex>=0,canRedo:()=>{let{history:o,historyIndex:t}=r();return t<o.length-2},addFormType:o=>{let t={...o,id:generateId()};e(i=>({formTypes:[...i.formTypes,t]}));},updateFormType:(o,t)=>{e(i=>({formTypes:i.formTypes.map(d=>d.id===o?{...d,...t}:d)}));},removeFormType:o=>{let t=r();if(t.form.formTypeId===o){let{formTypeId:i,...d}=t.form;e({form:{...d}});}e(i=>({formTypes:i.formTypes.filter(d=>d.id!==o)}));},setAvailableTemplates:o=>{e({availableTemplates:o});},setAdapter:o=>e({adapter:o}),save:async()=>{let{adapter:o,form:t}=r();if(o?.saveForm){e({isSaving:true});try{await o.saveForm(t),e({isDirty:!1});}finally{e({isSaving:false});}}},load:async o=>{let{adapter:t}=r();if(!t?.loadForm)return;let i=await t.loadForm(o);r().setForm(i);},exportJson:()=>serializeForm(r().form),importJson:o=>{let t=deserializeForm(o);r().setForm(t);}}});var Q={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",modalTitle:e=>`Conditions (${e})`,configureButton:e=>e===0?"Configurer les conditions":`Configurer les conditions (${e})`,applyButton:"Appliquer",cancelButton:"Annuler",closeButton:"Fermer",formulasSummary:"Formules configur\xE9es",noConditions:"Aucune condition configur\xE9e",modeVisual:"Constructeur visuel",modeManual:"Saisie manuelle",manualWarning:"Expression complexe \u2014 le constructeur visuel ne peut pas la repr\xE9senter. Restez en mode manuel pour la modifier.",manualPlaceholder:"Ex : show(${AGE} >= 18)",manualHelp:"Fonctions : show / hide / setValue / validate / require / readonly / ConditionEval. Variables : ${CODE}.",validationExpression:"Expression de validation",validationExpressionPlaceholder:'Ex : ${CHAMP} != ""'},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 Ge={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",modalTitle:e=>`Conditions (${e})`,configureButton:e=>e===0?"Configure conditions":`Configure conditions (${e})`,applyButton:"Apply",cancelButton:"Cancel",closeButton:"Close",formulasSummary:"Configured formulas",noConditions:"No condition configured",modeVisual:"Visual builder",modeManual:"Manual input",manualWarning:"Complex expression \u2014 the visual builder cannot represent it. Stay in manual mode to edit it.",manualPlaceholder:"e.g. show(${AGE} >= 18)",manualHelp:"Functions: show / hide / setValue / validate / require / readonly / ConditionEval. Variables: ${CODE}.",validationExpression:"Validation expression",validationExpressionPlaceholder:'e.g. ${FIELD} != ""'},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 je=createContext(Q);function ge({labels:e,children:r}){return jsx(je.Provider,{value:e,children:r})}function R(){return useContext(je)}function me(e){if(e===null||typeof e!="object")return false;let r=Object.getPrototypeOf(e);return r===Object.prototype||r===null}function ye(e,r){return r?Ke(e,r):e}function Ke(e,r){if(!me(e)||!me(r))return r===void 0?e:r;let a={...e};for(let n of Object.keys(r)){let o=e[n],t=r[n];me(o)&&me(t)?a[n]=Ke(o,t):t!==void 0&&(a[n]=t);}return a}function Ye({open:e,onClose:r}){let{formTypes:a,form:n,addFormType:o,updateFormType:t,removeFormType:i}=S(),d=R(),[l,s]=useState(""),[c,g]=useState(""),[v,p]=useState(null),[m,b]=useState(""),[u,f]=useState(null);if(!e)return null;let x=()=>{l.trim()&&(o({name:l.trim(),code:c.trim()||l.trim().toUpperCase().replace(/\s+/g,"_")}),s(""),g(""));},T=(C,Y)=>{p(C),b(Y);},w=()=>{v&&m.trim()&&t(v,{name:m.trim()}),p(null),b("");},y=C=>{n.formTypeId===C?f(C):i(C);},E=()=>{u&&i(u),f(null);};return jsx("div",{role:"dialog","aria-modal":"true","aria-label":d.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:d.formTypesDialog.title}),jsx("button",{type:"button",onClick:r,"aria-label":d.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:[a.length===0&&jsx("div",{"data-testid":"form-types-empty",style:{fontSize:"13px",color:"#94a3b8",marginBottom:"12px"},children:d.formTypesDialog.noTypes}),jsx("ul",{style:{listStyle:"none",padding:0,margin:0,display:"flex",flexDirection:"column",gap:"6px"},children:a.map(C=>{let Y=v===C.id,se=n.formTypeId===C.id,de=u===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:m,autoFocus:true,"data-testid":`form-type-name-edit-${C.id}`,onChange:Z=>b(Z.target.value),onBlur:w,onKeyDown:Z=>{Z.key==="Enter"&&w(),Z.key==="Escape"&&(p(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:()=>T(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":d.formTypesDialog.removeTypeAria(C.name),"data-testid":`form-type-remove-${C.id}`,onClick:()=>y(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"}),de&&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:d.formTypesDialog.confirmDelete}),jsx("button",{type:"button","data-testid":`form-type-confirm-yes-${C.id}`,onClick:E,style:{padding:"4px 8px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:d.formTypesDialog.deleteConfirm}),jsx("button",{type:"button","data-testid":`form-type-confirm-no-${C.id}`,onClick:()=>f(null),style:{padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:d.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:l,"data-testid":"form-types-new-name",placeholder:d.formTypesDialog.newTypeNamePlaceholder,onChange:C=>s(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:d.formTypesDialog.newTypeCodePlaceholder,onChange:C=>g(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:l.trim()==="",style:{padding:"6px 12px",border:"none",borderRadius:"4px",backgroundColor:l.trim()===""?"#cbd5e1":"#2563eb",color:"#fff",fontSize:"13px",cursor:l.trim()===""?"not-allowed":"pointer"},children:d.formTypesDialog.addButton})]})]})})}function Ie({onSave:e,onExport:r,onImport:a}){let{form:n,updateFormMeta:o,view:t,setView:i,isDirty:d,isSaving:l,canUndo:s,canRedo:c,undo:g,redo:v,save:p,addPage:m}=S(),b=R(),[u,f]=useState(false),x=async()=>{await p(),e?.();},T=()=>{let y=n.pages.length;m({id:`page-${Date.now()}`,code:`PAGE_${y+1}`,name:`Page ${y+1}`,order:y,isRepeatable:false,items:[]});},w=[{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(n.name,n.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,n.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang),onChange:y=>{let E=n.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,C;typeof n.name=="string"?C=y.target.value:C={...n.name??{},[E]:y.target.value},o({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}),d&&jsx("span",{style:{fontSize:"11px",color:"#f59e0b",fontWeight:500},children:b.toolbar.unsaved}),jsx("div",{style:{flex:1}}),jsx(re,{onClick:T,label:b.toolbar.addPage}),jsx(re,{onClick:()=>f(true),label:b.toolbar.types,title:b.toolbar.manageFormTypesTitle}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(re,{onClick:g,label:"\u21A9",disabled:!s(),title:b.toolbar.undo}),jsx(re,{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:w.map(y=>jsx("button",{type:"button",onClick:()=>i(y.view),style:{padding:"4px 12px",fontSize:"12px",fontWeight:500,border:"none",cursor:"pointer",backgroundColor:t===y.view?"#2563eb":"#fff",color:t===y.view?"#fff":"#64748b"},children:y.label},y.view))}),jsx("div",{style:{width:"1px",height:"24px",backgroundColor:"#e2e8f0"}}),jsx(re,{onClick:x,label:l?b.toolbar.saving:b.toolbar.save,primary:true,disabled:l||!d}),r&&jsx(re,{onClick:r,label:b.toolbar.export}),a&&jsx(re,{onClick:a,label:b.toolbar.import}),jsx(Ye,{open:u,onClose:()=>f(false)})]})}function re({onClick:e,label:r,primary:a,disabled:n,title:o}){return jsx("button",{type:"button",onClick:e,disabled:n,title:o,style:{padding:"6px 12px",borderRadius:"6px",border:a?"none":"1px solid #e2e8f0",backgroundColor:a?"#2563eb":"#fff",color:a?"#fff":"#334155",fontSize:"13px",fontWeight:500,cursor:n?"default":"pointer",opacity:n?.5:1},children:r})}function xe(){let e=R(),[r,a]=useState("fields"),[n,o]=useState(""),{form:t,availableTemplates:i}=S(),d=t.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,s=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:"#"}]},{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.groupAdvanced,items:[{kind:"variable",type:"file",label:e.toolbox.types.file,icon:"\u{1F4CE}"},{kind:"variable",type:"gps",label:e.toolbox.types.gps,icon:"\u{1F4CD}"},{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]).map(c=>({...c,items:c.items.filter(g=>g.label.toLowerCase().includes(n.toLowerCase()))})).filter(c=>c.items.length>0);return jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx(Qo,{tab:r,setTab:a,labels:e}),jsx("div",{style:{padding:"12px",borderBottom:"1px solid #e2e8f0"},children:jsx("input",{type:"text",placeholder:e.toolbox.searchPlaceholder,value:n,onChange:c=>o(c.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:[r==="fields"&&s.map(c=>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:c.label}),c.items.map(g=>jsx(et,{entry:g},`${g.kind}-${g.kind==="roster"?g.rosterType:g.type}`))]},c.label)),r==="variables"&&jsx(ot,{templates:i,scopeId:t.scopeId,search:n,defaultLang:d,labels:e})]})]})}function Qo({tab:e,setTab:r,labels:a}){let n={flex:1,padding:"8px 0",fontSize:"12px",fontWeight:500,textAlign:"center",cursor:"pointer",userSelect:"none",color:"#64748b",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:"transparent"},o={...n,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"?o:n,children:a.toolbox.tabFields}),jsx("div",{role:"tab","aria-selected":e==="variables","data-testid":"toolbox-tab-variables",onClick:()=>r("variables"),style:e==="variables"?o:n,children:a.toolbox.tabVariables})]})}function et({entry:e}){let r=e.kind==="roster"?`toolbox-roster-${e.rosterType}`:`toolbox-variable-${e.type}`,a=e.kind==="roster"?{type:"new-roster",rosterType:e.rosterType}:{type:"new-variable",variableType:e.type},{attributes:n,listeners:o,setNodeRef:t,isDragging:i}=useDraggable({id:r,data:a});return jsxs("div",{ref:t,"data-testid":r,...o,...n,style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"grab",fontSize:"13px",color:"#334155",backgroundColor:i?"#e2e8f0":"transparent",userSelect:"none"},children:[jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:e.icon}),jsx("span",{children:e.label})]})}function ot({templates:e,scopeId:r,search:a,defaultLang:n,labels:o}){let t=l=>jsx("div",{"data-testid":"toolbox-variables-empty",style:{padding:"14px",color:"#94a3b8",fontSize:"12px",textAlign:"center",fontStyle:"italic"},children:l});if(!r)return t(o.toolbox.noScope);if(e.length===0)return t(o.toolbox.noTemplates);let i=a.toLowerCase(),d=e.filter(l=>{if(!i)return true;let s=l.code.toLowerCase().includes(i),c=Ze(l.name,n).toLowerCase().includes(i);return s||c}).slice().sort((l,s)=>l.code.localeCompare(s.code));return d.length===0?t(o.toolbox.noTemplates):jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:d.map(l=>jsx(tt,{template:l,defaultLang:n},l.id))})}function tt({template:e,defaultLang:r}){let a=`toolbox-template-${e.code}`,{attributes:n,listeners:o,setNodeRef:t,isDragging:i}=useDraggable({id:a,data:{type:"new-variable-from-template",template:e}});return jsxs("div",{ref:t,"data-testid":a,...o,...n,style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",borderRadius:"6px",cursor:"grab",fontSize:"13px",color:"#334155",backgroundColor:i?"#e2e8f0":"transparent",userSelect:"none"},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:e.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:e.code}),jsx("span",{style:{fontSize:"12px",color:"#1e293b",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Ze(e.name,r)})]})]})}function Ze(e,r){return resolveLabel(e,r,r)}function Le(){let r=S(a=>a.form).langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang;return a=>resolveLabel(a,r,r)}function ve(){let{form:e}=S(),r=R();if(e.pages.length===0)return jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:r.canvas.emptyStateNoPageDnd});let a=e.pages.slice().sort((o,t)=>o.order-t.order),n=a.map(o=>`page-${o.code}`);return jsx("div",{style:{flex:1,overflowY:"auto",padding:"16px",backgroundColor:"#fff"},children:jsx(SortableContext,{items:n,strategy:verticalListSortingStrategy,children:a.map(o=>jsx(lt,{page:o},o.code))})})}function lt({page:e}){let{selection:r,select:a}=S(),n=R(),o=Le(),t=r.type==="page"&&r.pageCode===e.code,{attributes:i,listeners:d,setNodeRef:l,transform:s,transition:c,isDragging:g,isOver:v}=useSortable({id:`page-${e.code}`,data:{type:"page",pageCode:e.code}}),p=(e.items??[...getPageVariables(e),...e.rosters??[]]).slice().sort((b,u)=>b.order-u.order),m=p.filter(b=>!isPageRoster(b)).length;return jsxs("div",{ref:l,style:{marginBottom:"16px",border:`2px solid ${t?"#2563eb":v?"#93c5fd":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden",transform:CSS.Transform.toString(s),transition:c,opacity:g?.6:1},children:[jsxs("div",{onClick:()=>a({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:t?"#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",{...i,...d,"data-testid":`canvas-page-drag-handle-${e.code}`,"aria-label":`Reorder page ${e.code}`,title:"Drag to reorder",onClick:b=>b.stopPropagation(),style:{color:"#94a3b8",fontSize:"14px",cursor:"grab",padding:"2px 6px",borderRadius:"4px",userSelect:"none",touchAction:"none"},children:"\u283F"}),jsx("span",{style:{fontSize:"14px",fontWeight:600,color:"#1e293b"},children:o(e.name)||n.canvas.unnamedPage}),e.isRepeatable&&jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:n.canvas.repeatable})]}),jsx("span",{style:{fontSize:"12px",color:"#94a3b8"},children:n.canvas.fieldsCount(m)})]}),jsx(SortableContext,{items:p.map(b=>b.code),strategy:verticalListSortingStrategy,children:jsx("div",{style:{padding:"4px 0"},children:p.map(b=>isPageRoster(b)?jsx(st,{roster:b,pageCode:e.code},b.code):jsx(to,{variable:b,pageCode:e.code},b.code))})})]})}function to({variable:e,pageCode:r,rosterCode:a}){let{selection:n,select:o}=S(),t=R(),i=Le(),d=n.type==="variable"&&n.pageCode===r&&n.variableCode===e.code,{attributes:l,listeners:s,setNodeRef:c,transform:g,transition:v,isDragging:p}=useSortable({id:e.code,data:{type:"variable",pageCode:r,variableCode:e.code,rosterCode:a}});return jsxs("div",{ref:c,...l,...s,onClick:m=>{m.stopPropagation(),o({type:"variable",pageCode:r,variableCode:e.code,rosterCode:a});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",margin:"1px 0",cursor:"pointer",backgroundColor:d?"#eff6ff":p?"#f1f5f9":"transparent",borderLeft:d?"3px solid #2563eb":"3px solid transparent",transform:CSS.Transform.toString(g),transition:v,opacity:p?.5:1,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:i(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:t.canvas.hasConditionsTitle,children:"\u26A1"}),e.dataSourceId&&jsx("span",{style:{color:"#22c55e",fontSize:"11px"},title:t.canvas.dataSourceConnectedTitle,children:"\u27F3"})]})}function st({roster:e,pageCode:r}){let{selection:a,select:n,addVariable:o}=S(),t=R(),i=Le(),d=a.type==="roster"&&a.pageCode===r&&a.rosterCode===e.code,{attributes:l,listeners:s,setNodeRef:c,transform:g,transition:v,isDragging:p}=useSortable({id:e.code,data:{type:"roster",pageCode:r,rosterCode:e.code}}),{setNodeRef:m,isOver:b}=useDroppable({id:`roster-drop-${e.code}`,data:{type:"roster-drop",pageCode:r,rosterCode:e.code}}),u=f=>{f.stopPropagation();let x=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;o(r,{id:`var-${Date.now()}`,code:x,name:t.canvas.newFieldName,type:"text",order:e.variables.length,isRequired:false,isReadonly:false,isHidden:false},e.code);};return jsxs("div",{ref:c,style:{margin:"4px 8px",border:`1px solid ${d?"#2563eb":b?"#f59e0b":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden",backgroundColor:b?"#fefce8":void 0,transform:CSS.Transform.toString(g),transition:v,opacity:p?.5:1},children:[jsxs("div",{...l,...s,onClick:f=>{f.stopPropagation(),n({type:"roster",pageCode:r,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:d?"#fef3c7":"#fffbeb",fontSize:"12px",fontWeight:600,color:"#92400e",cursor:"grab",display:"flex",alignItems:"center",gap:"6px"},children:[jsx("span",{style:{fontSize:"10px"},children:"\u25A4"}),i(e.name)||e.code," (",e.rosterType,")"]}),jsxs("div",{ref:m,children:[e.variables.slice().sort((f,x)=>f.order-x.order).map(f=>jsx(to,{variable:f,pageCode:r,rosterCode:e.code},f.code)),jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsx("button",{type:"button",onClick:u,"data-testid":`canvas-add-field-to-roster-${e.code}`,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:t.canvas.addFieldToRoster})})]})]})}function ht(e,r){let a=e.pages.find(n=>n.code===r);return a?Array.isArray(a.items)?a.items.slice().sort((n,o)=>n.order-o.order):[...getPageVariables(a),...getPageRosters(a)].sort((n,o)=>n.order-o.order):null}function no(e){return `${e}_${Date.now().toString(36).slice(-4).toUpperCase()}`}function io(e,r){return a=>{let{active:n,over:o}=a;if(!n||!o)return;let t=n.data.current;if(!t?.type)return;let i=r(),d=()=>{let l=o.data.current;return l?l.type==="page"&&l.pageCode?{pageCode:l.pageCode}:l.type==="variable"&&l.pageCode?{pageCode:l.pageCode,rosterCode:l.rosterCode}:l.type==="roster"&&l.pageCode?{pageCode:l.pageCode,rosterCode:l.rosterCode}:l.type==="roster-drop"&&l.pageCode?{pageCode:l.pageCode,rosterCode:l.rosterCode}:null:null};if(t.type==="new-variable"){let l=d()??{pageCode:i.pages[0]?.code??""};if(!l.pageCode)return;let s=t.variableType??"text";e.addVariable(l.pageCode,{id:`var-${Date.now()}`,code:no(s.toUpperCase()),name:`New ${s}`,type:s,order:0,isRequired:false,isReadonly:false,isHidden:false},l.rosterCode);return}if(t.type==="new-roster"){let l=d()??{pageCode:i.pages[0]?.code??""};if(!l.pageCode)return;let s=t.rosterType??"collection";e.addRoster(l.pageCode,{id:`roster-${Date.now()}`,code:no("ROSTER"),name:"New Roster",rosterType:s,order:0,variables:[]});return}if(t.type==="new-variable-from-template"&&t.template){let l=d()??{pageCode:i.pages[0]?.code??""};if(!l.pageCode)return;e.addVariableFromTemplate(l.pageCode,t.template,l.rosterCode);return}if(t.type==="page"){let l=o.data.current;if(l?.type!=="page"||!l.pageCode||!t.pageCode||t.pageCode===l.pageCode)return;let s=i.pages.slice().sort((p,m)=>p.order-m.order),c=s.findIndex(p=>p.code===t.pageCode),g=s.findIndex(p=>p.code===l.pageCode);if(c===-1||g===-1||c===g)return;let v=arrayMove(s,c,g).map(p=>p.code);e.reorderPages(v);return}if(t.type==="variable"||t.type==="roster"){let l=o.data.current,s=t.pageCode;if(!s||!l)return;let c=p=>p.type==="roster"||p.type==="variable"&&!p.rosterCode,g=c(t),v=c(l);if(l.pageCode===s&&l.type!=="page"&&g&&v){let p=ht(i,s);if(!p)return;let m=String(n.id),b=String(o.id);if(m===b)return;let u=p.findIndex(x=>x.code===m),f=p.findIndex(x=>x.code===b);if(u===-1||f===-1)return;e.moveItem(s,u,f);return}if(t.type==="variable"&&t.variableCode){let p=l.pageCode??s,m=l.type==="page"?void 0:l.rosterCode;if(p===s&&(t.rosterCode??void 0)===(m??void 0))return;e.moveVariable(s,p,t.variableCode,0,t.rosterCode,m);return}}}}function Pe({children:e}){let r=S(),[a,n]=useState(null),o=useSensors(useSensor(PointerSensor,{activationConstraint:{distance:8}}),useSensor(KeyboardSensor,{coordinateGetter:sortableKeyboardCoordinates})),t=useMemo(()=>io({addVariable:r.addVariable,addRoster:r.addRoster,addVariableFromTemplate:r.addVariableFromTemplate,moveItem:r.moveItem,moveVariable:r.moveVariable,reorderPages:r.reorderPages},()=>S.getState().form),[r.addVariable,r.addRoster,r.addVariableFromTemplate,r.moveItem,r.moveVariable,r.reorderPages]);return jsxs(DndContext,{sensors:o,collisionDetection:closestCenter,onDragStart:d=>{let l=d.active.data.current;l&&(l.type==="new-variable"?n(l.variableType??"variable"):l.type==="new-roster"?n(`roster:${l.rosterType??""}`):l.type==="new-variable-from-template"?n(`tpl:${l.template?.code??""}`):l.type==="variable"?n(l.variableCode??""):l.type==="roster"?n(`\u25A4 ${String(d.active.id)}`):l.type==="page"&&n(`\u{1F4C4} ${l.pageCode??""}`));},onDragEnd:d=>{n(null),t(d);},children:[e,jsx(DragOverlay,{children:a&&jsx("div",{style:{padding:"6px 12px",borderRadius:"6px",backgroundColor:"#2563eb",color:"#fff",fontSize:"13px",fontWeight:500,boxShadow:"0 4px 12px rgba(0,0,0,0.15)"},children:a})})]})}function so(e,r,a="fr"){if(e==null)return "";if(typeof e=="string")return e;let n=e[r];if(typeof n=="string"&&n!=="")return n;let o=e[a];if(typeof o=="string"&&o!=="")return o;for(let t of Object.values(e))if(typeof t=="string"&&t!=="")return t;return ""}var Ce={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},It={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 lo(e,r,a){if(e==null)return "";if(typeof e=="string")return r===a?e:"";let n=e[r];return typeof n=="string"?n:""}function be({value:e,onChange:r,availableLangs:a,defaultLang:n="fr",placeholder:o,multiline:t,testIdPrefix:i,disabled:d}){let l=a.length>0?a:[n],s=l.length>1,[c,g]=useState(l[0]),v=R();l.includes(c)||g(l[0]);let p=(b,u)=>{if(!s){r(u);return}let f=typeof e=="string"?{[n]:e}:{...e??{}};f[b]=u,r(f);};if(!s){let b=l[0],u=lo(e,b,n);return t?jsx("textarea",{value:u,rows:3,placeholder:o,disabled:d,"data-testid":i?`${i}-${b}`:void 0,onChange:f=>p(b,f.target.value),style:Ce}):jsx("input",{type:"text",value:u,placeholder:o,disabled:d,"data-testid":i?`${i}-${b}`:void 0,onChange:f=>p(b,f.target.value),style:Ce})}let m=lo(e,c,n);return jsxs("div",{"data-testid":i,style:{display:"flex",flexDirection:"column"},children:[jsx("div",{role:"tablist","aria-label":v.properties.title,style:{display:"flex",gap:"2px"},children:l.map(b=>{let u=b===c;return jsx("button",{type:"button",role:"tab","aria-selected":u,"data-testid":i?`${i}-tab-${b}`:void 0,onClick:()=>g(b),style:{...It,backgroundColor:u?"#fff":"#f1f5f9",color:u?"#2563eb":"#64748b",borderColor:"#e2e8f0"},children:b},b)})}),t?jsx("textarea",{value:m,rows:3,placeholder:o,disabled:d,"data-testid":i?`${i}-${c}`:void 0,onChange:b=>p(c,b.target.value),style:{...Ce,borderTopLeftRadius:0}}):jsx("input",{type:"text",value:m,placeholder:o,disabled:d,"data-testid":i?`${i}-${c}`:void 0,onChange:b=>p(c,b.target.value),style:{...Ce,borderTopLeftRadius:0}})]})}function M({label:e,value:r,onChange:a,placeholder:n,multiline:o,testIdPrefix:t,disabled:i}){let l=S(s=>s.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(be,{value:r,onChange:a,availableLangs:l.availableLangs,defaultLang:l.defaultLang,placeholder:n,multiline:o,testIdPrefix:t,disabled:i})]})}var Pt=["fr","en"];function ce(){let{form:e,formTypes:r,updateFormMeta:a}=S(),n=R(),o=e.langConfig??DEFAULT_LANG_CONFIG,t=e.pages.reduce((i,d)=>i+getPageVariables(d).length+getPageRosters(d).reduce((l,s)=>l+s.variables.length,0),0);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(M,{label:n.properties.name,value:e.name,onChange:i=>a({name:i}),testIdPrefix:"form-name"}),jsx(N,{label:n.properties.code,value:e.code,onChange:i=>a({code:i})}),jsx(M,{label:n.properties.description,value:e.description,onChange:i=>a({description:i}),multiline:true,testIdPrefix:"form-description"}),jsx(N,{label:n.properties.version,value:e.version,onChange:i=>a({version:i})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:n.properties.formType}),jsxs("select",{"data-testid":"form-properties-type-select",value:e.formTypeId??"",onChange:i=>a({formTypeId:i.target.value||void 0}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},children:[jsx("option",{value:"",children:n.properties.noType}),r.map(i=>jsx("option",{value:i.id,children:i.name},i.id))]})]}),jsx(Ft,{langConfig:o}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8",marginTop:"8px"},children:n.properties.formSummary(e.pages.length,t)})]})}function Ft({langConfig:e}){let{form:r,updateFormMeta:a,setForm:n}=S(),o=R(),[t,i]=useState(null),d={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},l={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:"#334155",outline:"none",boxSizing:"border-box"},s=m=>{a({langConfig:m});},c=m=>{e.availableLangs.includes(m)||s({...e,availableLangs:[...e.availableLangs,m]});},g=m=>{e.availableLangs.length<=1||m!==e.defaultLang&&i(m);},v=m=>{let b=e.availableLangs.filter(T=>T!==m),u=b.includes(e.defaultLang)?e.defaultLang:b[0]??"fr",f=Dt(r,m,u,b.length===1),x={...e,defaultLang:u,availableLangs:b};n({...f,langConfig:x}),i(null);},p=()=>i(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:o.properties.langConfigSection}),jsxs("div",{children:[jsx("label",{style:d,children:o.properties.langConfigAvailable}),jsx("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap"},children:Pt.map(m=>{let b=e.availableLangs.includes(m),u=m===e.defaultLang,f=e.availableLangs.length<=1,x=b&&(u||f);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-${m}`,checked:b,disabled:x,onChange:T=>{T.target.checked?c(m):g(m);}}),jsx("span",{children:m.toUpperCase()}),u&&jsxs("span",{style:{fontSize:"10px",color:"#94a3b8",fontStyle:"italic"},children:["(",o.properties.langConfigDefault,")"]})]},m)})})]}),jsxs("div",{children:[jsx("label",{style:d,children:o.properties.langConfigDefault}),jsx("select",{"data-testid":"lang-default-select",value:e.defaultLang,onChange:m=>s({...e,defaultLang:m.target.value}),style:l,children:e.availableLangs.map(m=>jsx("option",{value:m,children:m.toUpperCase()},m))})]}),jsxs("div",{children:[jsx("label",{style:d,children:o.properties.langConfigStrategy}),jsxs("select",{"data-testid":"lang-strategy-select",value:e.strategy,onChange:m=>s({...e,strategy:m.target.value}),style:l,children:[jsx("option",{value:"prop",children:o.properties.langConfigStrategies.prop}),jsx("option",{value:"browser",children:o.properties.langConfigStrategies.browser}),jsx("option",{value:"selector",children:o.properties.langConfigStrategies.selector}),jsx("option",{value:"auto",children:o.properties.langConfigStrategies.auto})]})]}),e.strategy==="selector"&&jsxs("div",{children:[jsx("label",{style:d,children:o.properties.langConfigSelectorPosition}),jsxs("select",{"data-testid":"lang-selector-position-select",value:e.selectorPosition??"top",onChange:m=>s({...e,selectorPosition:m.target.value}),style:l,children:[jsx("option",{value:"top",children:o.properties.langConfigPositions.top}),jsx("option",{value:"bottom",children:o.properties.langConfigPositions.bottom})]})]}),t&&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:o.properties.langConfigConfirmRemove(t)}),jsxs("div",{style:{display:"flex",gap:"8px"},children:[jsx("button",{type:"button","data-testid":"lang-remove-confirm-yes",onClick:()=>v(t),style:{padding:"4px 10px",border:"none",borderRadius:"4px",backgroundColor:"#ef4444",color:"#fff",fontSize:"12px",cursor:"pointer"},children:o.properties.langConfigConfirmYes}),jsx("button",{type:"button","data-testid":"lang-remove-confirm-no",onClick:p,style:{padding:"4px 10px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#334155",fontSize:"12px",cursor:"pointer"},children:o.properties.langConfigConfirmNo})]})]})]})}function Dt(e,r,a,n){let o=p=>{if(p===void 0)return;if(typeof p=="string")return p;let m={...p};return delete m[r],n?so(m,a,"fr"):m},t=p=>({...p,label:o(p.label)??""}),i=p=>({...p,message:o(p.message)??""}),d=p=>({...p,errorMessage:o(p.errorMessage)}),l=p=>({...p,name:o(p.name)??"",description:o(p.description),placeholder:o(p.placeholder),options:p.options?p.options.map(t):p.options,validationRules:p.validationRules?p.validationRules.map(i):p.validationRules,conditions:p.conditions?p.conditions.map(d):p.conditions}),s=p=>({...p,name:o(p.name)??"",options:p.options?p.options.map(t):p.options,variables:p.variables.map(l),conditions:p.conditions?p.conditions.map(d):p.conditions}),c=p=>({...p,instanceLabel:o(p.instanceLabel)}),g=p=>isPageRoster(p)?s(p):l(p),v=p=>{let m=Array.isArray(p.items)?p.items.map(g):[...getPageVariables(p).map(l),...getPageRosters(p).map(s)],{variables:b,rosters:u,...f}=p;return {...f,name:o(p.name)??"",repeatConfig:p.repeatConfig?c(p.repeatConfig):p.repeatConfig,items:m,conditions:p.conditions?p.conditions.map(d):p.conditions}};return {...e,name:o(e.name)??"",description:o(e.description),pages:e.pages.map(v)}}function N({label:e,value:r,onChange:a,multiline:n,type:o="text",readOnly:t}){let i={width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",color:t?"#64748b":"#334155",backgroundColor:t?"#f1f5f9":"#fff",outline:"none",boxSizing:"border-box",cursor:t?"not-allowed":"text"};return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),n?jsx("textarea",{value:r,onChange:d=>a(d.target.value),rows:3,style:i,readOnly:t}):jsx("input",{type:o,value:r,onChange:d=>a(d.target.value),style:i,readOnly:t})]})}function fo({page:e}){let{updatePage:r}=S(),a=R();return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(M,{label:a.properties.name,value:e.name,onChange:n=>r(e.code,{name:n}),testIdPrefix:"page-name"}),jsx(N,{label:a.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:n=>r(e.code,{isRepeatable:n.target.checked,repeatConfig:n.target.checked?{min:1,max:10}:void 0})}),a.properties.repeatablePage]})}),e.isRepeatable&&e.repeatConfig&&jsxs("div",{style:{padding:"8px",backgroundColor:"#f8fafc",borderRadius:"6px",display:"flex",flexDirection:"column",gap:"8px"},children:[jsx(N,{label:a.properties.minInstances,value:String(e.repeatConfig.min??1),type:"number",onChange:n=>r(e.code,{repeatConfig:{...e.repeatConfig,min:parseInt(n)||1}})}),jsx(N,{label:a.properties.maxInstances,value:String(e.repeatConfig.max??10),type:"number",onChange:n=>r(e.code,{repeatConfig:{...e.repeatConfig,max:parseInt(n)||10}})}),jsx(N,{label:a.properties.controlVariableCode,value:e.repeatConfig.controlVariableCode??"",onChange:n=>r(e.code,{repeatConfig:{...e.repeatConfig,controlVariableCode:n||void 0}})}),jsx(M,{label:a.properties.instanceLabel,value:e.repeatConfig.instanceLabel,onChange:n=>r(e.code,{repeatConfig:{...e.repeatConfig,instanceLabel:n}}),testIdPrefix:"page-instance-label"})]}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:a.properties.pageSummary(getPageVariables(e).length,getPageRosters(e).length)})]})}var $t=["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"],Ot=["show","hide","validate","require","readonly","setValue"],Bt=["is_empty","is_not_empty"];function Ee({conditions:e,onChange:r,availableVariables:a,rosterContext:n}){let o=R(),[t,i]=useState(null),d=()=>{let c={id:generateId(),action:"show",expression:""};r([...e,c]),i(c.id);},l=c=>{r(e.filter(g=>g.id!==c)),t===c&&i(null);},s=(c,g)=>{r(e.map(v=>v.id===c?{...v,...g}: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:o.conditionBuilder.conditionsCount(e.length)}),e.map(c=>jsx(_t,{condition:c,isExpanded:t===c.id,onToggle:()=>i(t===c.id?null:c.id),onUpdate:g=>s(c.id,g),onRemove:()=>l(c.id),availableVariables:a,rosterContext:n},c.id)),jsx("button",{type:"button",onClick:d,style:{padding:"6px 12px",border:"1px dashed #cbd5e1",borderRadius:"6px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:"pointer"},children:o.conditionBuilder.addCondition})]})}function _t({condition:e,isExpanded:r,onToggle:a,onUpdate:n,onRemove:o,availableVariables:t,rosterContext:i}){let d=R(),[l,s]=useState(()=>Wt(e.expression)),c=(f,x)=>{s(f);let T=bo(f,x);n({expression:T});},g=f=>{n({action:f});let x=bo(l,f);n({action:f,expression:x});},v=()=>{let f={id:generateId(),variableCode:"",operator:"equals",value:""},x={...l,rules:[...l.rules,f]};c(x,e.action);},p=f=>{let x={...l,rules:l.rules.filter(T=>T.id!==f)};c(x,e.action);},m=(f,x)=>{let T={...l,rules:l.rules.map(w=>w.id===f?{...w,...x}:w)};c(T,e.action);},b=f=>{let x={...l,logic:f};c(x,e.action);},u=d.conditionBuilder.actions[e.action]??e.action;return jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:a,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:[u,l.rules.length>0?d.conditionBuilder.rulesCount(l.rules.length):""]}),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("span",{style:{color:"#94a3b8"},children:r?"\u25B2":"\u25BC"}),jsx("span",{onClick:f=>{f.stopPropagation(),o();},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:d.conditionBuilder.action}),jsx("select",{value:e.action,onChange:f=>g(f.target.value),style:De,children:Ot.map(f=>jsx("option",{value:f,children:d.conditionBuilder.actions[f]},f))})]}),l.rules.length>1&&jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#64748b"},children:d.conditionBuilder.match}),jsx("button",{type:"button",onClick:()=>b("and"),style:{...mo,backgroundColor:l.logic==="and"?"#2563eb":"#f1f5f9",color:l.logic==="and"?"#fff":"#64748b"},children:d.conditionBuilder.all}),jsx("button",{type:"button",onClick:()=>b("or"),style:{...mo,backgroundColor:l.logic==="or"?"#2563eb":"#f1f5f9",color:l.logic==="or"?"#fff":"#64748b"},children:d.conditionBuilder.any})]}),l.rules.map(f=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsxs("select",{value:f.variableCode,onChange:x=>m(f.id,{variableCode:x.target.value}),style:{...De,flex:1},children:[jsx("option",{value:"",children:d.conditionBuilder.variablePlaceholder}),t.map(x=>jsxs("option",{value:x.code,children:[x.name," (",x.code,")"]},x.code))]}),jsx("select",{value:f.operator,onChange:x=>m(f.id,{operator:x.target.value}),style:{...De,width:"130px"},children:$t.map(x=>jsx("option",{value:x,children:d.conditionBuilder.operators[x]},x))}),!Bt.includes(f.operator)&&jsx("input",{type:"text",value:f.value,onChange:x=>m(f.id,{value:x.target.value}),placeholder:d.conditionBuilder.valuePlaceholder,style:{...Ve,flex:1}}),jsx("button",{type:"button",onClick:()=>p(f.id),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px",padding:"2px"},children:"\xD7"})]},f.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:d.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}),i&&e.expression&&(()=>{let f=RosterConditionEngine.validateCondition(e.expression,i.variables,i.currentVariableCode,i.currentVariableOrder);return f.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:f.errors.map((x,T)=>jsxs("div",{children:[jsx("strong",{children:x.type}),x.variableCode?`: \${${x.variableCode}}`:""," \u2014 ",x.message]},T))})})(),e.action==="validate"&&jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:d.conditionBuilder.errorMessage}),jsx(Nt,{value:e.errorMessage,onChange:f=>n({errorMessage:f}),placeholder:d.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:d.conditionBuilder.targetVariableCode}),jsx("input",{type:"text",value:e.targetVariableCode??"",onChange:f=>n({targetVariableCode:f.target.value||void 0}),placeholder:d.conditionBuilder.targetVariablePlaceholder,style:Ve})]}),jsxs("div",{children:[jsx("label",{style:{fontSize:"11px",fontWeight:500,color:"#64748b",display:"block",marginBottom:"2px"},children:d.conditionBuilder.valueToSet}),jsx("input",{type:"text",value:e.setValue!==void 0?String(e.setValue):"",onChange:f=>n({setValue:f.target.value}),placeholder:d.conditionBuilder.valueToSetPlaceholder,style:Ve})]})]})]})]})}function Nt({value:e,onChange:r,placeholder:a}){let o=S(t=>t.form).langConfig??DEFAULT_LANG_CONFIG;return jsx(be,{value:e,onChange:t=>r(t),availableLangs:o.availableLangs,defaultLang:o.defaultLang,placeholder:a,testIdPrefix:"condition-error-message"})}function Mt(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 bo(e,r){if(e.rules.length===0)return "";let a=e.rules.filter(o=>o.variableCode).map(o=>{let t=`\${${o.variableCode}}`,i=Mt(o.operator);if(o.operator==="is_empty")return `isEmpty(${t})`;if(o.operator==="is_not_empty")return `isNotEmpty(${t})`;if(o.operator==="contains")return `contains(${t}, "${o.value}")`;if(o.operator==="starts_with")return `startsWith(${t}, "${o.value}")`;if(o.operator==="ends_with")return `endsWith(${t}, "${o.value}")`;let d=/^\d+(\.\d+)?$/.test(o.value)?o.value:`"${o.value}"`;return `${t} ${i} ${d}`});if(a.length===0)return "";let n=a.join(e.logic==="and"?" && ":" || ");return r==="show"?`show(${n})`:r==="hide"?`hide(${n})`:r==="validate"?`ConditionEval(${n})`:n}function Wt(e){return {logic:"and",rules:[]}}var De={padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none"},Ve={width:"100%",padding:"4px 6px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"},mo={padding:"2px 8px",borderRadius:"10px",border:"none",fontSize:"10px",fontWeight:600,cursor:"pointer"};function ho({open:e,onClose:r,conditions:a,onApply:n,availableVariables:o,rosterContext:t}){let i=R(),d=useRef(null),l=useRef(null),[s,c]=useState(a),[g,v]=useState("visual");useEffect(()=>{e&&(c(a),v("visual"));},[e,a]),useEffect(()=>{if(!e)return;l.current=document.activeElement;let m=setTimeout(()=>{d.current?.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')?.focus();},0),b=u=>{if(u.key==="Escape"){u.stopPropagation(),r();return}if(u.key!=="Tab"||!d.current)return;let f=Array.from(d.current.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(y=>y.offsetParent!==null);if(f.length===0)return;let x=f[0],T=f[f.length-1],w=document.activeElement;u.shiftKey&&w===x?(u.preventDefault(),T.focus()):!u.shiftKey&&w===T&&(u.preventDefault(),x.focus());};return window.addEventListener("keydown",b),()=>{clearTimeout(m),window.removeEventListener("keydown",b),l.current?.focus?.();}},[e,r]);let p=useCallback(()=>{n(s),r();},[s,n,r]);return e?jsx("div",{"data-testid":"conditions-modal-overlay","aria-hidden":"false",style:{position:"fixed",inset:0,zIndex:1e3,backgroundColor:"rgba(15, 23, 42, 0.55)",display:"flex",alignItems:"center",justifyContent:"center",padding:"24px"},children:jsxs("div",{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":"conditions-modal-title","data-testid":"conditions-modal",style:{backgroundColor:"#fff",borderRadius:"12px",boxShadow:"0 24px 48px rgba(0,0,0,0.25)",width:"100%",maxWidth:"720px",maxHeight:"calc(100vh - 48px)",display:"flex",flexDirection:"column",overflow:"hidden",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"14px 20px",borderBottom:"1px solid #e2e8f0"},children:[jsx("h2",{id:"conditions-modal-title",style:{margin:0,fontSize:"16px",fontWeight:600,color:"#0f172a"},children:i.conditionBuilder.modalTitle(s.length)}),jsx("button",{type:"button",onClick:r,"data-testid":"conditions-modal-close","aria-label":i.conditionBuilder.closeButton,style:{border:"none",background:"none",cursor:"pointer",fontSize:"20px",color:"#64748b",padding:"4px 8px",borderRadius:"6px"},children:"\u2715"})]}),jsxs("div",{style:{display:"flex",gap:"4px",padding:"12px 20px 0",borderBottom:"1px solid #f1f5f9"},children:[jsx(Co,{active:g==="visual",label:i.conditionBuilder.modeVisual,testId:"conditions-modal-mode-visual",onClick:()=>v("visual")}),jsx(Co,{active:g==="manual",label:i.conditionBuilder.modeManual,testId:"conditions-modal-mode-manual",onClick:()=>v("manual")})]}),jsxs("div",{style:{flex:1,overflowY:"auto",padding:"16px 20px"},children:[g==="visual"?jsx(Ee,{conditions:s,onChange:c,availableVariables:o,rosterContext:t}):jsx(Gt,{conditions:s,onChange:c}),jsx(Xt,{conditions:s,title:i.conditionBuilder.formulasSummary,empty:i.conditionBuilder.noConditions})]}),jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:"8px",padding:"12px 20px",borderTop:"1px solid #e2e8f0"},children:[jsx("button",{type:"button",onClick:r,"data-testid":"conditions-modal-cancel",style:{padding:"8px 16px",border:"1px solid #cbd5e1",borderRadius:"6px",backgroundColor:"#fff",color:"#334155",fontSize:"13px",fontWeight:500,cursor:"pointer"},children:i.conditionBuilder.cancelButton}),jsx("button",{type:"button",onClick:p,"data-testid":"conditions-modal-apply",style:{padding:"8px 16px",border:"none",borderRadius:"6px",backgroundColor:"#2563eb",color:"#fff",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:i.conditionBuilder.applyButton})]})]})}):null}function Co({active:e,label:r,testId:a,onClick:n}){return jsx("button",{type:"button",onClick:n,"data-testid":a,"aria-pressed":e,style:{padding:"8px 14px",border:"none",backgroundColor:"transparent",color:e?"#2563eb":"#64748b",fontWeight:e?600:500,fontSize:"13px",cursor:"pointer",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:e?"#2563eb":"transparent",marginBottom:"-1px"},children:r})}function Gt({conditions:e,onChange:r}){let a=R();if(e.length===0)return jsx("div",{style:{padding:"12px",color:"#94a3b8",fontSize:"13px",textAlign:"center",fontStyle:"italic"},children:a.conditionBuilder.noConditions});let n=(t,i)=>{r(e.map(d=>d.id===t?{...d,expression:i}:d));},o=t=>t.includes("ConditionEval(")||t.includes("||")||/show\(|hide\(|setValue\(/.test(t)===false||t.split("&&").length>2;return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"14px"},children:[jsx("p",{style:{margin:0,fontSize:"11px",color:"#64748b"},children:a.conditionBuilder.manualHelp}),e.map((t,i)=>jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsxs("label",{style:{fontSize:"11px",fontWeight:600,color:"#64748b"},children:["#",i+1," \u2014 ",a.conditionBuilder.actions[t.action]??t.action]}),jsx(Jt,{value:t.expression,onChange:d=>n(t.id,d),placeholder:a.conditionBuilder.manualPlaceholder,testId:`conditions-modal-manual-${t.id}`}),o(t.expression)&&jsxs("p",{"data-testid":`conditions-modal-manual-warning-${t.id}`,style:{margin:0,fontSize:"11px",color:"#92400e",backgroundColor:"#fffbeb",border:"1px solid #fde68a",padding:"6px 8px",borderRadius:"4px"},children:["\u26A0 ",a.conditionBuilder.manualWarning]})]},t.id))]})}var jt={function:"#2563eb",variable:"#ea580c",operator:"#9333ea",string:"#16a34a",number:"#0891b2",plain:"inherit",identifier:"inherit"},Kt=new Set(["show","hide","setValue","validate","require","readonly","ConditionEval","jump","contains","startsWith","endsWith","isEmpty","isNotEmpty","not_contains","in","between","regex"]);function Yt(e){let r=[],a=0;for(;a<e.length;){let n=e[a];if(n==='"'||n==="'"){let o=a+1;for(;o<e.length&&e[o]!==n;)e[o]==="\\"&&o++,o++;r.push({type:"string",text:e.slice(a,Math.min(o+1,e.length))}),a=o+1;continue}if(n==="$"&&e[a+1]==="{"){let o=a+2;for(;o<e.length&&e[o]!=="}";)o++;r.push({type:"variable",text:e.slice(a,Math.min(o+1,e.length))}),a=o+1;continue}if(/[a-zA-Z_]/.test(n)){let o=a;for(;o<e.length&&/[a-zA-Z0-9_]/.test(e[o]);)o++;let t=e.slice(a,o);r.push({type:Kt.has(t)?"function":"identifier",text:t}),a=o;continue}if(/\d/.test(n)){let o=a;for(;o<e.length&&/[\d.]/.test(e[o]);)o++;r.push({type:"number",text:e.slice(a,o)}),a=o;continue}if("=!<>&|".includes(n)){let o=e.slice(a,a+2);if(["==","!=","<=",">=","&&","||"].includes(o)){r.push({type:"operator",text:o}),a+=2;continue}r.push({type:"operator",text:n}),a++;continue}r.push({type:"plain",text:n}),a++;}return r}function Jt({value:e,onChange:r,placeholder:a,testId:n}){let o=useRef(null),t=useRef(null),i=useMemo(()=>Yt(e),[e]),d=()=>{!o.current||!t.current||(t.current.scrollTop=o.current.scrollTop,t.current.scrollLeft=o.current.scrollLeft);},l={position:"absolute",top:0,left:0,width:"100%",height:"100%",margin:0,padding:"8px 10px",border:"none",fontFamily:'ui-monospace, "SF Mono", Menlo, Consolas, monospace',fontSize:"12.5px",lineHeight:"20px",whiteSpace:"pre-wrap",wordBreak:"break-word",boxSizing:"border-box"};return jsxs("div",{style:{position:"relative",minHeight:"60px",border:"1px solid #cbd5e1",borderRadius:"6px",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx("div",{ref:t,"aria-hidden":"true",style:{...l,color:"#0f172a",overflow:"auto",pointerEvents:"none"},children:i.length===0?jsx("span",{style:{color:"#94a3b8"},children:a}):jsxs(Fragment,{children:[i.map((s,c)=>jsx("span",{style:{color:jt[s.type]},children:s.text},c)),jsx("span",{children:"\u200B"})]})}),jsx("textarea",{ref:o,value:e,onChange:s=>r(s.target.value),onScroll:d,placeholder:a,"data-testid":n,spellCheck:false,style:{...l,color:"transparent",caretColor:"#0f172a",backgroundColor:"transparent",resize:"vertical",outline:"none",overflow:"auto"}})]})}function Xt({conditions:e,title:r,empty:a}){return jsxs("div",{style:{marginTop:"16px",borderTop:"1px solid #e2e8f0",paddingTop:"12px"},children:[jsx("h3",{style:{margin:"0 0 8px",fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:r}),e.length===0?jsx("p",{style:{margin:0,fontSize:"12px",color:"#94a3b8",fontStyle:"italic"},children:a}):jsx("ul",{"data-testid":"conditions-modal-summary",style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:"4px"},children:e.map(n=>jsx("li",{style:{fontFamily:'ui-monospace, "SF Mono", Menlo, Consolas, monospace',fontSize:"11.5px",color:"#0f172a",backgroundColor:"#f1f5f9",padding:"4px 8px",borderRadius:"4px",wordBreak:"break-all"},children:n.expression||"\u2205"},n.id))})]})}function ze({dataSourceId:e,dependencies:r={},availableConnectors:a,availableVariables:n,onConnectorChange:o,onDependenciesChange:t}){let i=R(),[d,l]=useState(""),s=a.find(m=>m.id===e),c=Object.entries(r),g=()=>{d.trim()&&(t({...r,[d.trim()]:""}),l(""));},v=m=>{let b={...r};delete b[m],t(b);},p=(m,b)=>{t({...r,[m]: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:i.dataSource.title}),jsxs("div",{children:[jsx("label",{style:er,children:i.dataSource.connector}),jsxs("select",{value:e??"",onChange:m=>{let b=m.target.value||void 0;o(b),b||t({});},style:So,children:[jsx("option",{value:"",children:i.dataSource.none}),a.map(m=>jsxs("option",{value:m.id,children:[m.name," (",m.id,")"]},m.id))]})]}),s&&jsxs("div",{style:{fontSize:"11px",color:"#166534",padding:"4px 6px",backgroundColor:"#dcfce7",borderRadius:"4px"},children:[i.dataSource.connectedTo," ",jsx("strong",{children:s.name})]}),e&&jsxs(Fragment,{children:[jsx("div",{style:{fontSize:"11px",fontWeight:500,color:"#166534"},children:i.dataSource.dependencies(c.length)}),c.map(([m,b])=>jsxs("div",{style:{display:"flex",gap:"4px",alignItems:"center"},children:[jsx("span",{style:{fontSize:"11px",color:"#334155",minWidth:"60px",fontFamily:"monospace"},children:m}),jsx("span",{style:{fontSize:"11px",color:"#94a3b8"},children:"\u2192"}),jsxs("select",{value:b,onChange:u=>p(m,u.target.value),style:{...So,flex:1},children:[jsx("option",{value:"",children:i.dataSource.selectVariable}),n.map(u=>jsxs("option",{value:u.code,children:[u.name," (",u.code,")"]},u.code))]}),jsx("button",{type:"button",onClick:()=>v(m),style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"14px"},children:"\xD7"})]},m)),jsxs("div",{style:{display:"flex",gap:"4px"},children:[jsx("input",{type:"text",value:d,onChange:m=>l(m.target.value),placeholder:i.dataSource.dependencyKeyPlaceholder,style:{...or,flex:1},onKeyDown:m=>m.key==="Enter"&&g()}),jsx("button",{type:"button",onClick:g,disabled:!d.trim(),style:{padding:"4px 8px",border:"1px solid #cbd5e1",borderRadius:"4px",backgroundColor:"#fff",color:"#2563eb",fontSize:"11px",cursor:"pointer",opacity:d.trim()?1:.5},children:i.dataSource.addDependency})]})]})]})}var er={fontSize:"11px",fontWeight:500,color:"#166534",display:"block",marginBottom:"2px"},So={width:"100%",padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",backgroundColor:"#fff"},or={padding:"4px 6px",border:"1px solid #bbf7d0",borderRadius:"4px",fontSize:"12px",color:"#334155",outline:"none",boxSizing:"border-box"};function nr(e){return e.normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"")}function Ro(e){return typeof e=="string"?e:e==null?"":String(e)}function Ae(e,r){if(e==null)return "";if(typeof e=="string")return e;let a=e[r];if(typeof a=="string"&&a!=="")return a;for(let n of Object.values(e))if(typeof n=="string"&&n!=="")return n;return ""}function Io({options:e,onChange:r,disabled:a}){let n=R(),t=S(b=>b.form).langConfig??DEFAULT_LANG_CONFIG,i=(b,u)=>{let f=e.map((x,T)=>T===b?{...x,...u}:x);r(f);},d=(b,u)=>{let f=e[b],x=Ro(f.value),T=Ae(f.label,t.defaultLang),w=Ae(u,t.defaultLang);x===""&&T===""&&w!==""?i(b,{label:u,value:nr(w)}):i(b,{label:u});},l=(b,u)=>{i(b,{value:u});},s=()=>{r([...e,{label:"",value:""}]);},c=b=>{r(e.filter((u,f)=>f!==b));},g={display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},v={flex:1,padding:"6px 8px",borderRadius:"4px",fontSize:"13px",color:"#000",outline:"none"},p="1px solid #e2e8f0",m="1px solid #ef4444";return jsxs("div",{"data-testid":"options-editor",children:[jsx("label",{style:g,children:n.optionsEditor.optionsCount(e.length)}),e.length===0&&jsx("div",{"data-testid":"options-editor-empty",style:{fontSize:"12px",color:"#94a3b8",marginBottom:"8px"},children:n.optionsEditor.noOptions}),jsx("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:e.map((b,u)=>{let f=Ae(b.label,t.defaultLang),x=Ro(b.value),T=f.trim()==="",w=x.trim()==="";return jsxs("div",{"data-testid":`option-row-${u}`,style:{display:"flex",alignItems:"flex-start",gap:"6px"},children:[jsx("div",{"aria-label":n.optionsEditor.optionLabelAria(u),"data-testid":`option-label-${u}`,style:{flex:1,border:T?m:p,borderRadius:"4px"},children:jsx(be,{value:b.label,onChange:y=>d(u,y),availableLangs:t.availableLangs,defaultLang:t.defaultLang,placeholder:n.optionsEditor.optionLabelPlaceholder,disabled:a,testIdPrefix:`option-label-input-${u}`})}),jsx("input",{type:"text","aria-label":n.optionsEditor.optionValueAria(u),"data-testid":`option-value-${u}`,value:x,placeholder:n.optionsEditor.optionValuePlaceholder,disabled:a,onChange:y=>l(u,y.target.value),style:{...v,border:w?m:p,maxWidth:"40%"}}),jsx("button",{type:"button","aria-label":n.optionsEditor.removeOptionAria(u),"data-testid":`option-remove-${u}`,onClick:()=>c(u),disabled:a,style:{width:"24px",height:"24px",border:"1px solid #e2e8f0",borderRadius:"4px",backgroundColor:"#fff",color:"#64748b",cursor:a?"not-allowed":"pointer",lineHeight:1,fontSize:"14px"},children:"\xD7"})]},u)})}),jsx("button",{type:"button","data-testid":"options-editor-add",onClick:s,disabled:a,style:{marginTop:"8px",padding:"6px 10px",border:"1px dashed #94a3b8",borderRadius:"4px",backgroundColor:"transparent",color:"#2563eb",fontSize:"12px",cursor:a?"not-allowed":"pointer"},children:n.optionsEditor.addOption})]})}var dr=new Set(["type","description","placeholder","isRequired","isReadonly","isHidden","options","validationRules","conditions","expression","dataSourceId","dataSourceDependencies","style","metadata"]);function $e(e){return e==="type"?"variableType":e}function wo({variable:e,pageCode:r,rosterCode:a,availableConnectors:n=[]}){let {form:o,updateVariable:t,setVariableOverride:i,resetVariableOverride:d,availableTemplates:l}=S(),s=R(),[c,g]=useState(false),v=useMemo(()=>[{value:"text",label:s.toolbox.types.text},{value:"textarea",label:s.toolbox.types.textarea},{value:"number",label:s.toolbox.types.number},{value:"date",label:s.toolbox.types.date},{value:"datetime",label:s.toolbox.types.datetime},{value:"time",label:s.toolbox.types.time},{value:"select",label:s.toolbox.types.select},{value:"multiselect",label:s.toolbox.types.multiselect},{value:"radio",label:s.toolbox.types.radio},{value:"checkbox",label:s.toolbox.types.checkbox},{value:"file",label:s.toolbox.types.file},{value:"gps",label:s.toolbox.types.gps},{value:"rating",label:s.toolbox.types.rating},{value:"calculated",label:s.toolbox.types.calculated},{value:"hidden",label:s.toolbox.types.hidden},{value:"label",label:s.toolbox.types.label}],[s]),p=!!e.templateId;p?l.find(y=>y.id===e.templateId):void 0;let b=o.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,u=y=>{if(!p){t(r,e.code,y,a);return}let E={},C=false;for(let[Y,se]of Object.entries(y))if(dr.has(Y)){let de=$e(Y);i(r,e.code,de,se,a);}else E[Y]=se,C=true;C&&t(r,e.code,E,a);},f=y=>{if(!p)return false;let E=$e(y);return Object.prototype.hasOwnProperty.call(e.templateOverrides??{},E)},x=y=>{p&&d(r,e.code,$e(y),a);},T=y=>resolveLabel(y,b,b),w=o.pages.flatMap(y=>[...getPageVariables(y).map(E=>({code:E.code,name:T(E.name)})),...getPageRosters(y).flatMap(E=>E.variables.map(C=>({code:C.code,name:T(C.name)})))]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[p&&jsx(pr,{variable:e,templateCodeLabel:s.properties.templateCode,templateNameLabel:s.properties.templateName,bannerTitle:s.properties.linkedTemplate,defaultLang:b}),p?jsx(cr,{label:s.properties.templateName,value:e.name,defaultLang:b,testId:"variable-name-readonly"}):jsx(M,{label:s.properties.name,value:e.name,onChange:y=>u({name:y}),testIdPrefix:"variable-name"}),jsx(N,{label:p?s.properties.templateCode:s.properties.code,value:e.code,onChange:()=>{},readOnly:true}),jsx(X,{isOverridden:f("description"),onReset:()=>x("description"),resetLabel:s.properties.resetOverride,children:jsx(M,{label:s.properties.description,value:e.description,onChange:y=>u({description:y}),testIdPrefix:"variable-description"})}),jsx(X,{isOverridden:f("placeholder"),onReset:()=>x("placeholder"),resetLabel:s.properties.resetOverride,children:jsx(M,{label:s.properties.placeholder,value:e.placeholder,onChange:y=>u({placeholder:y}),testIdPrefix:"variable-placeholder"})}),jsx(X,{isOverridden:f("type"),onReset:()=>x("type"),resetLabel:s.properties.resetOverride,children:jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:s.properties.type}),jsx("select",{value:e.type,onChange:y=>u({type:y.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:v.map(y=>jsx("option",{value:y.value,children:y.label},y.value))})]})}),e.type==="rating"&&jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:s.properties.ratingStyle}),jsxs("select",{value:e.metadata?.ratingStyle??"star",onChange:y=>u({metadata:{...e.metadata,ratingStyle:y.target.value}}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"star",children:s.properties.ratingStyles.star}),jsx("option",{value:"number",children:s.properties.ratingStyles.number}),jsx("option",{value:"color",children:s.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:s.properties.layout}),jsx(Se,{label:s.properties.startNewRow,checked:e.startWithNewLine!==false,onChange:y=>u({startWithNewLine:y?void 0:false})}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"2px"},children:s.properties.columnSpan}),jsxs("select",{value:e.colSpan??"auto",onChange:y=>u({colSpan:y.target.value==="auto"?void 0:parseInt(y.target.value)}),style:{width:"100%",padding:"4px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:[jsx("option",{value:"auto",children:s.properties.columnSpanAuto}),[1,2,3,4,5,6,7,8,9,10,11,12].map(y=>jsxs("option",{value:y,children:[y,"/12",y===6?s.properties.columnSpanHalf:y===4?s.properties.columnSpanThird:y===12?s.properties.columnSpanFull:""]},y))]})]})]}),jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsx(X,{isOverridden:f("isRequired"),onReset:()=>x("isRequired"),resetLabel:s.properties.resetOverride,inline:true,children:jsx(Se,{label:s.properties.required,checked:e.isRequired,onChange:y=>u({isRequired:y})})}),jsx(X,{isOverridden:f("isReadonly"),onReset:()=>x("isReadonly"),resetLabel:s.properties.resetOverride,inline:true,children:jsx(Se,{label:s.properties.readonly,checked:e.isReadonly,onChange:y=>u({isReadonly:y})})}),jsx(X,{isOverridden:f("isHidden"),onReset:()=>x("isHidden"),resetLabel:s.properties.resetOverride,inline:true,children:jsx(Se,{label:s.properties.hidden,checked:e.isHidden,onChange:y=>u({isHidden:y})})})]}),e.type==="calculated"&&jsx(X,{isOverridden:f("expression"),onReset:()=>x("expression"),resetLabel:s.properties.resetOverride,children:jsx(N,{label:s.properties.expression,value:e.expression??"",onChange:y=>u({expression:y||void 0}),multiline:true})}),["select","multiselect","radio"].includes(e.type)&&jsx(ze,{dataSourceId:e.dataSourceId,dependencies:e.dataSourceDependencies,availableConnectors:n,availableVariables:w,onConnectorChange:y=>u({dataSourceId:y}),onDependenciesChange:y=>u({dataSourceDependencies:Object.keys(y).length>0?y:void 0})}),["select","multiselect","radio","checkbox"].includes(e.type)&&!e.dataSourceId&&jsx(X,{isOverridden:f("options"),onReset:()=>x("options"),resetLabel:s.properties.resetOverride,children:jsx(Io,{options:e.options??[],onChange:y=>u({options:y})})}),jsx(X,{isOverridden:f("conditions"),onReset:()=>x("conditions"),resetLabel:s.properties.resetOverride,children:jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"6px"},children:[jsx("label",{style:{fontSize:"11px",fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.5px"},children:s.conditionBuilder.conditionsCount((e.conditions??[]).length)}),jsxs("button",{type:"button","data-testid":"conditions-modal-open",onClick:()=>g(true),style:{padding:"8px 14px",border:"1px solid #cbd5e1",borderRadius:"6px",backgroundColor:"#fff",color:"#1e293b",fontSize:"13px",fontWeight:500,cursor:"pointer",textAlign:"left"},children:["\u2699 ",s.conditionBuilder.configureButton((e.conditions??[]).length)]}),(e.conditions??[]).length>0&&jsx("ul",{"data-testid":"conditions-preview",style:{margin:0,padding:0,listStyle:"none",display:"flex",flexDirection:"column",gap:"3px"},children:(e.conditions??[]).map(y=>jsx("li",{style:{fontFamily:'ui-monospace, "SF Mono", Menlo, Consolas, monospace',fontSize:"11.5px",color:"#0f172a",backgroundColor:"#f1f5f9",padding:"4px 8px",borderRadius:"4px",wordBreak:"break-all"},children:y.expression||"\u2205"},y.id))})]})}),jsx(ho,{open:c,onClose:()=>g(false),conditions:e.conditions??[],onApply:y=>u({conditions:y}),availableVariables:w,rosterContext:(()=>{if(!a)return;let y=o.pages.find(C=>C.code===r),E=y?getPageRosters(y).find(C=>C.code===a):void 0;if(E)return {variables:E.variables.map(C=>({code:C.code,order:C.order})),currentVariableCode:e.code,currentVariableOrder:e.order}})()})]})}function pr({variable:e,templateCodeLabel:r,templateNameLabel:a,bannerTitle:n,defaultLang:o}){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:n})]}),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:[a," : ",resolveLabel(e.name,o,o)]})]})}function cr({label:e,value:r,defaultLang:a,testId:n}){return jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:e}),jsx("div",{"data-testid":n,style:{padding:"6px 8px",backgroundColor:"#f1f5f9",color:"#64748b",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px",cursor:"not-allowed",userSelect:"text"},children:resolveLabel(r,a,a)})]})}function X({isOverridden:e,onReset:r,resetLabel:a,children:n,inline:o=false}){if(!e)return jsx(Fragment,{children:n});let t=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 ",a]});return o?jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("div",{style:{flex:1},children:n}),t]}):jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:[n,jsx("div",{style:{display:"flex",justifyContent:"flex-end"},children:t})]})}function Se({label:e,checked:r,onChange:a}){return jsxs("label",{style:{display:"flex",alignItems:"center",gap:"8px",fontSize:"13px",color:"#334155",cursor:"pointer"},children:[jsx("input",{type:"checkbox",checked:r,onChange:n=>a(n.target.checked)}),e]})}function Po({roster:e,pageCode:r}){let{updateRoster:a}=S(),n=R(),o=useMemo(()=>[{value:"check",label:n.properties.rosterTypes.check},{value:"list",label:n.properties.rosterTypes.list},{value:"collection",label:n.properties.rosterTypes.collection},{value:"collection_extend",label:n.properties.rosterTypes.collection_extend}],[n]);return jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"12px"},children:[jsx(M,{label:n.properties.name,value:e.name,onChange:t=>a(r,e.code,{name:t}),testIdPrefix:"roster-name"}),jsx(N,{label:n.properties.code,value:e.code,onChange:()=>{}}),jsxs("div",{children:[jsx("label",{style:{display:"block",fontSize:"12px",fontWeight:500,color:"#64748b",marginBottom:"4px"},children:n.properties.rosterType}),jsx("select",{value:e.rosterType,onChange:t=>a(r,e.code,{rosterType:t.target.value}),style:{width:"100%",padding:"6px 8px",border:"1px solid #e2e8f0",borderRadius:"4px",fontSize:"13px"},children:o.map(t=>jsx("option",{value:t.value,children:t.label},t.value))})]}),jsx(N,{label:n.properties.pilotVariableCode,value:e.pilotVariableCode??"",onChange:t=>a(r,e.code,{pilotVariableCode:t||void 0})}),jsx("div",{style:{fontSize:"12px",color:"#94a3b8"},children:n.properties.rosterSummary(e.variables.length,e.options?.length??0)})]})}function Be({availableConnectors:e=[]}){let{selection:r,form:a}=S(),n=R(),o=(()=>{switch(r.type){case "form":return jsx(ce,{});case "page":{let t=a.pages.find(i=>i.code===r.pageCode);return t?jsx(fo,{page:t}):jsx(ce,{})}case "roster":{let t=a.pages.find(d=>d.code===r.pageCode),i=t?getPageRosters(t).find(d=>d.code===r.rosterCode):void 0;return !t||!i?jsx(ce,{}):jsx(Po,{roster:i,pageCode:t.code})}case "variable":{let t=a.pages.find(s=>s.code===r.pageCode);if(!t)return jsx(ce,{});let i=r.rosterCode?getPageRosters(t).find(s=>s.code===r.rosterCode):void 0,l=(i?i.variables:getPageVariables(t)).find(s=>s.code===r.variableCode);return l?jsx(wo,{variable:l,pageCode:t.code,rosterCode:r.rosterCode,availableConnectors:e}):jsx(ce,{})}}})();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:n.properties.title}),jsx("div",{style:{padding:"16px"},children:o})]})}function xr({theme:e,dataSources:r,adapter:a,initialForm:n,formId:o,onChange:t,onSave:i,labels:d,PreviewComponent:l,ToolboxComponent:s,CanvasComponent:c,Wrapper:g}){let{form:v,view:p,setForm:m,setAdapter:b,load:u,setAvailableTemplates:f}=S(),x=useMemo(()=>ye(Q,d),[d]);useEffect(()=>{a&&b(a);},[a,b]),useEffect(()=>{n?m(n):o&&a?.loadForm&&u(o);},[n,o]),useEffect(()=>{let de=v.scopeId;if(!de||!a?.loadTemplates){f([]);return}let Z=false;return a.loadTemplates(de).then(zo=>{Z||f(zo);}).catch(()=>{Z||f([]);}),()=>{Z=true;}},[v.scopeId,a,f]);let T=useRef(t),w=useRef(true);T.current=t,useEffect(()=>{if(w.current){w.current=false;return}T.current?.(v);},[v]);let y=s??xe,E=c??ve,C=useRef(false);g&&!C.current&&typeof console<"u"&&(C.current=true,console.warn("[@msbci/form-editor] FormEditor.Wrapper is deprecated \u2014 drag & drop is now provided by the internal DndManager. The custom Wrapper will still be applied AROUND DndManager, but you should remove it."));let Y=g??gr.Fragment,se=jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",fontFamily:"system-ui, -apple-system, sans-serif"},children:[jsx(Ie,{onSave:i}),jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[p==="canvas"&&jsxs(Fragment,{children:[jsx(y,{}),jsx(E,{}),jsx(Be,{availableConnectors:r?Object.values(r):[]})]}),p==="preview"&&l&&jsx("div",{style:{flex:1,overflow:"auto"},children:jsx(l,{formSchema:v,theme:e,dataSources:r,mode:"fill"})}),p==="preview"&&!l&&jsx("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#94a3b8",fontSize:"14px"},children:x.formEditor.previewMissing}),p==="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(ge,{labels:x,children:jsx(Y,{children:jsx(Pe,{children:se})})})}function Rr(){let e=R(),[r,a]=useState("fields"),[n,o]=useState(""),{form:t,selection:i,addVariable:d,addRoster:l,addVariableFromTemplate:s,availableTemplates:c}=S(),g=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=i.type==="page"||i.type==="variable"||i.type==="roster"?i.pageCode:t.pages[0]?.code,p=u=>{if(!v||!t.pages.find(T=>T.code===v))return;if(u.kind==="roster"){let T=`ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`;l(v,{id:`roster-${Date.now()}`,code:T,name:e.canvas.newRosterName,rosterType:u.rosterType,order:0,variables:[]});return}let x=`${u.type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`;d(v,{id:`var-${Date.now()}`,code:x,name:e.canvas.newVariableName(u.label),type:u.type,order:0,isRequired:false,isReadonly:false,isHidden:false});},m=u=>{v&&s(v,u);},b=g.map(u=>({...u,items:u.items.filter(f=>f.label.toLowerCase().includes(n.toLowerCase()))})).filter(u=>u.items.length>0);return jsxs("div",{style:{width:"220px",borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",backgroundColor:"#f8fafc",overflow:"hidden"},children:[jsx(Tr,{tab:r,setTab:a,labels:e}),jsx("div",{style:{padding:"12px",borderBottom:"1px solid #e2e8f0"},children:jsx("input",{type:"text",placeholder:e.toolbox.searchPlaceholder,value:n,onChange:u=>o(u.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(u=>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:u.label}),u.items.map(f=>{let x=f.kind==="roster"?`roster-${f.rosterType}`:`var-${f.type}`,T=f.kind==="roster"?`toolbox-roster-${f.rosterType}`:`toolbox-variable-${f.type}`;return jsxs("div",{"data-testid":T,onClick:()=>p(f),style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 8px",marginBottom:"2px",borderRadius:"6px",cursor:"pointer",fontSize:"13px",color:"#334155",userSelect:"none"},onMouseEnter:w=>{w.currentTarget.style.backgroundColor="#e2e8f0";},onMouseLeave:w=>{w.currentTarget.style.backgroundColor="transparent";},children:[jsx("span",{style:{width:"20px",textAlign:"center",fontSize:"14px"},children:f.icon}),jsx("span",{children:f.label})]},x)})]},u.label)),r==="variables"&&jsx(Ir,{templates:c,scopeId:t.scopeId,search:n,onAdd:m,defaultLang:t.langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang,labels:e})]})]})}function Tr({tab:e,setTab:r,labels:a}){let n={flex:1,padding:"8px 0",fontSize:"12px",fontWeight:500,textAlign:"center",cursor:"pointer",userSelect:"none",color:"#64748b",borderBottomWidth:"2px",borderBottomStyle:"solid",borderBottomColor:"transparent"},o={...n,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"?o:n,children:a.toolbox.tabFields}),jsx("div",{role:"tab","aria-selected":e==="variables","data-testid":"toolbox-tab-variables",onClick:()=>r("variables"),style:e==="variables"?o:n,children:a.toolbox.tabVariables})]})}function Ir({templates:e,scopeId:r,search:a,onAdd:n,defaultLang:o,labels:t}){let i=s=>jsx("div",{"data-testid":"toolbox-variables-empty",style:{padding:"14px",color:"#94a3b8",fontSize:"12px",textAlign:"center",fontStyle:"italic"},children:s});if(!r)return i(t.toolbox.noScope);if(e.length===0)return i(t.toolbox.noTemplates);let d=a.toLowerCase(),l=e.filter(s=>{if(!d)return true;let c=s.code.toLowerCase().includes(d),g=Vo(s.name,o).toLowerCase().includes(d);return c||g}).slice().sort((s,c)=>s.code.localeCompare(c.code));return l.length===0?i(t.toolbox.noTemplates):jsx("div",{style:{display:"flex",flexDirection:"column",gap:"4px"},children:l.map(s=>jsxs("div",{"data-testid":`toolbox-template-${s.code}`,onClick:()=>n(s),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:s.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:s.code}),jsx("span",{style:{fontSize:"12px",color:"#1e293b",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Vo(s.name,o)})]})]},s.id))})}function Vo(e,r){return resolveLabel(e,r,r)}function We(){let r=S(a=>a.form).langConfig?.defaultLang??DEFAULT_LANG_CONFIG.defaultLang;return a=>resolveLabel(a,r,r)}function Fr(e){let r=e.slice().sort((o,t)=>o.order-t.order),a=[],n=null;for(let o of r){if(isPageRoster(o)){n&&(a.push({kind:"variables",variables:n}),n=null),a.push({kind:"roster",roster:o});continue}let t=o;t.startWithNewLine===false&&n&&n.length>0?n.push(t):(n&&a.push({kind:"variables",variables:n}),n=[t]);}return n&&a.push({kind:"variables",variables:n}),a}function Dr(){let{form:e}=S(),r=R();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((a,n)=>a.order-n.order).map(a=>jsx(Vr,{page:a},a.code))})}function Vr({page:e}){let{selection:r,select:a,removePage:n}=S(),o=R(),t=We(),i=r.type==="page"&&r.pageCode===e.code,d=e.items??[...getPageVariables(e),...e.rosters??[]],l=d.filter(isPageVariable).length,s=d.filter(isPageRoster).length,c=Fr(d);return jsxs("div",{style:{marginBottom:"16px",border:`2px solid ${i?"#2563eb":"#e2e8f0"}`,borderRadius:"8px",overflow:"hidden"},children:[jsxs("div",{onClick:()=>a({type:"page",pageCode:e.code}),style:{padding:"10px 14px",backgroundColor:i?"#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:t(e.name)||o.canvas.unnamedPage}),e.isRepeatable&&jsx("span",{style:{fontSize:"10px",padding:"1px 6px",borderRadius:"4px",backgroundColor:"#dbeafe",color:"#2563eb",fontWeight:500},children:o.canvas.repeatable})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[jsx("span",{style:{fontSize:"12px",color:"#94a3b8"},children:o.canvas.fieldsRostersCount(l,s)}),jsx("button",{onClick:g=>{g.stopPropagation(),n(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((g,v)=>g.kind==="roster"?jsx(Er,{roster:g.roster,pageCode:e.code},`r-${g.roster.code}`):g.variables.length===1?jsx(Me,{variable:g.variables[0],pageCode:e.code},g.variables[0].code):jsx("div",{style:{display:"flex",gap:"2px",backgroundColor:"#f0f4ff",borderLeft:"2px solid #c7d2fe",margin:"1px 0"},children:g.variables.map(p=>jsx("div",{style:{flex:p.colSpan?`0 0 ${p.colSpan/12*100}%`:"1 1 0%",minWidth:0},children:jsx(Me,{variable:p,pageCode:e.code})},p.code))},`row-${v}`)),d.length===0&&jsx("div",{style:{padding:"12px 14px",color:"#94a3b8",fontSize:"12px",fontStyle:"italic"},children:o.canvas.emptyStatePage})]})]})}function Me({variable:e,pageCode:r,rosterCode:a}){let{selection:n,select:o,removeVariable:t}=S(),i=R(),d=We(),l=n.type==="variable"&&n.variableCode===e.code;return jsxs("div",{onClick:s=>{s.stopPropagation(),o({type:"variable",pageCode:r,variableCode:e.code,rosterCode:a});},style:{display:"flex",alignItems:"center",gap:"8px",padding:"6px 14px",cursor:"pointer",backgroundColor:l?"#eff6ff":"transparent",borderLeft:l?"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:d(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:i.canvas.hasConditionsTitle,children:"\u26A1"}),e.dataSourceId&&jsx("span",{style:{color:"#22c55e",fontSize:"11px"},title:i.canvas.dataSourceConnectedTitle,children:"\u27F3"}),jsx("button",{onClick:s=>{s.stopPropagation(),t(r,e.code,a);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px",padding:"0 2px",opacity:.5},children:"\xD7"})]})}function Er({roster:e,pageCode:r}){let{selection:a,select:n,removeRoster:o,addVariable:t}=S(),i=R(),d=We(),l=a.type==="roster"&&a.rosterCode===e.code,s=c=>{c.stopPropagation();let g=`RV_${Date.now().toString(36).slice(-4).toUpperCase()}`;t(r,{id:`var-${Date.now()}`,code:g,name:i.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 ${l?"#2563eb":"#e2e8f0"}`,borderRadius:"6px",overflow:"hidden"},children:[jsxs("div",{onClick:c=>{c.stopPropagation(),n({type:"roster",pageCode:r,rosterCode:e.code});},style:{padding:"6px 10px",backgroundColor:l?"#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 ",d(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:[i.canvas.pilotPrefix," ",e.pilotVariableCode]})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[jsx("span",{style:{fontSize:"11px",color:"#b45309"},children:i.canvas.rosterVarsCount(e.variables.length)}),jsx("button",{onClick:c=>{c.stopPropagation(),o(r,e.code);},style:{border:"none",background:"none",color:"#ef4444",cursor:"pointer",fontSize:"12px"},children:"\xD7"})]})]}),e.variables.slice().sort((c,g)=>c.order-g.order).map(c=>jsx(Me,{variable:c,pageCode:r,rosterCode:e.code},c.code)),jsx("div",{style:{padding:"4px 10px",borderTop:"1px solid #fde68a"},children:jsx("button",{onClick:s,style:{padding:"2px 8px",borderRadius:"3px",border:"1px dashed #d4a843",backgroundColor:"transparent",color:"#92400e",fontSize:"10px",cursor:"pointer"},children:i.canvas.addFieldToRoster})})]})}export{ve as Canvas,ve as CanvasDnd,Dr as CanvasSimple,Ee as ConditionBuilder,ze as DataSourceSelector,Pe as DndManager,ge as EditorLabelsProvider,Ie as EditorToolbar,xr as FormEditor,Be as PropertiesPanel,xe as Toolbox,xe as ToolboxDnd,Rr as ToolboxSimple,io as createDragEndHandler,Q as defaultLabels,Ge as enLabels,Q as frLabels,ye as mergeLabels,S as useEditorStore,R as useLabels};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map