@msbci/form-editor 1.2.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +154 -9
- package/dist/index.d.ts +154 -9
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +16 -16
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/store/editor-store.ts","../src/i18n/fr.ts","../src/i18n/en.ts","../src/i18n/EditorLabelsContext.tsx","../src/components/dialogs/FormTypesDialog.tsx","../src/components/toolbar/EditorToolbar.tsx","../src/components/toolbox/ToolboxSimple.tsx","../src/components/canvas/CanvasSimple.tsx","../src/components/properties/LocalizedInput.tsx","../src/components/properties/FormProperties.tsx","../src/components/properties/PageProperties.tsx","../src/components/properties/ConditionBuilder.tsx","../src/components/properties/DataSourceSelector.tsx","../src/components/properties/OptionsEditor.tsx","../src/components/properties/VariableProperties.tsx","../src/components/properties/RosterProperties.tsx","../src/components/properties/PropertiesPanel.tsx","../src/components/FormEditor.tsx"],"names":["MAX_HISTORY","emptyForm","useEditorStore","create","set","get","pushHistory","description","state","entry","deepClone","history","mutateForm","mutator","newForm","form","updates","page","pageCode","p","orderedCodes","pageMap","reordered","code","index","roster","rosterCode","r","variable","variableCode","v","fromPageCode","toPageCode","newOrder","fromRosterCode","toRosterCode","movedVariable","pagesAfterRemove","pagesAfterInsert","vars","a","b","selection","view","historyIndex","nextIndex","type","newType","generateId","id","patch","t","_drop","rest","s","adapter","formId","serializeForm","json","deserializeForm","frLabels","fields","rosters","typeLabel","pages","variables","options","lang","count","rules","name","enLabels","EditorLabelsContext","createContext","EditorLabelsProvider","labels","children","jsx","useLabels","useContext","isPlainObject","value","proto","mergeLabels","base","override","mergeDeep","result","key","baseValue","overrideValue","FormTypesDialog","open","onClose","formTypes","addFormType","updateFormType","removeFormType","newName","setNewName","useState","newCode","setNewCode","editingId","setEditingId","editName","setEditName","confirmDeleteId","setConfirmDeleteId","handleAdd","startEdit","currentName","commitEdit","askDelete","confirmDelete","jsxs","e","isEditing","inUse","awaitingConfirm","EditorToolbar","onSave","onExport","onImport","updateFormMeta","setView","isDirty","isSaving","canUndo","canRedo","undo","redo","save","addPage","showFormTypesDialog","setShowFormTypesDialog","handleSave","handleAddPage","nextOrder","viewButtons","resolveLabel","DEFAULT_LANG_CONFIG","defaultLang","next","ToolbarButton","btn","onClick","label","primary","disabled","title","ToolboxSimple","search","setSearch","addVariable","GROUPS","useMemo","filtered","g","i","group","item","useCanvasResolve","groupIntoRows","sorted","rows","CanvasSimple","PageBlock","select","removePage","addRoster","resolveCanvas","isSelected","handleAddRoster","row","rowIdx","VarRow","RosterBlock","removeVariable","removeRoster","handleAddVarToRoster","flattenLocalized","keepLang","fallbackLang","exact","fb","inputBase","tabBase","valueFor","LocalizedInput","onChange","availableLangs","placeholder","multiline","testIdPrefix","langs","isMulti","activeLang","setActiveLang","handleChange","isActive","LocalizedField","langConfig","SUPPORTED_LANGS","FormProperties","totalVariables","sum","rs","PropertyField","LangConfigSection","setForm","confirmRemoveLang","setConfirmRemoveLang","sectionLabel","selectStyle","applyLangConfig","addLang","requestRemoveLang","performRemoveLang","nextLangs","l","nextDefault","nextForm","stripLangFromForm","nextLangConfig","cancelRemove","isEnabled","isDefault","isOnlyOne","removeLang","flattenToPlain","transform","copy","transformOption","opt","transformValidation","rule","transformCondition","c","transformVariable","transformRoster","transformRepeatConfig","cfg","transformPage","inputStyle","PageProperties","updatePage","OPERATOR_VALUES","ACTION_VALUES","NO_VALUE_OPERATORS","ConditionBuilder","conditions","availableVariables","rosterContext","expandedId","setExpandedId","newCondition","handleRemove","handleUpdate","condition","ConditionRuleEditor","isExpanded","onToggle","onUpdate","onRemove","setGroup","parseExpressionToGroup","syncExpression","action","expr","groupToExpression","handleActionChange","handleAddRule","newRule","newGroup","handleRemoveRule","ruleId","handleRuleChange","handleLogicChange","logic","actionLabel","pillStyle","o","validation","RosterConditionEngine","err","ConditionErrorMessageEditor","Fragment","operatorToSymbol","op","parts","varRef","sym","val","joined","expression","DataSourceSelector","dataSourceId","dependencies","availableConnectors","onConnectorChange","onDependenciesChange","newDepKey","setNewDepKey","selectedConnector","depEntries","handleAddDependency","handleRemoveDependency","handleDepVarChange","labelStyle","varCode","slugifyValue","asString","pickLabelString","OptionsEditor","updateOption","handleLabelChange","nextLabel","current","currentValue","prevPrimary","nextPrimary","handleValueChange","addOption","removeOption","_","labelBlock","valueInputBase","okBorder","errorBorder","valueStr","labelInvalid","valueInvalid","VariableProperties","updateVariable","variableTypes","update","displayName","n","allVariables","CheckboxProperty","deps","checked","RosterProperties","updateRoster","rosterTypeOptions","PropertiesPanel","content","FormEditor","theme","dataSources","initialForm","PreviewComponent","ToolboxComponent","CanvasComponent","Wrapper","setAdapter","load","resolvedLabels","useEffect","onChangeRef","useRef","isInitialRef","ActualToolbox","ActualCanvas","ActualWrapper","React"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Editor store — Zustand store managing the complete editor state.\n *\n * All form mutations go through this store, which:\n * 1. Applies the change to the form definition\n * 2. Pushes a history entry (for undo/redo)\n * 3. Marks the form as dirty\n */\n\nimport { create } from 'zustand'\nimport { serializeForm, deserializeForm, generateId } from '@msbci/form-core'\nimport type { IFormDefinition, IFormPage, IFormRoster, IFormVariable, IFormType } from '@msbci/form-core'\nimport type { EditorStore, EditorSelection, EditorView, HistoryEntry, IEditorAdapter } from './types'\nimport { deepClone } from '@msbci/form-core'\n\nconst MAX_HISTORY = 50\n\nfunction emptyForm(): IFormDefinition {\n return {\n id: '',\n code: '',\n name: 'New Form',\n version: '1.0.0',\n isPublished: false,\n pages: [],\n }\n}\n\nexport const useEditorStore = create<EditorStore>((set, get) => {\n /** Push current form state to history before a mutation */\n function pushHistory(description: string) {\n const state = get()\n const entry: HistoryEntry = {\n form: deepClone(state.form),\n description,\n timestamp: Date.now(),\n }\n\n // Truncate forward history if we're not at the end\n const history = state.history.slice(0, state.historyIndex + 1)\n history.push(entry)\n\n // Limit history size\n if (history.length > MAX_HISTORY) {\n history.shift()\n }\n\n set({ history, historyIndex: history.length - 1 })\n }\n\n /** Apply a form mutation with history tracking */\n function mutateForm(description: string, mutator: (form: IFormDefinition) => IFormDefinition) {\n pushHistory(description)\n const state = get()\n const newForm = mutator(deepClone(state.form))\n set({ form: newForm, isDirty: true })\n }\n\n return {\n // Initial state\n form: emptyForm(),\n formTypes: [],\n selection: { type: 'form' },\n view: 'canvas',\n isDirty: false,\n isSaving: false,\n history: [],\n historyIndex: -1,\n adapter: null,\n\n // --- Form CRUD ---\n\n setForm: (form) => {\n set({ form: deepClone(form), isDirty: false, history: [], historyIndex: -1, selection: { type: 'form' } })\n },\n\n updateFormMeta: (updates) => {\n mutateForm('Update form metadata', (form) => ({ ...form, ...updates }))\n },\n\n // --- Page operations ---\n\n addPage: (page) => {\n mutateForm(`Add page \"${page.name}\"`, (form) => ({\n ...form,\n pages: [...form.pages, page],\n }))\n },\n\n updatePage: (pageCode, updates) => {\n mutateForm(`Update page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => (p.code === pageCode ? { ...p, ...updates } : p)),\n }))\n },\n\n removePage: (pageCode) => {\n mutateForm(`Remove page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.filter((p) => p.code !== pageCode),\n }))\n const state = get()\n if (state.selection.type === 'page' && state.selection.pageCode === pageCode) {\n set({ selection: { type: 'form' } })\n }\n },\n\n reorderPages: (orderedCodes) => {\n mutateForm('Reorder pages', (form) => {\n const pageMap = new Map(form.pages.map((p) => [p.code, p]))\n const reordered = orderedCodes\n .map((code, index) => {\n const page = pageMap.get(code)\n return page ? { ...page, order: index } : undefined\n })\n .filter((p): p is IFormPage => p !== undefined)\n return { ...form, pages: reordered }\n })\n },\n\n // --- Roster operations ---\n\n addRoster: (pageCode, roster) => {\n mutateForm(`Add roster \"${roster.name}\" to page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode ? { ...p, rosters: [...p.rosters, roster] } : p,\n ),\n }))\n },\n\n updateRoster: (pageCode, rosterCode, updates) => {\n mutateForm(`Update roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode\n ? {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode ? { ...r, ...updates } : r,\n ),\n }\n : p,\n ),\n }))\n },\n\n removeRoster: (pageCode, rosterCode) => {\n mutateForm(`Remove roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode\n ? { ...p, rosters: p.rosters.filter((r) => r.code !== rosterCode) }\n : p,\n ),\n }))\n },\n\n // --- Variable operations ---\n\n addVariable: (pageCode, variable, rosterCode) => {\n mutateForm(`Add variable \"${variable.name}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? { ...r, variables: [...r.variables, variable] }\n : r,\n ),\n }\n }\n return { ...p, variables: [...p.variables, variable] }\n }),\n }))\n },\n\n updateVariable: (pageCode, variableCode, updates, rosterCode) => {\n mutateForm(`Update variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? {\n ...r,\n variables: r.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n : r,\n ),\n }\n }\n return {\n ...p,\n variables: p.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n }),\n }))\n },\n\n removeVariable: (pageCode, variableCode, rosterCode) => {\n mutateForm(`Remove variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? { ...r, variables: r.variables.filter((v) => v.code !== variableCode) }\n : r,\n ),\n }\n }\n return { ...p, variables: p.variables.filter((v) => v.code !== variableCode) }\n }),\n }))\n },\n\n moveVariable: (fromPageCode, toPageCode, variableCode, newOrder, fromRosterCode, toRosterCode) => {\n mutateForm(`Move variable \"${variableCode}\"`, (form) => {\n // Find and remove the variable from its source\n let movedVariable: IFormVariable | undefined\n\n const pagesAfterRemove = form.pages.map((p) => {\n if (p.code !== fromPageCode) return p\n if (fromRosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) => {\n if (r.code !== fromRosterCode) return r\n const v = r.variables.find((v) => v.code === variableCode)\n if (v) movedVariable = { ...v }\n return { ...r, variables: r.variables.filter((v) => v.code !== variableCode) }\n }),\n }\n }\n const v = p.variables.find((v) => v.code === variableCode)\n if (v) movedVariable = { ...v }\n return { ...p, variables: p.variables.filter((v) => v.code !== variableCode) }\n })\n\n if (!movedVariable) return form\n movedVariable.order = newOrder\n\n // Insert into target\n const pagesAfterInsert = pagesAfterRemove.map((p) => {\n if (p.code !== toPageCode) return p\n if (toRosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) => {\n if (r.code !== toRosterCode) return r\n const vars = [...r.variables, movedVariable!].sort((a, b) => a.order - b.order)\n return { ...r, variables: vars }\n }),\n }\n }\n const vars = [...p.variables, movedVariable!].sort((a, b) => a.order - b.order)\n return { ...p, variables: vars }\n })\n\n return { ...form, pages: pagesAfterInsert }\n })\n },\n\n // --- Selection ---\n\n select: (selection) => set({ selection }),\n clearSelection: () => set({ selection: { type: 'form' } }),\n\n // --- View ---\n\n setView: (view) => set({ view }),\n\n // --- History (Undo/Redo) ---\n\n undo: () => {\n const { history, historyIndex, form } = get()\n if (historyIndex < 0) return\n\n // Save current state as redo point if at the end\n if (historyIndex === history.length - 1) {\n const entry: HistoryEntry = {\n form: deepClone(form),\n description: 'Current state',\n timestamp: Date.now(),\n }\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n history: [...history, entry],\n })\n } else {\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n })\n }\n },\n\n redo: () => {\n const { history, historyIndex } = get()\n if (historyIndex >= history.length - 2) return\n const nextIndex = historyIndex + 2\n if (nextIndex < history.length) {\n set({\n form: deepClone(history[nextIndex]!.form),\n historyIndex: nextIndex - 1,\n isDirty: true,\n })\n }\n },\n\n canUndo: () => get().historyIndex >= 0,\n canRedo: () => {\n const { history, historyIndex } = get()\n return historyIndex < history.length - 2\n },\n\n // --- FormType CRUD ---\n\n addFormType: (type) => {\n const newType: IFormType = { ...type, id: generateId() }\n set((state) => ({ formTypes: [...state.formTypes, newType] }))\n },\n\n updateFormType: (id, patch) => {\n set((state) => ({\n formTypes: state.formTypes.map((t) => (t.id === id ? { ...t, ...patch } : t)),\n }))\n },\n\n removeFormType: (id) => {\n const state = get()\n // If the current form references this type, clear the reference first.\n if (state.form.formTypeId === id) {\n const { formTypeId: _drop, ...rest } = state.form\n set({ form: { ...(rest as IFormDefinition) } })\n }\n set((s) => ({ formTypes: s.formTypes.filter((t) => t.id !== id) }))\n },\n\n // --- Persistence ---\n\n setAdapter: (adapter) => set({ adapter }),\n\n save: async () => {\n const { adapter, form } = get()\n if (!adapter?.saveForm) return\n set({ isSaving: true })\n try {\n await adapter.saveForm(form)\n set({ isDirty: false })\n } finally {\n set({ isSaving: false })\n }\n },\n\n load: async (formId) => {\n const { adapter } = get()\n if (!adapter?.loadForm) return\n const form = await adapter.loadForm(formId)\n get().setForm(form)\n },\n\n // --- Import/Export ---\n\n exportJson: () => serializeForm(get().form),\n\n importJson: (json) => {\n const form = deserializeForm(json)\n get().setForm(form)\n },\n }\n})\n","/**\n * French labels for FormEditor — absolute default.\n *\n * Any consumer that does not pass a `labels` prop will see this content.\n */\n\nimport type { IEditorLabels } from './types'\n\nexport const frLabels: IEditorLabels = {\n toolbar: {\n formNamePlaceholder: 'Nom du formulaire',\n unsaved: 'Non sauvegardé',\n addPage: '+ Page',\n types: 'Types',\n manageFormTypesTitle: 'Gérer les types de formulaire',\n undo: 'Annuler',\n redo: 'Rétablir',\n save: 'Enregistrer',\n saving: 'Enregistrement...',\n export: 'Exporter',\n import: 'Importer',\n viewEditor: 'Éditeur',\n viewPreview: 'Aperçu',\n viewJson: 'JSON',\n },\n\n toolbox: {\n searchPlaceholder: 'Rechercher...',\n addPageFirst: 'Ajoutez d’abord une page',\n groupText: 'Texte',\n groupSelection: 'Sélection',\n groupDateTime: 'Date et heure',\n groupMedia: 'Médias',\n groupAdvanced: 'Avancé',\n types: {\n text: 'Texte court',\n textarea: 'Zone de texte',\n number: 'Nombre',\n email: 'Email',\n select: 'Liste déroulante',\n multiselect: 'Multi-sélection',\n radio: 'Boutons radio',\n checkbox: 'Cases à cocher',\n date: 'Date',\n datetime: 'Date et heure',\n time: 'Heure',\n file: 'Fichier',\n image: 'Image',\n gps: 'GPS',\n rating: 'Note (étoiles)',\n calculated: 'Calculé',\n hidden: 'Masqué',\n label: 'Étiquette',\n },\n },\n\n canvas: {\n emptyStateNoPage: 'Cliquez sur « + Page » dans la barre d’outils pour commencer',\n emptyStateNoPageDnd: 'Glissez un champ depuis la boîte à outils ou ajoutez une page pour commencer',\n emptyStatePage: 'Cliquez sur un type de champ dans la boîte à outils pour l’ajouter ici',\n unnamedPage: 'Page sans nom',\n repeatable: 'Répétable',\n fieldsRostersCount: (fields, rosters) =>\n `${fields} champ${fields > 1 ? 's' : ''} · ${rosters} roster${rosters > 1 ? 's' : ''}`,\n fieldsCount: (fields) => `${fields} champ${fields > 1 ? 's' : ''}`,\n rosterVarsCount: (vars) => `${vars} variable${vars > 1 ? 's' : ''}`,\n addRoster: '+ Ajouter un roster',\n addFieldToRoster: '+ Ajouter un champ au roster',\n pilotPrefix: 'pilote :',\n newRosterName: 'Nouveau roster',\n newFieldName: 'Nouveau champ',\n newVariableName: (typeLabel) => `Nouveau ${typeLabel.toLowerCase()}`,\n hasConditionsTitle: 'Contient des conditions',\n dataSourceConnectedTitle: 'Source de données connectée',\n },\n\n properties: {\n title: 'Propriétés',\n name: 'Nom',\n code: 'Code',\n description: 'Description',\n placeholder: 'Placeholder',\n version: 'Version',\n formType: 'Type de formulaire',\n noType: '— Aucun type —',\n formSummary: (pages, variables) =>\n `${pages} page${pages > 1 ? 's' : ''} · ${variables} variable${variables > 1 ? 's' : ''}`,\n pageSummary: (variables, rosters) =>\n `${variables} variable${variables > 1 ? 's' : ''} · ${rosters} roster${rosters > 1 ? 's' : ''}`,\n rosterSummary: (variables, options) =>\n `${variables} variable${variables > 1 ? 's' : ''} · ${options} option${options > 1 ? 's' : ''}`,\n repeatablePage: 'Page répétable',\n minInstances: 'Minimum d’instances',\n maxInstances: 'Maximum d’instances',\n controlVariableCode: 'Code de la variable de contrôle',\n instanceLabel: 'Modèle de libellé d’instance',\n rosterType: 'Type de roster',\n pilotVariableCode: 'Code de la variable pilote',\n rosterTypes: {\n check: 'Cases à cocher (sélection multiple)',\n list: 'Liste (dropdown par ligne)',\n collection: 'Collection (ajout/suppression de lignes)',\n collection_extend: 'Collection étendue (vue tableau)',\n },\n type: 'Type',\n ratingStyle: 'Style de notation',\n ratingStyles: {\n star: '★ Étoiles',\n number: '123 Nombres',\n color: '● Points de couleur',\n },\n layout: 'Mise en page',\n startNewRow: 'Nouvelle ligne',\n columnSpan: 'Largeur (colonnes, 1-12)',\n columnSpanAuto: 'Auto (part égale)',\n columnSpanHalf: ' (moitié)',\n columnSpanThird: ' (tiers)',\n columnSpanFull: ' (pleine largeur)',\n required: 'Obligatoire',\n readonly: 'Lecture seule',\n hidden: 'Masqué par défaut',\n expression: 'Expression',\n langConfigSection: 'Langues',\n langConfigAvailable: 'Langues disponibles',\n langConfigDefault: 'Langue par défaut',\n langConfigStrategy: 'Stratégie de détection',\n langConfigStrategies: {\n prop: 'Propriété (prop)',\n browser: 'Navigateur',\n selector: 'Sélecteur dans le formulaire',\n auto: 'Auto (navigateur puis défaut)',\n },\n langConfigSelectorPosition: 'Position du sélecteur',\n langConfigPositions: {\n top: 'Haut',\n bottom: 'Bas',\n },\n langConfigConfirmRemove: (lang) =>\n `Supprimer la langue « ${lang.toUpperCase()} » supprimera toutes les traductions ${lang.toUpperCase()}. Confirmer ?`,\n langConfigConfirmYes: 'Supprimer',\n langConfigConfirmNo: 'Annuler',\n },\n\n optionsEditor: {\n optionsCount: (count) => `Options (${count})`,\n noOptions: 'Aucune option. Ajoutez-en une pour peupler les choix.',\n optionLabelPlaceholder: 'Libellé',\n optionValuePlaceholder: 'valeur',\n addOption: '+ Ajouter une option',\n optionLabelAria: (index) => `Libellé de l’option ${index + 1}`,\n optionValueAria: (index) => `Valeur de l’option ${index + 1}`,\n removeOptionAria: (index) => `Supprimer l’option ${index + 1}`,\n },\n\n conditionBuilder: {\n conditionsCount: (count) => `Conditions (${count})`,\n addCondition: '+ Ajouter une condition',\n rulesCount: (rules) => ` (${rules} règle${rules > 1 ? 's' : ''})`,\n addRule: '+ Ajouter une règle',\n action: 'Action',\n match: 'Correspondance',\n all: 'TOUT (ET)',\n any: 'AU MOINS UN (OU)',\n actions: {\n show: 'Afficher si',\n hide: 'Masquer si',\n validate: 'Valider que',\n require: 'Obligatoire si',\n readonly: 'Lecture seule si',\n setValue: 'Définir la valeur si',\n },\n operators: {\n equals: 'est égal à',\n not_equals: 'est différent de',\n greater_than: 'est supérieur à',\n less_than: 'est inférieur à',\n greater_than_or_equal: 'est supérieur ou égal à',\n less_than_or_equal: 'est inférieur ou égal à',\n contains: 'contient',\n not_contains: 'ne contient pas',\n is_empty: 'est vide',\n is_not_empty: 'n’est pas vide',\n starts_with: 'commence par',\n ends_with: 'se termine par',\n in: 'est dans la liste',\n not_in: 'n’est pas dans la liste',\n between: 'est entre',\n regex: 'correspond au pattern',\n },\n variablePlaceholder: 'Variable...',\n valuePlaceholder: 'Valeur',\n errorMessage: 'Message d’erreur',\n errorMessagePlaceholder: 'Message d’erreur de validation',\n targetVariableCode: 'Code de la variable cible',\n targetVariablePlaceholder: 'VAR_CIBLE',\n valueToSet: 'Valeur à définir',\n valueToSetPlaceholder: 'Valeur',\n },\n\n dataSource: {\n title: 'Source de données',\n connector: 'Connecteur',\n none: 'Aucune (options statiques)',\n connectedTo: 'Connecté à :',\n dependencies: (count) => `Dépendances (${count})`,\n selectVariable: 'Sélectionner une variable...',\n dependencyKeyPlaceholder: 'Clé de dépendance (ex : parentId)',\n addDependency: '+ Ajouter',\n },\n\n formTypesDialog: {\n dialogAriaLabel: 'Types de formulaires',\n title: 'Types de formulaires',\n closeAriaLabel: 'Fermer',\n noTypes: 'Aucun type défini. Ajoutez-en un ci-dessous.',\n confirmDelete: 'Ce type est utilisé par le formulaire courant. Confirmer la suppression ?',\n deleteConfirm: 'Supprimer',\n deleteCancel: 'Annuler',\n removeTypeAria: (name) => `Supprimer ${name}`,\n newTypeNamePlaceholder: 'Nom du nouveau type',\n newTypeCodePlaceholder: 'CODE (auto)',\n addButton: '+ Ajouter',\n },\n\n formEditor: {\n previewMissing: 'Passer la prop PreviewComponent pour activer l’aperçu',\n },\n}\n","/**\n * English labels for FormEditor — opt-in via `labels` prop.\n */\n\nimport type { IEditorLabels } from './types'\n\nexport const enLabels: IEditorLabels = {\n toolbar: {\n formNamePlaceholder: 'Form name',\n unsaved: 'Unsaved',\n addPage: '+ Page',\n types: 'Types',\n manageFormTypesTitle: 'Manage form types',\n undo: 'Undo',\n redo: 'Redo',\n save: 'Save',\n saving: 'Saving...',\n export: 'Export',\n import: 'Import',\n viewEditor: 'Editor',\n viewPreview: 'Preview',\n viewJson: 'JSON',\n },\n\n toolbox: {\n searchPlaceholder: 'Search fields...',\n addPageFirst: 'Add a page first',\n groupText: 'Text',\n groupSelection: 'Selection',\n groupDateTime: 'Date & Time',\n groupMedia: 'Media',\n groupAdvanced: 'Advanced',\n types: {\n text: 'Text',\n textarea: 'Text Area',\n number: 'Number',\n email: 'Email',\n select: 'Dropdown',\n multiselect: 'Multi Select',\n radio: 'Radio',\n checkbox: 'Checkbox',\n date: 'Date',\n datetime: 'DateTime',\n time: 'Time',\n file: 'File',\n image: 'Image',\n gps: 'GPS',\n rating: 'Rating (stars)',\n calculated: 'Calculated',\n hidden: 'Hidden',\n label: 'Label',\n },\n },\n\n canvas: {\n emptyStateNoPage: 'Click \"+ Page\" in the toolbar to get started',\n emptyStateNoPageDnd: 'Drag a field from the toolbox or add a page to get started',\n emptyStatePage: 'Click a field type in the toolbox to add it here',\n unnamedPage: 'Unnamed Page',\n repeatable: 'Repeatable',\n fieldsRostersCount: (fields, rosters) =>\n `${fields} field${fields === 1 ? '' : 's'} · ${rosters} roster${rosters === 1 ? '' : 's'}`,\n fieldsCount: (fields) => `${fields} field${fields === 1 ? '' : 's'}`,\n rosterVarsCount: (vars) => `${vars} var${vars === 1 ? '' : 's'}`,\n addRoster: '+ Add Roster',\n addFieldToRoster: '+ Add field to roster',\n pilotPrefix: 'pilot:',\n newRosterName: 'New Roster',\n newFieldName: 'New field',\n newVariableName: (typeLabel) => `New ${typeLabel}`,\n hasConditionsTitle: 'Has conditions',\n dataSourceConnectedTitle: 'Data source connected',\n },\n\n properties: {\n title: 'Properties',\n name: 'Name',\n code: 'Code',\n description: 'Description',\n placeholder: 'Placeholder',\n version: 'Version',\n formType: 'Form type',\n noType: '— No type —',\n formSummary: (pages, variables) =>\n `${pages} page${pages === 1 ? '' : 's'} · ${variables} variable${variables === 1 ? '' : 's'}`,\n pageSummary: (variables, rosters) =>\n `${variables} variable${variables === 1 ? '' : 's'} · ${rosters} roster${rosters === 1 ? '' : 's'}`,\n rosterSummary: (variables, options) =>\n `${variables} variable${variables === 1 ? '' : 's'} · ${options} option${options === 1 ? '' : 's'}`,\n repeatablePage: 'Repeatable page',\n minInstances: 'Min instances',\n maxInstances: 'Max instances',\n controlVariableCode: 'Control variable code',\n instanceLabel: 'Instance label template',\n rosterType: 'Roster Type',\n pilotVariableCode: 'Pilot variable code',\n rosterTypes: {\n check: 'Check (multi-select checkboxes)',\n list: 'List (dropdown per row)',\n collection: 'Collection (add/remove rows)',\n collection_extend: 'Collection Extended (table view)',\n },\n type: 'Type',\n ratingStyle: 'Rating style',\n ratingStyles: {\n star: '★ Stars',\n number: '123 Numbers',\n color: '● Color dots',\n },\n layout: 'Layout',\n startNewRow: 'Start new row',\n columnSpan: 'Column span (1-12)',\n columnSpanAuto: 'Auto (equal share)',\n columnSpanHalf: ' (half)',\n columnSpanThird: ' (third)',\n columnSpanFull: ' (full)',\n required: 'Required',\n readonly: 'Read only',\n hidden: 'Hidden by default',\n expression: 'Expression',\n langConfigSection: 'Languages',\n langConfigAvailable: 'Available languages',\n langConfigDefault: 'Default language',\n langConfigStrategy: 'Detection strategy',\n langConfigStrategies: {\n prop: 'Prop (host-controlled)',\n browser: 'Browser',\n selector: 'In-form selector',\n auto: 'Auto (browser then default)',\n },\n langConfigSelectorPosition: 'Selector position',\n langConfigPositions: {\n top: 'Top',\n bottom: 'Bottom',\n },\n langConfigConfirmRemove: (lang) =>\n `Removing \"${lang.toUpperCase()}\" will delete every ${lang.toUpperCase()} translation. Confirm?`,\n langConfigConfirmYes: 'Delete',\n langConfigConfirmNo: 'Cancel',\n },\n\n optionsEditor: {\n optionsCount: (count) => `Options (${count})`,\n noOptions: 'No options yet — add one to populate the choices.',\n optionLabelPlaceholder: 'Label',\n optionValuePlaceholder: 'value',\n addOption: '+ Add option',\n optionLabelAria: (index) => `Option ${index + 1} label`,\n optionValueAria: (index) => `Option ${index + 1} value`,\n removeOptionAria: (index) => `Remove option ${index + 1}`,\n },\n\n conditionBuilder: {\n conditionsCount: (count) => `Conditions (${count})`,\n addCondition: '+ Add condition',\n rulesCount: (rules) => ` (${rules} rule${rules === 1 ? '' : 's'})`,\n addRule: '+ Add rule',\n action: 'Action',\n match: 'Match',\n all: 'ALL (AND)',\n any: 'ANY (OR)',\n actions: {\n show: 'Show when',\n hide: 'Hide when',\n validate: 'Validate that',\n require: 'Require when',\n readonly: 'Read-only when',\n setValue: 'Set value when',\n },\n operators: {\n equals: 'equals',\n not_equals: 'not equals',\n greater_than: 'greater than',\n less_than: 'less than',\n greater_than_or_equal: 'greater than or equal',\n less_than_or_equal: 'less than or equal',\n contains: 'contains',\n not_contains: 'not contains',\n is_empty: 'is empty',\n is_not_empty: 'is not empty',\n starts_with: 'starts with',\n ends_with: 'ends with',\n in: 'in',\n not_in: 'not in',\n between: 'between',\n regex: 'matches regex',\n },\n variablePlaceholder: 'Variable...',\n valuePlaceholder: 'Value',\n errorMessage: 'Error message',\n errorMessagePlaceholder: 'Validation error message',\n targetVariableCode: 'Target variable code',\n targetVariablePlaceholder: 'TARGET_VAR',\n valueToSet: 'Value to set',\n valueToSetPlaceholder: 'Value',\n },\n\n dataSource: {\n title: 'Data Source Connector',\n connector: 'Connector',\n none: 'None (static options)',\n connectedTo: 'Connected to:',\n dependencies: (count) => `Dependencies (${count})`,\n selectVariable: 'Select variable...',\n dependencyKeyPlaceholder: 'Dependency key (e.g. parentId)',\n addDependency: '+ Add',\n },\n\n formTypesDialog: {\n dialogAriaLabel: 'Form types',\n title: 'Form types',\n closeAriaLabel: 'Close',\n noTypes: 'No form types yet. Add one below.',\n confirmDelete: 'This type is used by the current form. Confirm deletion?',\n deleteConfirm: 'Delete',\n deleteCancel: 'Cancel',\n removeTypeAria: (name) => `Remove ${name}`,\n newTypeNamePlaceholder: 'New type name',\n newTypeCodePlaceholder: 'CODE (auto)',\n addButton: '+ Add',\n },\n\n formEditor: {\n previewMissing: 'Pass PreviewComponent prop to enable preview',\n },\n}\n","/**\n * EditorLabelsContext — propagates a resolved IEditorLabels through the\n * FormEditor component tree.\n *\n * The provider value is the *already merged* IEditorLabels (full coverage).\n * Merging happens once in FormEditor via `mergeLabels`. Sub-components only\n * read via `useLabels()`.\n */\n\nimport { createContext, useContext } from 'react'\nimport type { ReactNode } from 'react'\nimport { frLabels } from './fr'\nimport type { DeepPartial, IEditorLabels } from './types'\n\nconst EditorLabelsContext = createContext<IEditorLabels>(frLabels)\n\nexport interface EditorLabelsProviderProps {\n labels: IEditorLabels\n children: ReactNode\n}\n\nexport function EditorLabelsProvider({\n labels,\n children,\n}: EditorLabelsProviderProps) {\n return (\n <EditorLabelsContext.Provider value={labels}>\n {children}\n </EditorLabelsContext.Provider>\n )\n}\n\n/** Read the resolved labels. Defaults to French if no provider is mounted. */\nexport function useLabels(): IEditorLabels {\n return useContext(EditorLabelsContext)\n}\n\n// ---- merge helpers ----\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\n/**\n * Recursively merges `override` into `base`. Functions, arrays and primitives\n * are replaced wholesale. Plain objects are merged key-by-key so a partial\n * override never erases sibling keys.\n */\nexport function mergeLabels(\n base: IEditorLabels,\n override?: DeepPartial<IEditorLabels>,\n): IEditorLabels {\n if (!override) return base\n return mergeDeep(base, override) as IEditorLabels\n}\n\nfunction mergeDeep(base: unknown, override: unknown): unknown {\n if (!isPlainObject(base) || !isPlainObject(override)) {\n return override === undefined ? base : override\n }\n const result: Record<string, unknown> = { ...base }\n for (const key of Object.keys(override)) {\n const baseValue = base[key]\n const overrideValue = override[key]\n if (isPlainObject(baseValue) && isPlainObject(overrideValue)) {\n result[key] = mergeDeep(baseValue, overrideValue)\n } else if (overrideValue !== undefined) {\n result[key] = overrideValue\n }\n }\n return result\n}\n","/**\n * FormTypesDialog — administration of the editor's IFormType collection.\n *\n * Native React modal (no external lib). Overlay click closes the dialog;\n * clicks on the modal body do not propagate. Same visual pattern as the\n * renderer's ValidationErrorsModal.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\n\nexport interface FormTypesDialogProps {\n open: boolean\n onClose: () => void\n}\n\nexport function FormTypesDialog({ open, onClose }: FormTypesDialogProps) {\n const { formTypes, form, addFormType, updateFormType, removeFormType } = useEditorStore()\n const labels = useLabels()\n\n const [newName, setNewName] = useState('')\n const [newCode, setNewCode] = useState('')\n const [editingId, setEditingId] = useState<string | null>(null)\n const [editName, setEditName] = useState('')\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null)\n\n if (!open) return null\n\n const handleAdd = () => {\n if (!newName.trim()) return\n addFormType({\n name: newName.trim(),\n code: newCode.trim() || newName.trim().toUpperCase().replace(/\\s+/g, '_'),\n })\n setNewName('')\n setNewCode('')\n }\n\n const startEdit = (id: string, currentName: string) => {\n setEditingId(id)\n setEditName(currentName)\n }\n\n const commitEdit = () => {\n if (editingId && editName.trim()) {\n updateFormType(editingId, { name: editName.trim() })\n }\n setEditingId(null)\n setEditName('')\n }\n\n const askDelete = (id: string) => {\n if (form.formTypeId === id) {\n setConfirmDeleteId(id)\n } else {\n removeFormType(id)\n }\n }\n\n const confirmDelete = () => {\n if (confirmDeleteId) removeFormType(confirmDeleteId)\n setConfirmDeleteId(null)\n }\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.formTypesDialog.dialogAriaLabel}\n data-testid=\"form-types-dialog\"\n onClick={onClose}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.3)',\n zIndex: 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n backgroundColor: '#fff',\n borderRadius: '8px',\n maxWidth: '32rem',\n width: '100%',\n maxHeight: '80vh',\n overflow: 'auto',\n boxShadow: '0 10px 25px rgba(0,0,0,0.2)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: '#1e293b',\n }}\n >\n <header\n style={{\n padding: '16px',\n borderBottom: '1px solid #e2e8f0',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <h3 style={{ fontSize: '16px', fontWeight: 600, margin: 0 }}>{labels.formTypesDialog.title}</h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.formTypesDialog.closeAriaLabel}\n data-testid=\"form-types-dialog-close-x\"\n style={{\n background: 'transparent',\n border: 'none',\n fontSize: '18px',\n cursor: 'pointer',\n color: '#64748b',\n padding: '4px 8px',\n }}\n >\n ×\n </button>\n </header>\n\n <section style={{ padding: '16px' }}>\n {formTypes.length === 0 && (\n <div\n data-testid=\"form-types-empty\"\n style={{ fontSize: '13px', color: '#94a3b8', marginBottom: '12px' }}\n >\n {labels.formTypesDialog.noTypes}\n </div>\n )}\n\n <ul style={{ listStyle: 'none', padding: 0, margin: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {formTypes.map((t) => {\n const isEditing = editingId === t.id\n const inUse = form.formTypeId === t.id\n const awaitingConfirm = confirmDeleteId === t.id\n return (\n <li\n key={t.id}\n data-testid={`form-type-row-${t.id}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n backgroundColor: inUse ? '#f1f5f9' : '#fff',\n }}\n >\n {isEditing ? (\n <input\n type=\"text\"\n value={editName}\n autoFocus\n data-testid={`form-type-name-edit-${t.id}`}\n onChange={(e) => setEditName(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commitEdit()\n if (e.key === 'Escape') { setEditingId(null); setEditName('') }\n }}\n style={{\n flex: 1,\n padding: '4px 8px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n }}\n />\n ) : (\n <span\n data-testid={`form-type-name-${t.id}`}\n onClick={() => startEdit(t.id, t.name)}\n style={{\n flex: 1,\n fontSize: '13px',\n cursor: 'pointer',\n padding: '4px 8px',\n }}\n >\n {t.name}\n </span>\n )}\n <span style={{ fontSize: '11px', color: '#94a3b8', fontFamily: 'monospace' }}>{t.code}</span>\n <button\n type=\"button\"\n aria-label={labels.formTypesDialog.removeTypeAria(t.name)}\n data-testid={`form-type-remove-${t.id}`}\n onClick={() => askDelete(t.id)}\n style={{\n width: '24px',\n height: '24px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#64748b',\n cursor: 'pointer',\n fontSize: '14px',\n lineHeight: 1,\n }}\n >\n ×\n </button>\n {awaitingConfirm && (\n <div\n data-testid={`form-type-confirm-${t.id}`}\n style={{\n flexBasis: '100%',\n fontSize: '12px',\n color: '#b91c1c',\n backgroundColor: '#fef2f2',\n padding: '6px 8px',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span style={{ flex: 1 }}>\n {labels.formTypesDialog.confirmDelete}\n </span>\n <button\n type=\"button\"\n data-testid={`form-type-confirm-yes-${t.id}`}\n onClick={confirmDelete}\n style={{\n padding: '4px 8px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#ef4444',\n color: '#fff',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.formTypesDialog.deleteConfirm}\n </button>\n <button\n type=\"button\"\n data-testid={`form-type-confirm-no-${t.id}`}\n onClick={() => setConfirmDeleteId(null)}\n style={{\n padding: '4px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.formTypesDialog.deleteCancel}\n </button>\n </div>\n )}\n </li>\n )\n })}\n </ul>\n </section>\n\n <section\n style={{\n padding: '12px 16px',\n borderTop: '1px solid #e2e8f0',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n backgroundColor: '#f8fafc',\n }}\n >\n <input\n type=\"text\"\n value={newName}\n data-testid=\"form-types-new-name\"\n placeholder={labels.formTypesDialog.newTypeNamePlaceholder}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') handleAdd() }}\n style={{\n flex: 1,\n padding: '6px 8px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n }}\n />\n <input\n type=\"text\"\n value={newCode}\n data-testid=\"form-types-new-code\"\n placeholder={labels.formTypesDialog.newTypeCodePlaceholder}\n onChange={(e) => setNewCode(e.target.value)}\n style={{\n width: '120px',\n padding: '6px 8px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n fontFamily: 'monospace',\n }}\n />\n <button\n type=\"button\"\n data-testid=\"form-types-add\"\n onClick={handleAdd}\n disabled={newName.trim() === ''}\n style={{\n padding: '6px 12px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: newName.trim() === '' ? '#cbd5e1' : '#2563eb',\n color: '#fff',\n fontSize: '13px',\n cursor: newName.trim() === '' ? 'not-allowed' : 'pointer',\n }}\n >\n {labels.formTypesDialog.addButton}\n </button>\n </section>\n </div>\n </div>\n )\n}\n","/**\n * Editor toolbar — top bar with form title, actions, and view controls.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { EditorView } from '../../store/types'\nimport { FormTypesDialog } from '../dialogs/FormTypesDialog'\nimport { useLabels } from '../../i18n'\nimport { DEFAULT_LANG_CONFIG, resolveLabel } from '@msbci/form-core'\nimport type { LocalizedString } from '@msbci/form-core'\n\nexport interface EditorToolbarProps {\n onSave?: () => void\n onExport?: () => void\n onImport?: () => void\n}\n\nexport function EditorToolbar({ onSave, onExport, onImport }: EditorToolbarProps) {\n const {\n form,\n updateFormMeta,\n view,\n setView,\n isDirty,\n isSaving,\n canUndo,\n canRedo,\n undo,\n redo,\n save,\n addPage,\n } = useEditorStore()\n const labels = useLabels()\n\n const [showFormTypesDialog, setShowFormTypesDialog] = useState(false)\n\n const handleSave = async () => {\n await save()\n onSave?.()\n }\n\n const handleAddPage = () => {\n const nextOrder = form.pages.length\n addPage({\n id: `page-${Date.now()}`,\n code: `PAGE_${nextOrder + 1}`,\n name: `Page ${nextOrder + 1}`,\n order: nextOrder,\n isRepeatable: false,\n variables: [],\n rosters: [],\n })\n }\n\n const viewButtons: Array<{ view: EditorView; label: string }> = [\n { view: 'canvas', label: labels.toolbar.viewEditor },\n { view: 'preview', label: labels.toolbar.viewPreview },\n { view: 'json', label: labels.toolbar.viewJson },\n ]\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '8px 16px',\n borderBottom: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n gap: '8px',\n }}\n >\n {/* Form title (quick-edit) — touches only the default-lang value;\n richer multilingue editing happens in the right-hand properties panel. */}\n <input\n type=\"text\"\n value={resolveLabel(\n form.name,\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang,\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang,\n )}\n onChange={(e) => {\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n let next: LocalizedString\n if (typeof form.name === 'string') {\n next = e.target.value\n } else {\n next = { ...(form.name ?? {}), [defaultLang]: e.target.value }\n }\n updateFormMeta({ name: next })\n }}\n style={{\n border: 'none',\n fontSize: '16px',\n fontWeight: 600,\n color: '#1e293b',\n padding: '4px 8px',\n borderRadius: '4px',\n outline: 'none',\n minWidth: '200px',\n backgroundColor: 'transparent',\n }}\n placeholder={labels.toolbar.formNamePlaceholder}\n />\n\n {isDirty && (\n <span style={{ fontSize: '11px', color: '#f59e0b', fontWeight: 500 }}>\n {labels.toolbar.unsaved}\n </span>\n )}\n\n <div style={{ flex: 1 }} />\n\n {/* Add page */}\n <ToolbarButton onClick={handleAddPage} label={labels.toolbar.addPage} />\n\n {/* Form types */}\n <ToolbarButton\n onClick={() => setShowFormTypesDialog(true)}\n label={labels.toolbar.types}\n title={labels.toolbar.manageFormTypesTitle}\n />\n\n {/* Separator */}\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* Undo / Redo */}\n <ToolbarButton onClick={undo} label=\"↩\" disabled={!canUndo()} title={labels.toolbar.undo} />\n <ToolbarButton onClick={redo} label=\"↪\" disabled={!canRedo()} title={labels.toolbar.redo} />\n\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* View toggle */}\n <div style={{ display: 'flex', borderRadius: '6px', overflow: 'hidden', border: '1px solid #e2e8f0' }}>\n {viewButtons.map((btn) => (\n <button\n key={btn.view}\n type=\"button\"\n onClick={() => setView(btn.view)}\n style={{\n padding: '4px 12px',\n fontSize: '12px',\n fontWeight: 500,\n border: 'none',\n cursor: 'pointer',\n backgroundColor: view === btn.view ? '#2563eb' : '#fff',\n color: view === btn.view ? '#fff' : '#64748b',\n }}\n >\n {btn.label}\n </button>\n ))}\n </div>\n\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* Save */}\n <ToolbarButton\n onClick={handleSave}\n label={isSaving ? labels.toolbar.saving : labels.toolbar.save}\n primary\n disabled={isSaving || !isDirty}\n />\n\n {/* Export / Import */}\n {onExport && <ToolbarButton onClick={onExport} label={labels.toolbar.export} />}\n {onImport && <ToolbarButton onClick={onImport} label={labels.toolbar.import} />}\n\n <FormTypesDialog\n open={showFormTypesDialog}\n onClose={() => setShowFormTypesDialog(false)}\n />\n </div>\n )\n}\n\nfunction ToolbarButton({\n onClick,\n label,\n primary,\n disabled,\n title,\n}: {\n onClick: () => void\n label: string\n primary?: boolean\n disabled?: boolean\n title?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: primary ? 'none' : '1px solid #e2e8f0',\n backgroundColor: primary ? '#2563eb' : '#fff',\n color: primary ? '#fff' : '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n {label}\n </button>\n )\n}\n","/**\n * Toolbox — left panel. Click to add variables to selected page.\n * No drag & drop dependency.\n */\n\nimport { useMemo, useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport type { VariableType } from '@msbci/form-core'\n\ninterface ToolboxGroup {\n label: string\n items: Array<{ type: VariableType; label: string; icon: string }>\n}\n\nexport function ToolboxSimple() {\n const labels = useLabels()\n const [search, setSearch] = useState('')\n const { form, selection, addVariable } = useEditorStore()\n\n const GROUPS = useMemo<ToolboxGroup[]>(\n () => [\n { label: labels.toolbox.groupText, items: [\n { type: 'text', label: labels.toolbox.types.text, icon: 'T' },\n { type: 'textarea', label: labels.toolbox.types.textarea, icon: '¶' },\n { type: 'number', label: labels.toolbox.types.number, icon: '#' },\n { type: 'email', label: labels.toolbox.types.email, icon: '@' },\n ] },\n { label: labels.toolbox.groupSelection, items: [\n { type: 'select', label: labels.toolbox.types.select, icon: '▼' },\n { type: 'multiselect', label: labels.toolbox.types.multiselect, icon: '☑' },\n { type: 'radio', label: labels.toolbox.types.radio, icon: '◉' },\n { type: 'checkbox', label: labels.toolbox.types.checkbox, icon: '☐' },\n ] },\n { label: labels.toolbox.groupDateTime, items: [\n { type: 'date', label: labels.toolbox.types.date, icon: '📅' },\n { type: 'datetime', label: labels.toolbox.types.datetime, icon: '🕐' },\n { type: 'time', label: labels.toolbox.types.time, icon: '⏰' },\n ] },\n { label: labels.toolbox.groupMedia, items: [\n { type: 'file', label: labels.toolbox.types.file, icon: '📎' },\n { type: 'image', label: labels.toolbox.types.image, icon: '🖼' },\n { type: 'gps', label: labels.toolbox.types.gps, icon: '📍' },\n ] },\n { label: labels.toolbox.groupAdvanced, items: [\n { type: 'rating', label: labels.toolbox.types.rating, icon: '★' },\n { type: 'calculated', label: labels.toolbox.types.calculated, icon: 'fx' },\n { type: 'hidden', label: labels.toolbox.types.hidden, icon: '👁' },\n { type: 'label', label: labels.toolbox.types.label, icon: 'Aa' },\n ] },\n ],\n [labels],\n )\n\n const pageCode = selection.type === 'page' ? selection.pageCode\n : selection.type === 'variable' ? selection.pageCode\n : selection.type === 'roster' ? selection.pageCode\n : form.pages[0]?.code\n\n const handleAdd = (type: VariableType, label: string) => {\n if (!pageCode) return\n const page = form.pages.find((p) => p.code === pageCode)\n if (!page) return\n const code = `${type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(pageCode, {\n id: `var-${Date.now()}`,\n code,\n name: labels.canvas.newVariableName(label),\n type,\n order: page.variables.length,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n })\n }\n\n const filtered = GROUPS.map((g) => ({\n ...g,\n items: g.items.filter((i) => i.label.toLowerCase().includes(search.toLowerCase())),\n })).filter((g) => g.items.length > 0)\n\n return (\n <div style={{ width: '220px', borderRight: '1px solid #e2e8f0', display: 'flex', flexDirection: 'column', backgroundColor: '#f8fafc', overflow: 'hidden' }}>\n <div style={{ padding: '12px', borderBottom: '1px solid #e2e8f0' }}>\n <input type=\"text\" placeholder={labels.toolbox.searchPlaceholder} value={search} onChange={(e) => setSearch(e.target.value)}\n style={{ width: '100%', padding: '6px 10px', border: '1px solid #e2e8f0', borderRadius: '6px', fontSize: '13px', outline: 'none', boxSizing: 'border-box' }} />\n </div>\n <div style={{ flex: 1, overflowY: 'auto', padding: '8px' }}>\n {!pageCode && <div style={{ padding: '12px', color: '#94a3b8', fontSize: '12px', textAlign: 'center' }}>{labels.toolbox.addPageFirst}</div>}\n {filtered.map((group) => (\n <div key={group.label} style={{ marginBottom: '16px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#94a3b8', textTransform: 'uppercase', letterSpacing: '0.5px', marginBottom: '6px', padding: '0 4px' }}>\n {group.label}\n </div>\n {group.items.map((item) => (\n <div key={item.type} onClick={() => handleAdd(item.type, item.label)}\n style={{ display: 'flex', alignItems: 'center', gap: '8px', padding: '6px 8px', marginBottom: '2px', borderRadius: '6px', cursor: 'pointer', fontSize: '13px', color: '#334155', userSelect: 'none' }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = '#e2e8f0' }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent' }}\n >\n <span style={{ width: '20px', textAlign: 'center', fontSize: '14px' }}>{item.icon}</span>\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Canvas — center panel. Displays form structure.\n * Click to select. Supports roster creation and variable management.\n */\n\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { DEFAULT_LANG_CONFIG, resolveLabel } from '@msbci/form-core'\nimport type { IFormPage, IFormVariable, IFormRoster, LocalizedString } from '@msbci/form-core'\n\n/**\n * Resolves a `LocalizedString` for display inside the editor canvas, using\n * the form's `defaultLang` (or French as the absolute fallback). The canvas\n * is a structural overview, not a language preview — admins keep editing\n * in the right-hand properties panel where each language has its own tab.\n */\nfunction useCanvasResolve() {\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n return (label: LocalizedString | undefined) => resolveLabel(label, defaultLang, defaultLang)\n}\n\nfunction groupIntoRows(variables: IFormVariable[]): IFormVariable[][] {\n const sorted = variables.slice().sort((a, b) => a.order - b.order)\n const rows: IFormVariable[][] = []\n for (const v of sorted) {\n if (v.startWithNewLine === false && rows.length > 0) {\n rows[rows.length - 1]!.push(v)\n } else {\n rows.push([v])\n }\n }\n return rows\n}\n\nexport function CanvasSimple() {\n const { form } = useEditorStore()\n const labels = useLabels()\n\n if (form.pages.length === 0) {\n return <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>{labels.canvas.emptyStateNoPage}</div>\n }\n\n return (\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}>\n {form.pages.slice().sort((a, b) => a.order - b.order).map((page) => (\n <PageBlock key={page.code} page={page} />\n ))}\n </div>\n )\n}\n\nfunction PageBlock({ page }: { page: IFormPage }) {\n const { selection, select, removePage, addRoster } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'page' && selection.pageCode === page.code\n\n const handleAddRoster = (e: React.MouseEvent) => {\n e.stopPropagation()\n const code = `ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addRoster(page.code, {\n id: `roster-${Date.now()}`,\n code,\n name: labels.canvas.newRosterName,\n rosterType: 'collection',\n order: page.rosters.length,\n variables: [],\n })\n }\n\n return (\n <div style={{\n marginBottom: '16px', border: `2px solid ${isSelected ? '#2563eb' : '#e2e8f0'}`,\n borderRadius: '8px', overflow: 'hidden',\n }}>\n {/* Page header */}\n <div onClick={() => select({ type: 'page', pageCode: page.code })}\n style={{\n padding: '10px 14px', backgroundColor: isSelected ? '#eff6ff' : '#f8fafc',\n borderBottom: '1px solid #e2e8f0', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '14px', fontWeight: 600, color: '#1e293b' }}>{resolveCanvas(page.name) || labels.canvas.unnamedPage}</span>\n {page.isRepeatable && <span style={{ fontSize: '10px', padding: '1px 6px', borderRadius: '4px', backgroundColor: '#dbeafe', color: '#2563eb', fontWeight: 500 }}>{labels.canvas.repeatable}</span>}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.canvas.fieldsRostersCount(page.variables.length, page.rosters.length)}\n </span>\n <button onClick={(e) => { e.stopPropagation(); removePage(page.code) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px', padding: '2px 4px' }}>×</button>\n </div>\n </div>\n\n {/* Variables */}\n <div style={{ padding: '4px 0' }}>\n {groupIntoRows(page.variables).map((row, rowIdx) => (\n row.length === 1 ? (\n <VarRow key={row[0]!.code} variable={row[0]!} pageCode={page.code} />\n ) : (\n <div key={`row-${rowIdx}`} style={{ display: 'flex', gap: '2px', backgroundColor: '#f0f4ff', borderLeft: '2px solid #c7d2fe', margin: '1px 0' }}>\n {row.map((v) => (\n <div key={v.code} style={{ flex: v.colSpan ? `0 0 ${(v.colSpan / 12) * 100}%` : '1 1 0%', minWidth: 0 }}>\n <VarRow variable={v} pageCode={page.code} />\n </div>\n ))}\n </div>\n )\n ))}\n\n {/* Rosters */}\n {page.rosters.slice().sort((a, b) => a.order - b.order).map((r) => (\n <RosterBlock key={r.code} roster={r} pageCode={page.code} />\n ))}\n\n {/* Empty state */}\n {page.variables.length === 0 && page.rosters.length === 0 && (\n <div style={{ padding: '12px 14px', color: '#94a3b8', fontSize: '12px', fontStyle: 'italic' }}>\n {labels.canvas.emptyStatePage}\n </div>\n )}\n </div>\n\n {/* Add roster button */}\n <div style={{ padding: '6px 14px', borderTop: '1px solid #e2e8f0' }}>\n <button onClick={handleAddRoster}\n style={{\n padding: '4px 10px', borderRadius: '4px', border: '1px dashed #d4a843',\n backgroundColor: 'transparent', color: '#92400e', fontSize: '11px',\n cursor: 'pointer', fontWeight: 500,\n }}>\n {labels.canvas.addRoster}\n </button>\n </div>\n </div>\n )\n}\n\nfunction VarRow({ variable, pageCode, rosterCode }: { variable: IFormVariable; pageCode: string; rosterCode?: string }) {\n const { selection, select, removeVariable } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'variable' && selection.variableCode === variable.code\n\n return (\n <div onClick={(e) => { e.stopPropagation(); select({ type: 'variable', pageCode, variableCode: variable.code, rosterCode }) }}\n style={{\n display: 'flex', alignItems: 'center', gap: '8px', padding: '6px 14px', cursor: 'pointer',\n backgroundColor: isSelected ? '#eff6ff' : 'transparent',\n borderLeft: isSelected ? '3px solid #2563eb' : '3px solid transparent', fontSize: '13px',\n }}>\n <span style={{ color: '#94a3b8', fontSize: '11px', width: '60px', flexShrink: 0 }}>{variable.type}</span>\n <span style={{ color: '#334155', flex: 1 }}>{resolveCanvas(variable.name) || variable.code}</span>\n {variable.isRequired && <span style={{ color: '#ef4444', fontSize: '11px' }}>*</span>}\n {variable.conditions && variable.conditions.length > 0 && <span style={{ color: '#f59e0b', fontSize: '11px' }} title={labels.canvas.hasConditionsTitle}>⚡</span>}\n {variable.dataSourceId && <span style={{ color: '#22c55e', fontSize: '11px' }} title={labels.canvas.dataSourceConnectedTitle}>⟳</span>}\n <button onClick={(e) => { e.stopPropagation(); removeVariable(pageCode, variable.code, rosterCode) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '12px', padding: '0 2px', opacity: 0.5 }}>×</button>\n </div>\n )\n}\n\nfunction RosterBlock({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { selection, select, removeRoster, addVariable } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'roster' && selection.rosterCode === roster.code\n\n const handleAddVarToRoster = (e: React.MouseEvent) => {\n e.stopPropagation()\n const code = `RV_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(pageCode, {\n id: `var-${Date.now()}`,\n code,\n name: labels.canvas.newFieldName,\n type: 'text',\n order: roster.variables.length,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n }, roster.code)\n }\n\n return (\n <div style={{ margin: '4px 8px', border: `1px solid ${isSelected ? '#2563eb' : '#e2e8f0'}`, borderRadius: '6px', overflow: 'hidden' }}>\n {/* Roster header */}\n <div onClick={(e) => { e.stopPropagation(); select({ type: 'roster', pageCode, rosterCode: roster.code }) }}\n style={{\n padding: '6px 10px', backgroundColor: isSelected ? '#fef3c7' : '#fffbeb',\n fontSize: '12px', fontWeight: 600, color: '#92400e', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <span>▤ {resolveCanvas(roster.name) || roster.code}</span>\n <span style={{ fontSize: '10px', padding: '1px 4px', borderRadius: '3px', backgroundColor: '#fde68a', color: '#78350f' }}>\n {roster.rosterType}\n </span>\n {roster.pilotVariableCode && (\n <span style={{ fontSize: '10px', color: '#92400e', fontWeight: 400 }}>\n {labels.canvas.pilotPrefix} {roster.pilotVariableCode}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span style={{ fontSize: '11px', color: '#b45309' }}>{labels.canvas.rosterVarsCount(roster.variables.length)}</span>\n <button onClick={(e) => { e.stopPropagation(); removeRoster(pageCode, roster.code) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '12px' }}>×</button>\n </div>\n </div>\n\n {/* Roster variables */}\n {roster.variables.slice().sort((a, b) => a.order - b.order).map((v) => (\n <VarRow key={v.code} variable={v} pageCode={pageCode} rosterCode={roster.code} />\n ))}\n\n {/* Add variable to roster */}\n <div style={{ padding: '4px 10px', borderTop: '1px solid #fde68a' }}>\n <button onClick={handleAddVarToRoster}\n style={{\n padding: '2px 8px', borderRadius: '3px', border: '1px dashed #d4a843',\n backgroundColor: 'transparent', color: '#92400e', fontSize: '10px',\n cursor: 'pointer',\n }}>\n {labels.canvas.addFieldToRoster}\n </button>\n </div>\n </div>\n )\n}\n","/**\n * LocalizedInput — input/textarea control for editing a `LocalizedString`\n * inside the editor's properties panel.\n *\n * Behaviour:\n * - `availableLangs.length ≤ 1` → a single plain input. The value stays a\n * `string`. If a `Record<string, string>` was previously stored, it is\n * flattened to the lone language on first edit (see `valueFor`).\n * - `availableLangs.length > 1` → tabbed editor with one input per lang.\n * The first lang is the default tab; the value is upgraded to a\n * `Record<string, string>` the first time any tab is edited.\n *\n * Backward compat:\n * - A `string` value flows through untouched until the user edits.\n * - Switching from 2 → 1 language elsewhere (langConfig change) does NOT\n * happen here; FormProperties handles the flattening with confirmation.\n */\n\nimport { useState } from 'react'\nimport type { LocalizedString } from '@msbci/form-core'\nimport { DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\nimport { useEditorStore } from '../../store/editor-store'\n\n/**\n * Flattens a LocalizedString value to a plain `string` of the given lang.\n *\n * Used when langConfig shrinks from N → 1 language: every LocalizedString\n * field in the schema should collapse to the remaining language's string,\n * with FR as the absolute fallback. Plain strings are returned as-is.\n */\nexport function flattenLocalized(\n value: LocalizedString | undefined,\n keepLang: string,\n fallbackLang = 'fr',\n): string {\n if (value === undefined || value === null) return ''\n if (typeof value === 'string') return value\n const exact = value[keepLang]\n if (typeof exact === 'string' && exact !== '') return exact\n const fb = value[fallbackLang]\n if (typeof fb === 'string' && fb !== '') return fb\n for (const v of Object.values(value)) {\n if (typeof v === 'string' && v !== '') return v\n }\n return ''\n}\n\nexport interface LocalizedInputProps {\n /** Current value (string or per-language record). Undefined → '' . */\n value: LocalizedString | undefined\n /**\n * Notified with the *next* shape. When `availableLangs.length === 1`, the\n * next shape is always a plain `string`. When >1 it is always a\n * `Record<string, string>` once the user starts editing.\n */\n onChange: (next: LocalizedString) => void\n /** Active language codes — drives single-input vs tabbed mode. */\n availableLangs: string[]\n /** Default language (used for the first tab and the flat → record upgrade). */\n defaultLang?: string\n /** Optional placeholder forwarded to each input. */\n placeholder?: string\n /** Render a textarea instead of an input. */\n multiline?: boolean\n /** Optional test id forwarded to the active input (suffixed by lang). */\n testIdPrefix?: string\n /** Disabled flag forwarded to all inputs. */\n disabled?: boolean\n}\n\nconst inputBase: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n}\n\nconst tabBase: React.CSSProperties = {\n padding: '4px 10px',\n border: '1px solid #e2e8f0',\n borderBottom: 'none',\n borderTopLeftRadius: '4px',\n borderTopRightRadius: '4px',\n fontSize: '11px',\n fontWeight: 600,\n cursor: 'pointer',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n minWidth: '38px',\n}\n\n/**\n * Reads the displayable value for a given language without coercing the\n * underlying shape. Plain strings are returned as-is for the default lang\n * (and only for it — other tabs start empty).\n */\nfunction valueFor(\n value: LocalizedString | undefined,\n lang: string,\n defaultLang: string,\n): string {\n if (value === undefined || value === null) return ''\n if (typeof value === 'string') {\n return lang === defaultLang ? value : ''\n }\n const exact = value[lang]\n return typeof exact === 'string' ? exact : ''\n}\n\nexport function LocalizedInput({\n value,\n onChange,\n availableLangs,\n defaultLang = 'fr',\n placeholder,\n multiline,\n testIdPrefix,\n disabled,\n}: LocalizedInputProps) {\n const langs = availableLangs.length > 0 ? availableLangs : [defaultLang]\n const isMulti = langs.length > 1\n const [activeLang, setActiveLang] = useState<string>(langs[0]!)\n const labels = useLabels()\n\n // Resync active lang if the available set shrinks.\n if (!langs.includes(activeLang)) {\n // Schedule via a fresh render — useState setter outside effect is fine\n // because this branch only fires when langs change.\n setActiveLang(langs[0]!)\n }\n\n const handleChange = (lang: string, next: string) => {\n if (!isMulti) {\n onChange(next)\n return\n }\n // Upgrade plain string → record on first multi-edit.\n const base: Record<string, string> =\n typeof value === 'string'\n ? { [defaultLang]: value }\n : { ...(value ?? {}) }\n base[lang] = next\n onChange(base)\n }\n\n if (!isMulti) {\n const lang = langs[0]!\n const v = valueFor(value, lang, defaultLang)\n return multiline ? (\n <textarea\n value={v}\n rows={3}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${lang}` : undefined}\n onChange={(e) => handleChange(lang, e.target.value)}\n style={inputBase}\n />\n ) : (\n <input\n type=\"text\"\n value={v}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${lang}` : undefined}\n onChange={(e) => handleChange(lang, e.target.value)}\n style={inputBase}\n />\n )\n }\n\n const v = valueFor(value, activeLang, defaultLang)\n\n return (\n <div data-testid={testIdPrefix} style={{ display: 'flex', flexDirection: 'column' }}>\n <div role=\"tablist\" aria-label={labels.properties.title} style={{ display: 'flex', gap: '2px' }}>\n {langs.map((lang) => {\n const isActive = lang === activeLang\n return (\n <button\n key={lang}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n data-testid={testIdPrefix ? `${testIdPrefix}-tab-${lang}` : undefined}\n onClick={() => setActiveLang(lang)}\n style={{\n ...tabBase,\n backgroundColor: isActive ? '#fff' : '#f1f5f9',\n color: isActive ? '#2563eb' : '#64748b',\n borderColor: isActive ? '#e2e8f0' : '#e2e8f0',\n }}\n >\n {lang}\n </button>\n )\n })}\n </div>\n {multiline ? (\n <textarea\n value={v}\n rows={3}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${activeLang}` : undefined}\n onChange={(e) => handleChange(activeLang, e.target.value)}\n style={{ ...inputBase, borderTopLeftRadius: 0 }}\n />\n ) : (\n <input\n type=\"text\"\n value={v}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${activeLang}` : undefined}\n onChange={(e) => handleChange(activeLang, e.target.value)}\n style={{ ...inputBase, borderTopLeftRadius: 0 }}\n />\n )}\n </div>\n )\n}\n\n/**\n * LocalizedField — label + LocalizedInput, wired to the editor store's\n * `form.langConfig` so callers don't have to pass `availableLangs` each time.\n *\n * Use this in the right-hand properties panel for every LocalizedString\n * field (variable.name, page.name, variable.description, etc.). For plain\n * string fields (code, version, …) keep the regular PropertyField.\n */\nexport interface LocalizedFieldProps {\n label: string\n value: LocalizedString | undefined\n onChange: (next: LocalizedString) => void\n placeholder?: string\n multiline?: boolean\n testIdPrefix?: string\n disabled?: boolean\n}\n\nexport function LocalizedField({\n label,\n value,\n onChange,\n placeholder,\n multiline,\n testIdPrefix,\n disabled,\n}: LocalizedFieldProps) {\n const form = useEditorStore((s) => s.form)\n const langConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n <LocalizedInput\n value={value}\n onChange={onChange}\n availableLangs={langConfig.availableLangs}\n defaultLang={langConfig.defaultLang}\n placeholder={placeholder}\n multiline={multiline}\n testIdPrefix={testIdPrefix}\n disabled={disabled}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { LocalizedField, flattenLocalized } from './LocalizedInput'\nimport { DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport type {\n IFormDefinition,\n IFormLangConfig,\n IFormPage,\n IFormRoster,\n IFormVariable,\n IVariableOption,\n IConditionRule,\n IValidationRule,\n IRepeatConfig,\n LangDetectionStrategy,\n LocalizedString,\n} from '@msbci/form-core'\n\n/** Languages the demo / editor knows how to display today. */\nconst SUPPORTED_LANGS = ['fr', 'en'] as const\n\nexport function FormProperties() {\n const { form, formTypes, updateFormMeta } = useEditorStore()\n const labels = useLabels()\n const langConfig: IFormLangConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n\n const totalVariables = form.pages.reduce(\n (sum, p) =>\n sum +\n p.variables.length +\n p.rosters.reduce((rs, r) => rs + r.variables.length, 0),\n 0,\n )\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={form.name}\n onChange={(v) => updateFormMeta({ name: v })}\n testIdPrefix=\"form-name\"\n />\n <PropertyField label={labels.properties.code} value={form.code} onChange={(v) => updateFormMeta({ code: v })} />\n <LocalizedField\n label={labels.properties.description}\n value={form.description}\n onChange={(v) => updateFormMeta({ description: v })}\n multiline\n testIdPrefix=\"form-description\"\n />\n <PropertyField label={labels.properties.version} value={form.version} onChange={(v) => updateFormMeta({ version: v })} />\n\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.formType}\n </label>\n <select\n data-testid=\"form-properties-type-select\"\n value={form.formTypeId ?? ''}\n onChange={(e) => updateFormMeta({ formTypeId: e.target.value || undefined })}\n style={{\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n >\n <option value=\"\">{labels.properties.noType}</option>\n {formTypes.map((t) => (\n <option key={t.id} value={t.id}>{t.name}</option>\n ))}\n </select>\n </div>\n\n <LangConfigSection langConfig={langConfig} />\n\n <div style={{ fontSize: '12px', color: '#94a3b8', marginTop: '8px' }}>\n {labels.properties.formSummary(form.pages.length, totalVariables)}\n </div>\n </div>\n )\n}\n\n/**\n * Section \"Langues\" — admin UI for IFormDefinition.langConfig.\n *\n * - Toggle each supported language. The defaultLang is always implicitly\n * enabled (you cannot uncheck it while leaving zero langs).\n * - Removing a language with existing translations triggers a confirmation;\n * on confirm, every LocalizedString in the schema collapses to the\n * remaining default lang (no silent data loss).\n * - Strategy + selector position selectors are plain dropdowns.\n */\nfunction LangConfigSection({ langConfig }: { langConfig: IFormLangConfig }) {\n const { form, updateFormMeta, setForm } = useEditorStore()\n const labels = useLabels()\n const [confirmRemoveLang, setConfirmRemoveLang] = useState<string | null>(null)\n\n const sectionLabel: React.CSSProperties = {\n display: 'block',\n fontSize: '12px',\n fontWeight: 500,\n color: '#64748b',\n marginBottom: '4px',\n }\n\n const selectStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }\n\n const applyLangConfig = (next: IFormLangConfig) => {\n updateFormMeta({ langConfig: next })\n }\n\n const addLang = (lang: string) => {\n if (langConfig.availableLangs.includes(lang)) return\n applyLangConfig({\n ...langConfig,\n availableLangs: [...langConfig.availableLangs, lang],\n })\n }\n\n const requestRemoveLang = (lang: string) => {\n // Cannot remove the lone language nor the defaultLang.\n if (langConfig.availableLangs.length <= 1) return\n if (lang === langConfig.defaultLang) return\n setConfirmRemoveLang(lang)\n }\n\n const performRemoveLang = (lang: string) => {\n const nextLangs = langConfig.availableLangs.filter((l) => l !== lang)\n const nextDefault = nextLangs.includes(langConfig.defaultLang)\n ? langConfig.defaultLang\n : (nextLangs[0] ?? 'fr')\n // Collapse every LocalizedString in the schema down to a plain string\n // when only one language remains — and always strip the removed lang.\n const nextForm = stripLangFromForm(form, lang, nextDefault, nextLangs.length === 1)\n const nextLangConfig: IFormLangConfig = {\n ...langConfig,\n defaultLang: nextDefault,\n availableLangs: nextLangs,\n }\n setForm({ ...nextForm, langConfig: nextLangConfig })\n setConfirmRemoveLang(null)\n }\n\n const cancelRemove = () => setConfirmRemoveLang(null)\n\n return (\n <div\n data-testid=\"form-lang-config\"\n style={{\n padding: '8px',\n backgroundColor: '#f8fafc',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginTop: '4px',\n }}\n >\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.properties.langConfigSection}\n </div>\n\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigAvailable}</label>\n <div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>\n {SUPPORTED_LANGS.map((lang) => {\n const isEnabled = langConfig.availableLangs.includes(lang)\n const isDefault = lang === langConfig.defaultLang\n const isOnlyOne = langConfig.availableLangs.length <= 1\n const disabled = isEnabled && (isDefault || isOnlyOne)\n return (\n <label\n key={lang}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: '#334155',\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n }}\n >\n <input\n type=\"checkbox\"\n data-testid={`lang-toggle-${lang}`}\n checked={isEnabled}\n disabled={disabled}\n onChange={(e) => {\n if (e.target.checked) addLang(lang)\n else requestRemoveLang(lang)\n }}\n />\n <span>{lang.toUpperCase()}</span>\n {isDefault && (\n <span style={{ fontSize: '10px', color: '#94a3b8', fontStyle: 'italic' }}>\n ({labels.properties.langConfigDefault})\n </span>\n )}\n </label>\n )\n })}\n </div>\n </div>\n\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigDefault}</label>\n <select\n data-testid=\"lang-default-select\"\n value={langConfig.defaultLang}\n onChange={(e) => applyLangConfig({ ...langConfig, defaultLang: e.target.value })}\n style={selectStyle}\n >\n {langConfig.availableLangs.map((lang) => (\n <option key={lang} value={lang}>{lang.toUpperCase()}</option>\n ))}\n </select>\n </div>\n\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigStrategy}</label>\n <select\n data-testid=\"lang-strategy-select\"\n value={langConfig.strategy}\n onChange={(e) => applyLangConfig({ ...langConfig, strategy: e.target.value as LangDetectionStrategy })}\n style={selectStyle}\n >\n <option value=\"prop\">{labels.properties.langConfigStrategies.prop}</option>\n <option value=\"browser\">{labels.properties.langConfigStrategies.browser}</option>\n <option value=\"selector\">{labels.properties.langConfigStrategies.selector}</option>\n <option value=\"auto\">{labels.properties.langConfigStrategies.auto}</option>\n </select>\n </div>\n\n {langConfig.strategy === 'selector' && (\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigSelectorPosition}</label>\n <select\n data-testid=\"lang-selector-position-select\"\n value={langConfig.selectorPosition ?? 'top'}\n onChange={(e) =>\n applyLangConfig({\n ...langConfig,\n selectorPosition: e.target.value as 'top' | 'bottom',\n })\n }\n style={selectStyle}\n >\n <option value=\"top\">{labels.properties.langConfigPositions.top}</option>\n <option value=\"bottom\">{labels.properties.langConfigPositions.bottom}</option>\n </select>\n </div>\n )}\n\n {confirmRemoveLang && (\n <div\n data-testid=\"lang-remove-confirm\"\n style={{\n padding: '8px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '6px',\n fontSize: '12px',\n color: '#b91c1c',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <span>{labels.properties.langConfigConfirmRemove(confirmRemoveLang)}</span>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"lang-remove-confirm-yes\"\n onClick={() => performRemoveLang(confirmRemoveLang)}\n style={{\n padding: '4px 10px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#ef4444',\n color: '#fff',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.properties.langConfigConfirmYes}\n </button>\n <button\n type=\"button\"\n data-testid=\"lang-remove-confirm-no\"\n onClick={cancelRemove}\n style={{\n padding: '4px 10px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.properties.langConfigConfirmNo}\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Mutation helper — walks the form schema and either strips a language key\n * from every LocalizedString (when more than one lang remains) or flattens\n * each LocalizedString to a plain string keyed by `keepLang` (when only one\n * lang remains after removal).\n */\nfunction stripLangFromForm(\n form: IFormDefinition,\n removeLang: string,\n keepLang: string,\n flattenToPlain: boolean,\n): IFormDefinition {\n const transform = (v: LocalizedString | undefined): LocalizedString | undefined => {\n if (v === undefined) return undefined\n if (typeof v === 'string') return v\n const copy = { ...v }\n delete copy[removeLang]\n if (flattenToPlain) {\n // Use flattenLocalized fallback chain: keepLang → 'fr' → first non-empty.\n return flattenLocalized(copy, keepLang, 'fr')\n }\n return copy\n }\n\n const transformOption = (opt: IVariableOption): IVariableOption => ({\n ...opt,\n label: transform(opt.label) ?? '',\n })\n\n const transformValidation = (rule: IValidationRule): IValidationRule => ({\n ...rule,\n message: transform(rule.message) ?? '',\n })\n\n const transformCondition = (c: IConditionRule): IConditionRule => ({\n ...c,\n errorMessage: transform(c.errorMessage),\n })\n\n const transformVariable = (v: IFormVariable): IFormVariable => ({\n ...v,\n name: transform(v.name) ?? '',\n description: transform(v.description),\n placeholder: transform(v.placeholder),\n options: v.options ? v.options.map(transformOption) : v.options,\n validationRules: v.validationRules ? v.validationRules.map(transformValidation) : v.validationRules,\n conditions: v.conditions ? v.conditions.map(transformCondition) : v.conditions,\n })\n\n const transformRoster = (r: IFormRoster): IFormRoster => ({\n ...r,\n name: transform(r.name) ?? '',\n options: r.options ? r.options.map(transformOption) : r.options,\n variables: r.variables.map(transformVariable),\n conditions: r.conditions ? r.conditions.map(transformCondition) : r.conditions,\n })\n\n const transformRepeatConfig = (cfg: IRepeatConfig): IRepeatConfig => ({\n ...cfg,\n instanceLabel: transform(cfg.instanceLabel),\n })\n\n const transformPage = (p: IFormPage): IFormPage => ({\n ...p,\n name: transform(p.name) ?? '',\n repeatConfig: p.repeatConfig ? transformRepeatConfig(p.repeatConfig) : p.repeatConfig,\n variables: p.variables.map(transformVariable),\n rosters: p.rosters.map(transformRoster),\n conditions: p.conditions ? p.conditions.map(transformCondition) : p.conditions,\n })\n\n return {\n ...form,\n name: transform(form.name) ?? '',\n description: transform(form.description),\n pages: form.pages.map(transformPage),\n }\n}\n\nexport function PropertyField({\n label,\n value,\n onChange,\n multiline,\n type = 'text',\n}: {\n label: string\n value: string\n onChange: (value: string) => void\n multiline?: boolean\n type?: string\n}) {\n const inputStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }\n\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n {multiline ? (\n <textarea value={value} onChange={(e) => onChange(e.target.value)} rows={3} style={inputStyle} />\n ) : (\n <input type={type} value={value} onChange={(e) => onChange(e.target.value)} style={inputStyle} />\n )}\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { useLabels } from '../../i18n'\nimport type { IFormPage } from '@msbci/form-core'\n\nexport function PageProperties({ page }: { page: IFormPage }) {\n const { updatePage } = useEditorStore()\n const labels = useLabels()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={page.name}\n onChange={(v) => updatePage(page.code, { name: v })}\n testIdPrefix=\"page-name\"\n />\n <PropertyField label={labels.properties.code} value={page.code} onChange={() => {}} />\n\n <div>\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={page.isRepeatable}\n onChange={(e) => updatePage(page.code, {\n isRepeatable: e.target.checked,\n repeatConfig: e.target.checked ? { min: 1, max: 10 } : undefined,\n })}\n />\n {labels.properties.repeatablePage}\n </label>\n </div>\n\n {page.isRepeatable && page.repeatConfig && (\n <div style={{ padding: '8px', backgroundColor: '#f8fafc', borderRadius: '6px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <PropertyField\n label={labels.properties.minInstances}\n value={String(page.repeatConfig.min ?? 1)}\n type=\"number\"\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, min: parseInt(v) || 1 } })}\n />\n <PropertyField\n label={labels.properties.maxInstances}\n value={String(page.repeatConfig.max ?? 10)}\n type=\"number\"\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, max: parseInt(v) || 10 } })}\n />\n <PropertyField\n label={labels.properties.controlVariableCode}\n value={page.repeatConfig.controlVariableCode ?? ''}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, controlVariableCode: v || undefined } })}\n />\n <LocalizedField\n label={labels.properties.instanceLabel}\n value={page.repeatConfig.instanceLabel}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, instanceLabel: v } })}\n testIdPrefix=\"page-instance-label\"\n />\n </div>\n )}\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.properties.pageSummary(page.variables.length, page.rosters.length)}\n </div>\n </div>\n )\n}\n","/**\n * ConditionBuilder — visual AND/OR condition constructor.\n *\n * Allows building condition rules visually:\n * - Add/remove rules\n * - Select source variable, operator, value\n * - Group rules with AND/OR logic\n * - Preview as expression string\n * - Select condition action (show, hide, validate, setValue)\n */\n\nimport { useMemo, useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { LocalizedInput } from './LocalizedInput'\nimport type {\n IConditionRule,\n ConditionAction,\n ConditionOperator,\n IRosterVariableRef,\n} from '@msbci/form-core'\nimport { DEFAULT_LANG_CONFIG, generateId, RosterConditionEngine } from '@msbci/form-core'\n\ninterface ConditionRuleUI {\n id: string\n variableCode: string\n operator: ConditionOperator\n value: string\n}\n\ninterface ConditionGroupUI {\n logic: 'and' | 'or'\n rules: ConditionRuleUI[]\n}\n\nconst OPERATOR_VALUES: ConditionOperator[] = [\n 'equals',\n 'not_equals',\n 'greater_than',\n 'less_than',\n 'greater_than_or_equal',\n 'less_than_or_equal',\n 'contains',\n 'not_contains',\n 'is_empty',\n 'is_not_empty',\n 'starts_with',\n 'ends_with',\n 'in',\n 'regex',\n]\n\nconst ACTION_VALUES: ConditionAction[] = [\n 'show',\n 'hide',\n 'validate',\n 'require',\n 'readonly',\n 'setValue',\n]\n\nconst NO_VALUE_OPERATORS: ConditionOperator[] = ['is_empty', 'is_not_empty']\n\nexport interface RosterConditionContext {\n /** Variables that belong to the same roster row (scope-restricted). */\n variables: IRosterVariableRef[]\n /** Code of the variable whose conditions are being edited. */\n currentVariableCode: string\n /** Order of the variable whose conditions are being edited. */\n currentVariableOrder: number\n}\n\nexport interface ConditionBuilderProps {\n conditions: IConditionRule[]\n onChange: (conditions: IConditionRule[]) => void\n /** All variable codes available in the form (for the source selector) */\n availableVariables: Array<{ code: string; name: string }>\n /**\n * When set, conditions are validated against the roster scope using\n * RosterConditionEngine. Scope errors are displayed under each rule.\n */\n rosterContext?: RosterConditionContext\n}\n\nexport function ConditionBuilder({\n conditions,\n onChange,\n availableVariables,\n rosterContext,\n}: ConditionBuilderProps) {\n const labels = useLabels()\n const [expandedId, setExpandedId] = useState<string | null>(null)\n\n const handleAdd = () => {\n const newCondition: IConditionRule = {\n id: generateId(),\n action: 'show',\n expression: '',\n }\n onChange([...conditions, newCondition])\n setExpandedId(newCondition.id)\n }\n\n const handleRemove = (id: string) => {\n onChange(conditions.filter((c) => c.id !== id))\n if (expandedId === id) setExpandedId(null)\n }\n\n const handleUpdate = (id: string, updates: Partial<IConditionRule>) => {\n onChange(conditions.map((c) => (c.id === id ? { ...c, ...updates } : c)))\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.conditionBuilder.conditionsCount(conditions.length)}\n </div>\n\n {conditions.map((condition) => (\n <ConditionRuleEditor\n key={condition.id}\n condition={condition}\n isExpanded={expandedId === condition.id}\n onToggle={() => setExpandedId(expandedId === condition.id ? null : condition.id)}\n onUpdate={(updates) => handleUpdate(condition.id, updates)}\n onRemove={() => handleRemove(condition.id)}\n availableVariables={availableVariables}\n rosterContext={rosterContext}\n />\n ))}\n\n <button\n type=\"button\"\n onClick={handleAdd}\n style={{\n padding: '6px 12px',\n border: '1px dashed #cbd5e1',\n borderRadius: '6px',\n backgroundColor: 'transparent',\n color: '#2563eb',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.addCondition}\n </button>\n </div>\n )\n}\n\nfunction ConditionRuleEditor({\n condition,\n isExpanded,\n onToggle,\n onUpdate,\n onRemove,\n availableVariables,\n rosterContext,\n}: {\n condition: IConditionRule\n isExpanded: boolean\n onToggle: () => void\n onUpdate: (updates: Partial<IConditionRule>) => void\n onRemove: () => void\n availableVariables: Array<{ code: string; name: string }>\n rosterContext?: RosterConditionContext\n}) {\n const labels = useLabels()\n // Parse the visual state from condition\n const [group, setGroup] = useState<ConditionGroupUI>(() => parseExpressionToGroup(condition.expression))\n\n const syncExpression = (g: ConditionGroupUI, action: ConditionAction) => {\n setGroup(g)\n const expr = groupToExpression(g, action)\n onUpdate({ expression: expr })\n }\n\n const handleActionChange = (action: ConditionAction) => {\n onUpdate({ action })\n const expr = groupToExpression(group, action)\n onUpdate({ action, expression: expr })\n }\n\n const handleAddRule = () => {\n const newRule: ConditionRuleUI = { id: generateId(), variableCode: '', operator: 'equals', value: '' }\n const newGroup = { ...group, rules: [...group.rules, newRule] }\n syncExpression(newGroup, condition.action)\n }\n\n const handleRemoveRule = (ruleId: string) => {\n const newGroup = { ...group, rules: group.rules.filter((r) => r.id !== ruleId) }\n syncExpression(newGroup, condition.action)\n }\n\n const handleRuleChange = (ruleId: string, updates: Partial<ConditionRuleUI>) => {\n const newGroup = {\n ...group,\n rules: group.rules.map((r) => (r.id === ruleId ? { ...r, ...updates } : r)),\n }\n syncExpression(newGroup, condition.action)\n }\n\n const handleLogicChange = (logic: 'and' | 'or') => {\n const newGroup = { ...group, logic }\n syncExpression(newGroup, condition.action)\n }\n\n const actionLabel = labels.conditionBuilder.actions[condition.action] ?? condition.action\n\n return (\n <div style={{ border: '1px solid #e2e8f0', borderRadius: '6px', overflow: 'hidden' }}>\n {/* Header */}\n <div\n onClick={onToggle}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n padding: '6px 10px', backgroundColor: '#f8fafc', cursor: 'pointer',\n fontSize: '12px', color: '#334155',\n }}\n >\n <span style={{ fontWeight: 500 }}>\n {actionLabel}{group.rules.length > 0 ? labels.conditionBuilder.rulesCount(group.rules.length) : ''}\n </span>\n <div style={{ display: 'flex', gap: '4px' }}>\n <span style={{ color: '#94a3b8' }}>{isExpanded ? '▲' : '▼'}</span>\n <span\n onClick={(e) => { e.stopPropagation(); onRemove() }}\n style={{ color: '#ef4444', cursor: 'pointer', padding: '0 4px' }}\n role=\"button\"\n >\n ×\n </span>\n </div>\n </div>\n\n {/* Expanded editor */}\n {isExpanded && (\n <div style={{ padding: '10px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {/* Action select */}\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.action}\n </label>\n <select\n value={condition.action}\n onChange={(e) => handleActionChange(e.target.value as ConditionAction)}\n style={selectStyle}\n >\n {ACTION_VALUES.map((a) => (\n <option key={a} value={a}>{labels.conditionBuilder.actions[a]}</option>\n ))}\n </select>\n </div>\n\n {/* Logic toggle */}\n {group.rules.length > 1 && (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <span style={{ fontSize: '11px', color: '#64748b' }}>{labels.conditionBuilder.match}</span>\n <button\n type=\"button\"\n onClick={() => handleLogicChange('and')}\n style={{\n ...pillStyle,\n backgroundColor: group.logic === 'and' ? '#2563eb' : '#f1f5f9',\n color: group.logic === 'and' ? '#fff' : '#64748b',\n }}\n >\n {labels.conditionBuilder.all}\n </button>\n <button\n type=\"button\"\n onClick={() => handleLogicChange('or')}\n style={{\n ...pillStyle,\n backgroundColor: group.logic === 'or' ? '#2563eb' : '#f1f5f9',\n color: group.logic === 'or' ? '#fff' : '#64748b',\n }}\n >\n {labels.conditionBuilder.any}\n </button>\n </div>\n )}\n\n {/* Rules */}\n {group.rules.map((rule) => (\n <div key={rule.id} style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {/* Variable selector */}\n <select\n value={rule.variableCode}\n onChange={(e) => handleRuleChange(rule.id, { variableCode: e.target.value })}\n style={{ ...selectStyle, flex: 1 }}\n >\n <option value=\"\">{labels.conditionBuilder.variablePlaceholder}</option>\n {availableVariables.map((v) => (\n <option key={v.code} value={v.code}>{v.name} ({v.code})</option>\n ))}\n </select>\n\n {/* Operator */}\n <select\n value={rule.operator}\n onChange={(e) => handleRuleChange(rule.id, { operator: e.target.value as ConditionOperator })}\n style={{ ...selectStyle, width: '130px' }}\n >\n {OPERATOR_VALUES.map((o) => (\n <option key={o} value={o}>{labels.conditionBuilder.operators[o]}</option>\n ))}\n </select>\n\n {/* Value (hidden for is_empty/is_not_empty) */}\n {!NO_VALUE_OPERATORS.includes(rule.operator) && (\n <input\n type=\"text\"\n value={rule.value}\n onChange={(e) => handleRuleChange(rule.id, { value: e.target.value })}\n placeholder={labels.conditionBuilder.valuePlaceholder}\n style={{ ...inputStyle, flex: 1 }}\n />\n )}\n\n {/* Remove rule */}\n <button\n type=\"button\"\n onClick={() => handleRemoveRule(rule.id)}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px', padding: '2px' }}\n >\n ×\n </button>\n </div>\n ))}\n\n <button\n type=\"button\"\n onClick={handleAddRule}\n style={{\n padding: '4px 8px', border: '1px dashed #cbd5e1', borderRadius: '4px',\n backgroundColor: 'transparent', color: '#64748b', fontSize: '11px', cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.addRule}\n </button>\n\n {/* Expression preview */}\n {condition.expression && (\n <div style={{ padding: '6px 8px', backgroundColor: '#f0fdf4', borderRadius: '4px', fontSize: '11px', fontFamily: 'monospace', color: '#166534', wordBreak: 'break-all' }}>\n {condition.expression}\n </div>\n )}\n\n {/* Roster scope errors */}\n {rosterContext && condition.expression && (() => {\n const validation = RosterConditionEngine.validateCondition(\n condition.expression,\n rosterContext.variables,\n rosterContext.currentVariableCode,\n rosterContext.currentVariableOrder,\n )\n if (validation.isValid) return null\n return (\n <div\n data-testid=\"condition-builder-roster-errors\"\n style={{\n padding: '6px 8px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '4px',\n fontSize: '11px',\n color: '#b91c1c',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n }}\n >\n {validation.errors.map((err, i) => (\n <div key={i}>\n <strong>{err.type}</strong>{err.variableCode ? `: \\${${err.variableCode}}` : ''} — {err.message}\n </div>\n ))}\n </div>\n )\n })()}\n\n {/* Error message (for validate action) */}\n {condition.action === 'validate' && (\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.errorMessage}\n </label>\n <ConditionErrorMessageEditor\n value={condition.errorMessage}\n onChange={(next) => onUpdate({ errorMessage: next })}\n placeholder={labels.conditionBuilder.errorMessagePlaceholder}\n />\n </div>\n )}\n\n {/* Target + value (for setValue action) */}\n {condition.action === 'setValue' && (\n <>\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.targetVariableCode}\n </label>\n <input\n type=\"text\"\n value={condition.targetVariableCode ?? ''}\n onChange={(e) => onUpdate({ targetVariableCode: e.target.value || undefined })}\n placeholder={labels.conditionBuilder.targetVariablePlaceholder}\n style={inputStyle}\n />\n </div>\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.valueToSet}\n </label>\n <input\n type=\"text\"\n value={condition.setValue !== undefined ? String(condition.setValue) : ''}\n onChange={(e) => onUpdate({ setValue: e.target.value })}\n placeholder={labels.conditionBuilder.valueToSetPlaceholder}\n style={inputStyle}\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---- Localised error-message editor (wired to form.langConfig) ----\n\nfunction ConditionErrorMessageEditor({\n value,\n onChange,\n placeholder,\n}: {\n value: IConditionRule['errorMessage']\n onChange: (next: IConditionRule['errorMessage']) => void\n placeholder?: string\n}) {\n const form = useEditorStore((s) => s.form)\n const langConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n return (\n <LocalizedInput\n value={value}\n // `onChange` receives a LocalizedString; we pass it through. Empty\n // strings are kept so the admin can clear a translation without\n // dropping the whole field.\n onChange={(next) => onChange(next)}\n availableLangs={langConfig.availableLangs}\n defaultLang={langConfig.defaultLang}\n placeholder={placeholder}\n testIdPrefix=\"condition-error-message\"\n />\n )\n}\n\n// ---- Expression <-> UI conversion ----\n\nfunction operatorToSymbol(op: ConditionOperator): string {\n const map: Record<ConditionOperator, string> = {\n equals: '==', not_equals: '!=', contains: 'contains',\n not_contains: '!contains', starts_with: 'startsWith', ends_with: 'endsWith',\n greater_than: '>', less_than: '<', greater_than_or_equal: '>=', less_than_or_equal: '<=',\n is_empty: 'isEmpty', is_not_empty: 'isNotEmpty', in: 'in', not_in: '!in',\n between: 'between', regex: 'regex',\n }\n return map[op] ?? '=='\n}\n\nfunction groupToExpression(group: ConditionGroupUI, action: ConditionAction): string {\n if (group.rules.length === 0) return ''\n\n const parts = group.rules\n .filter((r) => r.variableCode)\n .map((rule) => {\n const varRef = `\\${${rule.variableCode}}`\n const sym = operatorToSymbol(rule.operator)\n\n if (rule.operator === 'is_empty') return `isEmpty(${varRef})`\n if (rule.operator === 'is_not_empty') return `isNotEmpty(${varRef})`\n if (rule.operator === 'contains') return `contains(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'starts_with') return `startsWith(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'ends_with') return `endsWith(${varRef}, \"${rule.value}\")`\n\n const val = /^\\d+(\\.\\d+)?$/.test(rule.value) ? rule.value : `\"${rule.value}\"`\n return `${varRef} ${sym} ${val}`\n })\n\n if (parts.length === 0) return ''\n\n const joined = parts.join(group.logic === 'and' ? ' && ' : ' || ')\n\n if (action === 'show') return `show(${joined})`\n if (action === 'hide') return `hide(${joined})`\n if (action === 'validate') return `ConditionEval(${joined})`\n return joined\n}\n\nfunction parseExpressionToGroup(expression: string): ConditionGroupUI {\n // Simple parsing — returns a basic group for the visual editor\n // Complex expressions are kept as raw text\n return { logic: 'and', rules: [] }\n}\n\n// ---- Shared styles ----\n\nconst selectStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n\nconst pillStyle: React.CSSProperties = {\n padding: '2px 8px', borderRadius: '10px', border: 'none',\n fontSize: '10px', fontWeight: 600, cursor: 'pointer',\n}\n","/**\n * DataSourceSelector — select a DataSourceConnector + map dependency fields.\n *\n * Allows:\n * - Selecting a registered connector by ID\n * - Mapping dependency keys to variable codes (e.g. departementId → ${DEPARTEMENT})\n * - Previewing the connector configuration\n */\n\nimport { useState } from 'react'\nimport type { IDataSourceConnector } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\n\nexport interface DataSourceSelectorProps {\n /** Currently selected connector ID */\n dataSourceId?: string\n /** Current dependency mapping: { depKey: variableCode } */\n dependencies?: Record<string, string>\n /** Registered connectors available for selection */\n availableConnectors: IDataSourceConnector[]\n /** All variable codes available for dependency mapping */\n availableVariables: Array<{ code: string; name: string }>\n /** Called when connector changes */\n onConnectorChange: (connectorId: string | undefined) => void\n /** Called when dependencies change */\n onDependenciesChange: (dependencies: Record<string, string>) => void\n}\n\nexport function DataSourceSelector({\n dataSourceId,\n dependencies = {},\n availableConnectors,\n availableVariables,\n onConnectorChange,\n onDependenciesChange,\n}: DataSourceSelectorProps) {\n const labels = useLabels()\n const [newDepKey, setNewDepKey] = useState('')\n\n const selectedConnector = availableConnectors.find((c) => c.id === dataSourceId)\n const depEntries = Object.entries(dependencies)\n\n const handleAddDependency = () => {\n if (!newDepKey.trim()) return\n onDependenciesChange({ ...dependencies, [newDepKey.trim()]: '' })\n setNewDepKey('')\n }\n\n const handleRemoveDependency = (key: string) => {\n const next = { ...dependencies }\n delete next[key]\n onDependenciesChange(next)\n }\n\n const handleDepVarChange = (key: string, variableCode: string) => {\n onDependenciesChange({ ...dependencies, [key]: variableCode })\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px', padding: '8px', backgroundColor: '#f0fdf4', borderRadius: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#166534', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.dataSource.title}\n </div>\n\n {/* Connector selector */}\n <div>\n <label style={labelStyle}>{labels.dataSource.connector}</label>\n <select\n value={dataSourceId ?? ''}\n onChange={(e) => {\n const id = e.target.value || undefined\n onConnectorChange(id)\n if (!id) onDependenciesChange({})\n }}\n style={selectStyle}\n >\n <option value=\"\">{labels.dataSource.none}</option>\n {availableConnectors.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name} ({c.id})\n </option>\n ))}\n </select>\n </div>\n\n {/* Connector info */}\n {selectedConnector && (\n <div style={{ fontSize: '11px', color: '#166534', padding: '4px 6px', backgroundColor: '#dcfce7', borderRadius: '4px' }}>\n {labels.dataSource.connectedTo} <strong>{selectedConnector.name}</strong>\n </div>\n )}\n\n {/* Dependencies mapping */}\n {dataSourceId && (\n <>\n <div style={{ fontSize: '11px', fontWeight: 500, color: '#166534' }}>\n {labels.dataSource.dependencies(depEntries.length)}\n </div>\n\n {depEntries.map(([key, varCode]) => (\n <div key={key} style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <span style={{ fontSize: '11px', color: '#334155', minWidth: '60px', fontFamily: 'monospace' }}>\n {key}\n </span>\n <span style={{ fontSize: '11px', color: '#94a3b8' }}>→</span>\n <select\n value={varCode}\n onChange={(e) => handleDepVarChange(key, e.target.value)}\n style={{ ...selectStyle, flex: 1 }}\n >\n <option value=\"\">{labels.dataSource.selectVariable}</option>\n {availableVariables.map((v) => (\n <option key={v.code} value={v.code}>\n {v.name} ({v.code})\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={() => handleRemoveDependency(key)}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px' }}\n >\n ×\n </button>\n </div>\n ))}\n\n {/* Add dependency */}\n <div style={{ display: 'flex', gap: '4px' }}>\n <input\n type=\"text\"\n value={newDepKey}\n onChange={(e) => setNewDepKey(e.target.value)}\n placeholder={labels.dataSource.dependencyKeyPlaceholder}\n style={{ ...inputStyle, flex: 1 }}\n onKeyDown={(e) => e.key === 'Enter' && handleAddDependency()}\n />\n <button\n type=\"button\"\n onClick={handleAddDependency}\n disabled={!newDepKey.trim()}\n style={{\n padding: '4px 8px', border: '1px solid #cbd5e1', borderRadius: '4px',\n backgroundColor: '#fff', color: '#2563eb', fontSize: '11px', cursor: 'pointer',\n opacity: newDepKey.trim() ? 1 : 0.5,\n }}\n >\n {labels.dataSource.addDependency}\n </button>\n </div>\n </>\n )}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n fontSize: '11px', fontWeight: 500, color: '#166534', display: 'block', marginBottom: '2px',\n}\n\nconst selectStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', backgroundColor: '#fff',\n}\n\nconst inputStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n","/**\n * OptionsEditor — inline editor for IVariableOption[] on select / multiselect /\n * radio / checkbox variable types. Provides add/remove/edit with label-to-value\n * slug auto-fill and an empty-field visual warning.\n *\n * Label is a `LocalizedString`: the row uses LocalizedInput so the admin can\n * fill each language tab when the form has more than one available lang.\n * Slug auto-fill uses the value of the default language as its source.\n *\n * Drag & drop reordering is out of scope (handled in a follow-up).\n */\n\nimport { DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport type { IVariableOption, LocalizedString } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\nimport { useEditorStore } from '../../store/editor-store'\nimport { LocalizedInput } from './LocalizedInput'\n\nexport interface OptionsEditorProps {\n options: IVariableOption[]\n onChange: (options: IVariableOption[]) => void\n disabled?: boolean\n}\n\n/**\n * Slugify a label into a value-safe code:\n * \"Très grande équipe\" → \"tres_grande_equipe\"\n * spaces → underscore, diacritics stripped, lowercase, non-alphanum dropped.\n */\nfunction slugifyValue(label: string): string {\n return label\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, '_')\n .replace(/[^a-z0-9_-]/g, '')\n}\n\nfunction asString(value: unknown): string {\n return typeof value === 'string' ? value : value == null ? '' : String(value)\n}\n\n/** Resolves a LocalizedString to a string for slug / empty-check purposes. */\nfunction pickLabelString(label: LocalizedString | undefined, defaultLang: string): string {\n if (label === undefined || label === null) return ''\n if (typeof label === 'string') return label\n const exact = label[defaultLang]\n if (typeof exact === 'string' && exact !== '') return exact\n for (const v of Object.values(label)) {\n if (typeof v === 'string' && v !== '') return v\n }\n return ''\n}\n\nexport function OptionsEditor({ options, onChange, disabled }: OptionsEditorProps) {\n const labels = useLabels()\n const form = useEditorStore((s) => s.form)\n const langConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n\n const updateOption = (index: number, patch: Partial<IVariableOption>) => {\n const next = options.map((opt, i) => (i === index ? { ...opt, ...patch } : opt))\n onChange(next)\n }\n\n const handleLabelChange = (index: number, nextLabel: LocalizedString) => {\n const current = options[index]\n const currentValue = asString(current.value)\n const prevPrimary = pickLabelString(current.label, langConfig.defaultLang)\n const nextPrimary = pickLabelString(nextLabel, langConfig.defaultLang)\n // Auto-fill the slug only when the value is still empty AND the primary\n // label just became non-empty (first time the user types).\n if (currentValue === '' && prevPrimary === '' && nextPrimary !== '') {\n updateOption(index, { label: nextLabel, value: slugifyValue(nextPrimary) })\n } else {\n updateOption(index, { label: nextLabel })\n }\n }\n\n const handleValueChange = (index: number, value: string) => {\n updateOption(index, { value })\n }\n\n const addOption = () => {\n onChange([...options, { label: '', value: '' }])\n }\n\n const removeOption = (index: number) => {\n onChange(options.filter((_, i) => i !== index))\n }\n\n const labelBlock: React.CSSProperties = {\n display: 'block',\n fontSize: '12px',\n fontWeight: 500,\n color: '#64748b',\n marginBottom: '4px',\n }\n\n const valueInputBase: React.CSSProperties = {\n flex: 1,\n padding: '6px 8px',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n }\n\n const okBorder = '1px solid #e2e8f0'\n const errorBorder = '1px solid #ef4444'\n\n return (\n <div data-testid=\"options-editor\">\n <label style={labelBlock}>{labels.optionsEditor.optionsCount(options.length)}</label>\n\n {options.length === 0 && (\n <div\n data-testid=\"options-editor-empty\"\n style={{ fontSize: '12px', color: '#94a3b8', marginBottom: '8px' }}\n >\n {labels.optionsEditor.noOptions}\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {options.map((opt, index) => {\n const primary = pickLabelString(opt.label, langConfig.defaultLang)\n const valueStr = asString(opt.value)\n const labelInvalid = primary.trim() === ''\n const valueInvalid = valueStr.trim() === ''\n return (\n <div\n key={index}\n data-testid={`option-row-${index}`}\n style={{ display: 'flex', alignItems: 'flex-start', gap: '6px' }}\n >\n <div\n aria-label={labels.optionsEditor.optionLabelAria(index)}\n data-testid={`option-label-${index}`}\n style={{ flex: 1, border: labelInvalid ? errorBorder : okBorder, borderRadius: '4px' }}\n >\n <LocalizedInput\n value={opt.label}\n onChange={(next) => handleLabelChange(index, next)}\n availableLangs={langConfig.availableLangs}\n defaultLang={langConfig.defaultLang}\n placeholder={labels.optionsEditor.optionLabelPlaceholder}\n disabled={disabled}\n testIdPrefix={`option-label-input-${index}`}\n />\n </div>\n <input\n type=\"text\"\n aria-label={labels.optionsEditor.optionValueAria(index)}\n data-testid={`option-value-${index}`}\n value={valueStr}\n placeholder={labels.optionsEditor.optionValuePlaceholder}\n disabled={disabled}\n onChange={(e) => handleValueChange(index, e.target.value)}\n style={{ ...valueInputBase, border: valueInvalid ? errorBorder : okBorder, maxWidth: '40%' }}\n />\n <button\n type=\"button\"\n aria-label={labels.optionsEditor.removeOptionAria(index)}\n data-testid={`option-remove-${index}`}\n onClick={() => removeOption(index)}\n disabled={disabled}\n style={{\n width: '24px',\n height: '24px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#64748b',\n cursor: disabled ? 'not-allowed' : 'pointer',\n lineHeight: 1,\n fontSize: '14px',\n }}\n >\n ×\n </button>\n </div>\n )\n })}\n </div>\n\n <button\n type=\"button\"\n data-testid=\"options-editor-add\"\n onClick={addOption}\n disabled={disabled}\n style={{\n marginTop: '8px',\n padding: '6px 10px',\n border: '1px dashed #94a3b8',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: '#2563eb',\n fontSize: '12px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n {labels.optionsEditor.addOption}\n </button>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport { DataSourceSelector } from './DataSourceSelector'\nimport { OptionsEditor } from './OptionsEditor'\nimport { useLabels } from '../../i18n'\nimport type { IFormVariable, VariableType, IConditionRule, IDataSourceConnector, IVariableOption } from '@msbci/form-core'\n\nexport interface VariablePropertiesProps {\n variable: IFormVariable\n pageCode: string\n rosterCode?: string\n /** Data source connectors available for selection */\n availableConnectors?: IDataSourceConnector[]\n}\n\nexport function VariableProperties({\n variable,\n pageCode,\n rosterCode,\n availableConnectors = [],\n}: VariablePropertiesProps) {\n const { form, updateVariable } = useEditorStore()\n const labels = useLabels()\n\n const variableTypes = useMemo<Array<{ value: VariableType; label: string }>>(\n () => [\n { value: 'text', label: labels.toolbox.types.text },\n { value: 'textarea', label: labels.toolbox.types.textarea },\n { value: 'number', label: labels.toolbox.types.number },\n { value: 'date', label: labels.toolbox.types.date },\n { value: 'datetime', label: labels.toolbox.types.datetime },\n { value: 'time', label: labels.toolbox.types.time },\n { value: 'select', label: labels.toolbox.types.select },\n { value: 'multiselect', label: labels.toolbox.types.multiselect },\n { value: 'radio', label: labels.toolbox.types.radio },\n { value: 'checkbox', label: labels.toolbox.types.checkbox },\n { value: 'file', label: labels.toolbox.types.file },\n { value: 'gps', label: labels.toolbox.types.gps },\n { value: 'rating', label: labels.toolbox.types.rating },\n { value: 'calculated', label: labels.toolbox.types.calculated },\n { value: 'hidden', label: labels.toolbox.types.hidden },\n { value: 'label', label: labels.toolbox.types.label },\n ],\n [labels],\n )\n\n const update = (updates: Partial<IFormVariable>) => {\n updateVariable(pageCode, variable.code, updates, rosterCode)\n }\n\n // Collect all variable codes in the form for condition builder / dependency mapping.\n // `name` is LocalizedString — resolve to the form's defaultLang for display.\n const fallbackLang = form.langConfig?.defaultLang ?? 'fr'\n const displayName = (n: IFormVariable['name']): string =>\n typeof n === 'string' ? n : n[fallbackLang] ?? Object.values(n)[0] ?? ''\n const allVariables = form.pages.flatMap((p) => [\n ...p.variables.map((v) => ({ code: v.code, name: displayName(v.name) })),\n ...p.rosters.flatMap((r) => r.variables.map((v) => ({ code: v.code, name: displayName(v.name) }))),\n ])\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={variable.name}\n onChange={(v) => update({ name: v })}\n testIdPrefix=\"variable-name\"\n />\n <PropertyField label={labels.properties.code} value={variable.code} onChange={() => {}} />\n <LocalizedField\n label={labels.properties.description}\n value={variable.description}\n onChange={(v) => update({ description: v })}\n testIdPrefix=\"variable-description\"\n />\n <LocalizedField\n label={labels.properties.placeholder}\n value={variable.placeholder}\n onChange={(v) => update({ placeholder: v })}\n testIdPrefix=\"variable-placeholder\"\n />\n\n {/* Type */}\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.type}\n </label>\n <select\n value={variable.type}\n onChange={(e) => update({ type: e.target.value as VariableType })}\n style={{ width: '100%', padding: '6px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n {variableTypes.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n {/* Rating style */}\n {variable.type === 'rating' && (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.ratingStyle}\n </label>\n <select\n value={(variable.metadata as any)?.ratingStyle ?? 'star'}\n onChange={(e) => update({ metadata: { ...variable.metadata as any, ratingStyle: e.target.value } })}\n style={{ width: '100%', padding: '6px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n <option value=\"star\">{labels.properties.ratingStyles.star}</option>\n <option value=\"number\">{labels.properties.ratingStyles.number}</option>\n <option value=\"color\">{labels.properties.ratingStyles.color}</option>\n </select>\n </div>\n )}\n\n {/* Layout */}\n <div style={{ padding: '8px', backgroundColor: '#f8fafc', borderRadius: '6px', display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase' }}>{labels.properties.layout}</div>\n <CheckboxProperty\n label={labels.properties.startNewRow}\n checked={variable.startWithNewLine !== false}\n onChange={(v) => update({ startWithNewLine: v ? undefined : false })}\n />\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '2px' }}>\n {labels.properties.columnSpan}\n </label>\n <select\n value={variable.colSpan ?? 'auto'}\n onChange={(e) => update({ colSpan: e.target.value === 'auto' ? undefined : parseInt(e.target.value) })}\n style={{ width: '100%', padding: '4px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n <option value=\"auto\">{labels.properties.columnSpanAuto}</option>\n {[1,2,3,4,5,6,7,8,9,10,11,12].map((n) => (\n <option key={n} value={n}>\n {n}/12{n === 6 ? labels.properties.columnSpanHalf : n === 4 ? labels.properties.columnSpanThird : n === 12 ? labels.properties.columnSpanFull : ''}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Flags */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <CheckboxProperty label={labels.properties.required} checked={variable.isRequired} onChange={(v) => update({ isRequired: v })} />\n <CheckboxProperty label={labels.properties.readonly} checked={variable.isReadonly} onChange={(v) => update({ isReadonly: v })} />\n <CheckboxProperty label={labels.properties.hidden} checked={variable.isHidden} onChange={(v) => update({ isHidden: v })} />\n </div>\n\n {/* Calculated expression */}\n {variable.type === 'calculated' && (\n <PropertyField\n label={labels.properties.expression}\n value={variable.expression ?? ''}\n onChange={(v) => update({ expression: v || undefined })}\n multiline\n />\n )}\n\n {/* Data source connector */}\n {['select', 'multiselect', 'radio'].includes(variable.type) && (\n <DataSourceSelector\n dataSourceId={variable.dataSourceId}\n dependencies={variable.dataSourceDependencies}\n availableConnectors={availableConnectors}\n availableVariables={allVariables}\n onConnectorChange={(id) => update({ dataSourceId: id })}\n onDependenciesChange={(deps) => update({ dataSourceDependencies: Object.keys(deps).length > 0 ? deps : undefined })}\n />\n )}\n\n {/* Static options (when no data source) */}\n {['select', 'multiselect', 'radio', 'checkbox'].includes(variable.type) && !variable.dataSourceId && (\n <OptionsEditor\n options={variable.options ?? []}\n onChange={(options: IVariableOption[]) => update({ options })}\n />\n )}\n\n {/* Conditions */}\n <ConditionBuilder\n conditions={variable.conditions ?? []}\n onChange={(conditions) => update({ conditions })}\n availableVariables={allVariables}\n rosterContext={(() => {\n if (!rosterCode) return undefined\n const page = form.pages.find((p) => p.code === pageCode)\n const roster = page?.rosters.find((r) => r.code === rosterCode)\n if (!roster) return undefined\n return {\n variables: roster.variables.map((v) => ({ code: v.code, order: v.order })),\n currentVariableCode: variable.code,\n currentVariableOrder: variable.order,\n }\n })()}\n />\n </div>\n )\n}\n\nfunction CheckboxProperty({\n label,\n checked,\n onChange,\n}: {\n label: string\n checked: boolean\n onChange: (value: boolean) => void\n}) {\n return (\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}>\n <input type=\"checkbox\" checked={checked} onChange={(e) => onChange(e.target.checked)} />\n {label}\n </label>\n )\n}\n","import { useMemo } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { useLabels } from '../../i18n'\nimport type { IFormRoster, RosterType } from '@msbci/form-core'\n\nexport function RosterProperties({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { updateRoster } = useEditorStore()\n const labels = useLabels()\n\n const rosterTypeOptions = useMemo<Array<{ value: RosterType; label: string }>>(\n () => [\n { value: 'check', label: labels.properties.rosterTypes.check },\n { value: 'list', label: labels.properties.rosterTypes.list },\n { value: 'collection', label: labels.properties.rosterTypes.collection },\n { value: 'collection_extend', label: labels.properties.rosterTypes.collection_extend },\n ],\n [labels],\n )\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={roster.name}\n onChange={(v) => updateRoster(pageCode, roster.code, { name: v })}\n testIdPrefix=\"roster-name\"\n />\n <PropertyField label={labels.properties.code} value={roster.code} onChange={() => {}} />\n\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.rosterType}\n </label>\n <select\n value={roster.rosterType}\n onChange={(e) => updateRoster(pageCode, roster.code, { rosterType: e.target.value as RosterType })}\n style={{ width: '100%', padding: '6px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n {rosterTypeOptions.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n <PropertyField\n label={labels.properties.pilotVariableCode}\n value={roster.pilotVariableCode ?? ''}\n onChange={(v) => updateRoster(pageCode, roster.code, { pilotVariableCode: v || undefined })}\n />\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.properties.rosterSummary(roster.variables.length, roster.options?.length ?? 0)}\n </div>\n </div>\n )\n}\n","/**\n * Properties panel — right side of the editor.\n * Contextual based on selection: form, page, roster, or variable.\n */\n\nimport { useEditorStore } from '../../store/editor-store'\nimport { FormProperties } from './FormProperties'\nimport { PageProperties } from './PageProperties'\nimport { VariableProperties } from './VariableProperties'\nimport { RosterProperties } from './RosterProperties'\nimport { useLabels } from '../../i18n'\nimport type { IDataSourceConnector } from '@msbci/form-core'\n\nexport interface PropertiesPanelProps {\n availableConnectors?: IDataSourceConnector[]\n}\n\nexport function PropertiesPanel({ availableConnectors = [] }: PropertiesPanelProps) {\n const { selection, form } = useEditorStore()\n const labels = useLabels()\n\n const content = (() => {\n switch (selection.type) {\n case 'form':\n return <FormProperties />\n\n case 'page': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n return <PageProperties page={page} />\n }\n\n case 'roster': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n const roster = page?.rosters.find((r) => r.code === selection.rosterCode)\n if (!page || !roster) return <FormProperties />\n return <RosterProperties roster={roster} pageCode={page.code} />\n }\n\n case 'variable': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n const roster = selection.rosterCode\n ? page.rosters.find((r) => r.code === selection.rosterCode)\n : undefined\n const variables = roster ? roster.variables : page.variables\n const variable = variables.find((v) => v.code === selection.variableCode)\n if (!variable) return <FormProperties />\n return (\n <VariableProperties\n variable={variable}\n pageCode={page.code}\n rosterCode={selection.rosterCode}\n availableConnectors={availableConnectors}\n />\n )\n }\n }\n })()\n\n return (\n <div\n style={{\n width: '300px',\n borderLeft: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n overflowY: 'auto',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n borderBottom: '1px solid #e2e8f0',\n fontSize: '12px',\n fontWeight: 600,\n color: '#64748b',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n {labels.properties.title}\n </div>\n <div style={{ padding: '16px' }}>{content}</div>\n </div>\n )\n}\n","/**\n * FormEditor — main entry point for the visual form builder.\n *\n * 3-panel layout: Toolbox (left) | Canvas (center) | Properties (right)\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react'\nimport type { ComponentType } from 'react'\nimport { useEditorStore } from '../store/editor-store'\nimport type { IEditorAdapter } from '../store/types'\nimport { EditorToolbar } from './toolbar/EditorToolbar'\nimport { ToolboxSimple } from './toolbox/ToolboxSimple'\nimport { CanvasSimple } from './canvas/CanvasSimple'\nimport { PropertiesPanel } from './properties/PropertiesPanel'\nimport { EditorLabelsProvider, frLabels, mergeLabels } from '../i18n'\nimport type { DeepPartial, IEditorLabels } from '../i18n'\nimport type { IFormDefinition, IDataSourceConnector } from '@msbci/form-core'\n\nexport interface FormEditorProps {\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n adapter?: IEditorAdapter\n initialForm?: IFormDefinition\n formId?: string\n onChange?: (form: IFormDefinition) => void\n onSave?: () => void\n /**\n * Localised labels for every visible string in the editor.\n * Deep-merged with the French defaults — pass only the keys you want to\n * override. Use {@link import('../i18n').enLabels} for English out of the box.\n */\n labels?: DeepPartial<IEditorLabels>\n PreviewComponent?: ComponentType<{\n formSchema: IFormDefinition\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n mode?: string\n }>\n /** Custom Toolbox component (e.g. with drag & drop) */\n ToolboxComponent?: ComponentType<any>\n /** Custom Canvas component (e.g. with sortable drag & drop) */\n CanvasComponent?: ComponentType<any>\n /** Wrapper around the entire editor (e.g. DndContext) */\n Wrapper?: ComponentType<any>\n}\n\nexport function FormEditor({\n theme,\n dataSources,\n adapter,\n initialForm,\n formId,\n onChange,\n onSave,\n labels,\n PreviewComponent,\n ToolboxComponent,\n CanvasComponent,\n Wrapper,\n}: FormEditorProps) {\n const { form, view, setForm, setAdapter, load } = useEditorStore()\n const resolvedLabels = useMemo(() => mergeLabels(frLabels, labels), [labels])\n\n useEffect(() => {\n if (adapter) setAdapter(adapter)\n }, [adapter, setAdapter])\n\n useEffect(() => {\n if (initialForm) {\n setForm(initialForm)\n } else if (formId && adapter?.loadForm) {\n load(formId)\n }\n }, [initialForm, formId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Notify parent of changes — skip initial setForm to avoid loops\n const onChangeRef = useRef(onChange)\n const isInitialRef = useRef(true)\n onChangeRef.current = onChange\n useEffect(() => {\n if (isInitialRef.current) {\n isInitialRef.current = false\n return\n }\n onChangeRef.current?.(form)\n }, [form])\n\n const ActualToolbox = ToolboxComponent ?? ToolboxSimple\n const ActualCanvas = CanvasComponent ?? CanvasSimple\n const ActualWrapper = Wrapper ?? React.Fragment\n\n const content = (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <EditorToolbar onSave={onSave} />\n\n <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n {view === 'canvas' && (\n <>\n <ActualToolbox />\n <ActualCanvas />\n <PropertiesPanel availableConnectors={dataSources ? Object.values(dataSources) : []} />\n </>\n )}\n\n {view === 'preview' && PreviewComponent && (\n <div style={{ flex: 1, overflow: 'auto' }}>\n <PreviewComponent\n formSchema={form}\n theme={theme}\n dataSources={dataSources}\n mode=\"fill\"\n />\n </div>\n )}\n\n {view === 'preview' && !PreviewComponent && (\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>\n {resolvedLabels.formEditor.previewMissing}\n </div>\n )}\n\n {view === 'json' && (\n <div style={{ flex: 1, overflow: 'auto', padding: '16px' }}>\n <pre style={{\n fontFamily: 'monospace', fontSize: '12px', color: '#334155',\n backgroundColor: '#f8fafc', padding: '16px', borderRadius: '8px',\n border: '1px solid #e2e8f0', whiteSpace: 'pre-wrap', wordBreak: 'break-all',\n }}>\n {JSON.stringify(form, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n )\n\n return (\n <EditorLabelsProvider labels={resolvedLabels}>\n <ActualWrapper>{content}</ActualWrapper>\n </EditorLabelsProvider>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/store/editor-store.ts","../src/i18n/fr.ts","../src/i18n/en.ts","../src/i18n/EditorLabelsContext.tsx","../src/components/dialogs/FormTypesDialog.tsx","../src/components/toolbar/EditorToolbar.tsx","../src/components/toolbox/Toolbox.tsx","../src/components/canvas/Canvas.tsx","../src/components/DndManager.tsx","../src/components/properties/LocalizedInput.tsx","../src/components/properties/FormProperties.tsx","../src/components/properties/PageProperties.tsx","../src/components/properties/ConditionBuilder.tsx","../src/components/properties/DataSourceSelector.tsx","../src/components/properties/OptionsEditor.tsx","../src/components/properties/VariableProperties.tsx","../src/components/properties/RosterProperties.tsx","../src/components/properties/PropertiesPanel.tsx","../src/components/FormEditor.tsx","../src/components/toolbox/ToolboxSimple.tsx","../src/components/canvas/CanvasSimple.tsx"],"names":["variableFromTemplate","template","order","generateId","applyOverrideMirror","variable","key","value","templateValueForKey","MAX_HISTORY","emptyForm","withPageItems","page","transform","current","getPageVariables","getPageRosters","_v","_r","rest","useEditorStore","create","set","get","pushHistory","description","state","entry","deepClone","history","mutateForm","mutator","newForm","form","migrateFormToItems","updates","normalised","pageCode","p","orderedCodes","pageMap","reordered","code","index","roster","items","rosterCode","item","isPageRoster","variableCode","isPageVariable","v","inserted","updateVariableInList","nextOverrides","templates","restoreVariable","overrides","t","restoredValue","fromPageCode","toPageCode","newOrder","fromRosterCode","toRosterCode","movedVariable","pagesAfterRemove","vv","pagesAfterInsert","a","b","fromIndex","toIndex","next","moved","idx","selection","view","historyIndex","nextIndex","type","newType","id","patch","_drop","s","adapter","formId","serializeForm","json","deserializeForm","frLabels","fields","rosters","vars","typeLabel","pages","variables","options","lang","count","rules","name","enLabels","EditorLabelsContext","createContext","EditorLabelsProvider","labels","children","jsx","useLabels","useContext","isPlainObject","proto","mergeLabels","base","override","mergeDeep","result","baseValue","overrideValue","FormTypesDialog","open","onClose","formTypes","addFormType","updateFormType","removeFormType","newName","setNewName","useState","newCode","setNewCode","editingId","setEditingId","editName","setEditName","confirmDeleteId","setConfirmDeleteId","handleAdd","startEdit","currentName","commitEdit","askDelete","confirmDelete","jsxs","e","isEditing","inUse","awaitingConfirm","EditorToolbar","onSave","onExport","onImport","updateFormMeta","setView","isDirty","isSaving","canUndo","canRedo","undo","redo","save","addPage","showFormTypesDialog","setShowFormTypesDialog","handleSave","handleAddPage","nextOrder","viewButtons","resolveLabel","DEFAULT_LANG_CONFIG","defaultLang","ToolbarButton","btn","onClick","label","primary","disabled","title","Toolbox","tab","setTab","search","setSearch","availableTemplates","filteredGroups","useMemo","group","ToolboxTabs","ToolboxItem","VariablesDndTab","baseTab","activeTab","data","attributes","listeners","setNodeRef","isDragging","useDraggable","scopeId","emptyState","text","needle","matches","codeMatch","nameMatch","resolveLocalized","ToolboxTemplateItem","useCanvasResolve","Canvas","pageSortIds","SortableContext","verticalListSortingStrategy","CanvasPage","select","resolveCanvas","isSelected","transition","isOver","useSortable","variableCount","i","CSS","it","CanvasRoster","CanvasVariable","addVariable","setDropRef","useDroppable","handleAddVarToRoster","readItems","genCode","prefix","createDragEndHandler","actions","getForm","event","active","over","resolveTarget","od","target","variableType","rosterType","sorted","q","oldIdx","newIdx","arrayMove","fromPage","isTopLevel","side","aTop","oTop","activeCode","overCode","fromIdx","toIdx","toPage","toRoster","DndManager","store","dragLabel","setDragLabel","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","handleDragEnd","DndContext","closestCenter","DragOverlay","flattenLocalized","keepLang","fallbackLang","exact","fb","inputBase","tabBase","valueFor","LocalizedInput","onChange","availableLangs","placeholder","multiline","testIdPrefix","langs","isMulti","activeLang","setActiveLang","handleChange","isActive","LocalizedField","langConfig","SUPPORTED_LANGS","FormProperties","totalVariables","sum","rs","r","PropertyField","LangConfigSection","setForm","confirmRemoveLang","setConfirmRemoveLang","sectionLabel","selectStyle","applyLangConfig","addLang","requestRemoveLang","performRemoveLang","nextLangs","l","nextDefault","nextForm","stripLangFromForm","nextLangConfig","cancelRemove","isEnabled","isDefault","isOnlyOne","removeLang","flattenToPlain","copy","transformOption","opt","transformValidation","rule","transformCondition","c","transformVariable","transformRoster","transformRepeatConfig","cfg","transformItem","transformPage","readOnly","inputStyle","PageProperties","updatePage","OPERATOR_VALUES","ACTION_VALUES","NO_VALUE_OPERATORS","ConditionBuilder","conditions","availableVariables","rosterContext","expandedId","setExpandedId","newCondition","handleRemove","handleUpdate","condition","ConditionRuleEditor","isExpanded","onToggle","onUpdate","onRemove","setGroup","parseExpressionToGroup","syncExpression","action","expr","groupToExpression","handleActionChange","handleAddRule","newRule","newGroup","handleRemoveRule","ruleId","handleRuleChange","handleLogicChange","logic","actionLabel","pillStyle","o","validation","RosterConditionEngine","err","ConditionErrorMessageEditor","Fragment","operatorToSymbol","op","parts","varRef","sym","val","joined","expression","DataSourceSelector","dataSourceId","dependencies","availableConnectors","onConnectorChange","onDependenciesChange","newDepKey","setNewDepKey","selectedConnector","depEntries","handleAddDependency","handleRemoveDependency","handleDepVarChange","labelStyle","varCode","slugifyValue","asString","pickLabelString","OptionsEditor","updateOption","handleLabelChange","nextLabel","currentValue","prevPrimary","nextPrimary","handleValueChange","addOption","removeOption","_","labelBlock","valueInputBase","okBorder","errorBorder","valueStr","labelInvalid","valueInvalid","OVERRIDE_FIELDS","variableToOverrideKey","field","VariableProperties","updateVariable","setVariableOverride","resetVariableOverride","variableTypes","isLinked","update","instanceUpdates","hasInstance","k","overrideKey","isOverridden","handleReset","displayName","n","allVariables","LinkedTemplateBanner","ReadOnlyLocalizedField","FieldWithReset","CheckboxProperty","deps","templateCodeLabel","templateNameLabel","bannerTitle","testId","onReset","resetLabel","inline","button","checked","RosterProperties","updateRoster","rosterTypeOptions","PropertiesPanel","content","FormEditor","theme","dataSources","initialForm","PreviewComponent","ToolboxComponent","CanvasComponent","Wrapper","setAdapter","load","setAvailableTemplates","resolvedLabels","useEffect","cancelled","onChangeRef","useRef","isInitialRef","ActualToolbox","ActualCanvas","wrapperWarnedRef","OuterWrapper","React","ToolboxSimple","addRoster","addVariableFromTemplate","GROUPS","handleAddTemplate","filtered","g","itemKey","VariablesTab","onAdd","groupItemsIntoRows","rows","currentVarRow","CanvasSimple","PageBlock","removePage","rosterCount","row","rowIdx","RosterBlock","VarRow","removeVariable","removeRoster"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Editor store — Zustand store managing the complete editor state.\n *\n * All form mutations go through this store, which:\n * 1. Applies the change to the form definition\n * 2. Pushes a history entry (for undo/redo)\n * 3. Marks the form as dirty\n */\n\nimport { create } from 'zustand'\nimport {\n serializeForm,\n deserializeForm,\n generateId,\n getPageVariables,\n getPageRosters,\n isPageRoster,\n isPageVariable,\n migrateFormToItems,\n} from '@msbci/form-core'\nimport type {\n IFormDefinition,\n IFormPage,\n IFormPageItem,\n IFormRoster,\n IFormVariable,\n IFormType,\n IVariableTemplate,\n IVariableTemplateOverrides,\n} from '@msbci/form-core'\nimport type { EditorStore, EditorSelection, EditorView, HistoryEntry, IEditorAdapter } from './types'\nimport { deepClone } from '@msbci/form-core'\n\n/**\n * Copy the surchargeable fields of a template onto a brand-new variable.\n * `code` / `name` are also taken from the template (immutable identity);\n * `templateOverrides` is initialised empty.\n */\nfunction variableFromTemplate(template: IVariableTemplate, order: number): IFormVariable {\n return {\n itemType: 'variable',\n id: generateId(),\n code: template.code,\n name: template.name,\n type: template.variableType,\n order,\n isRequired: template.isRequired ?? false,\n isReadonly: template.isReadonly ?? false,\n isHidden: template.isHidden ?? false,\n description: template.description,\n placeholder: template.placeholder,\n options: template.options,\n validationRules: template.validationRules,\n conditions: template.conditions,\n expression: template.expression,\n dataSourceId: template.dataSourceId,\n dataSourceDependencies: template.dataSourceDependencies,\n style: template.style,\n metadata: template.metadata,\n templateId: template.id,\n templateOverrides: {},\n }\n}\n\n/**\n * Mirror an override-key onto the variable's matching field so the canvas\n * shows the latest value without consulting the resolver. The `type` field\n * is special-cased: it lives under `variableType` in overrides but `type`\n * on the variable.\n */\nfunction applyOverrideMirror(\n variable: IFormVariable,\n key: keyof IVariableTemplateOverrides,\n value: unknown,\n): IFormVariable {\n if (key === 'variableType') {\n return { ...variable, type: value as IFormVariable['type'] }\n }\n return { ...variable, [key]: value } as IFormVariable\n}\n\n/**\n * Read the canonical value for a key from a template (handling the\n * `variableType` → `type` rename in the same way).\n */\nfunction templateValueForKey(\n template: IVariableTemplate,\n key: keyof IVariableTemplateOverrides,\n): unknown {\n if (key === 'variableType') return template.variableType\n return (template as unknown as Record<string, unknown>)[key as string]\n}\n\nconst MAX_HISTORY = 50\n\nfunction emptyForm(): IFormDefinition {\n return {\n id: '',\n code: '',\n name: 'New Form',\n version: '1.0.0',\n isPublished: false,\n pages: [],\n }\n}\n\n/**\n * Map over `page.items`, applying a per-item transform. Always returns a\n * fresh array. If a page is still in the legacy `variables[]` + `rosters[]`\n * shape (test fixtures, external adapters), it is normalised first so the\n * store only ever operates on `items[]`.\n */\nfunction withPageItems(\n page: IFormPage,\n transform: (items: IFormPageItem[]) => IFormPageItem[],\n): IFormPage {\n const current = Array.isArray(page.items)\n ? page.items\n : [...getPageVariables(page), ...getPageRosters(page)]\n const { variables: _v, rosters: _r, ...rest } = page\n void _v\n void _r\n return { ...rest, items: transform(current) }\n}\n\nexport const useEditorStore = create<EditorStore>((set, get) => {\n /** Push current form state to history before a mutation */\n function pushHistory(description: string) {\n const state = get()\n const entry: HistoryEntry = {\n form: deepClone(state.form),\n description,\n timestamp: Date.now(),\n }\n\n // Truncate forward history if we're not at the end\n const history = state.history.slice(0, state.historyIndex + 1)\n history.push(entry)\n\n // Limit history size\n if (history.length > MAX_HISTORY) {\n history.shift()\n }\n\n set({ history, historyIndex: history.length - 1 })\n }\n\n /** Apply a form mutation with history tracking */\n function mutateForm(description: string, mutator: (form: IFormDefinition) => IFormDefinition) {\n pushHistory(description)\n const state = get()\n const newForm = mutator(deepClone(state.form))\n set({ form: newForm, isDirty: true })\n }\n\n return {\n // Initial state\n form: emptyForm(),\n formTypes: [],\n selection: { type: 'form' },\n view: 'canvas',\n isDirty: false,\n isSaving: false,\n history: [],\n historyIndex: -1,\n adapter: null,\n availableTemplates: [],\n\n // --- Form CRUD ---\n\n setForm: (form) => {\n set({\n form: migrateFormToItems(deepClone(form)),\n isDirty: false,\n history: [],\n historyIndex: -1,\n selection: { type: 'form' },\n })\n },\n\n updateFormMeta: (updates) => {\n mutateForm('Update form metadata', (form) => ({ ...form, ...updates }))\n },\n\n // --- Page operations ---\n\n addPage: (page) => {\n const normalised: IFormPage = Array.isArray(page.items)\n ? page\n : { ...page, items: [...(page.variables ?? []), ...(page.rosters ?? [])] }\n mutateForm(`Add page \"${normalised.name}\"`, (form) => ({\n ...form,\n pages: [...form.pages, normalised],\n }))\n },\n\n updatePage: (pageCode, updates) => {\n mutateForm(`Update page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => (p.code === pageCode ? { ...p, ...updates } : p)),\n }))\n },\n\n removePage: (pageCode) => {\n mutateForm(`Remove page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.filter((p) => p.code !== pageCode),\n }))\n const state = get()\n if (state.selection.type === 'page' && state.selection.pageCode === pageCode) {\n set({ selection: { type: 'form' } })\n }\n },\n\n reorderPages: (orderedCodes) => {\n mutateForm('Reorder pages', (form) => {\n const pageMap = new Map(form.pages.map((p) => [p.code, p]))\n const reordered = orderedCodes\n .map((code, index) => {\n const page = pageMap.get(code)\n return page ? { ...page, order: index } : undefined\n })\n .filter((p): p is IFormPage => p !== undefined)\n return { ...form, pages: reordered }\n })\n },\n\n // --- Roster operations ---\n\n addRoster: (pageCode, roster) => {\n mutateForm(`Add roster \"${roster.name}\" to page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n return withPageItems(p, (items) => [\n ...items,\n { ...roster, itemType: 'roster' as const, order: items.length },\n ])\n }),\n }))\n },\n\n updateRoster: (pageCode, rosterCode, updates) => {\n mutateForm(`Update roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === rosterCode\n ? ({ ...item, ...updates, itemType: 'roster' as const } as IFormRoster)\n : item,\n ),\n )\n }),\n }))\n },\n\n removeRoster: (pageCode, rosterCode) => {\n mutateForm(`Remove roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n return withPageItems(p, (items) =>\n items.filter((item) => !(isPageRoster(item) && item.code === rosterCode)),\n )\n }),\n }))\n },\n\n // --- Variable operations ---\n\n addVariable: (pageCode, variable, rosterCode) => {\n mutateForm(`Add variable \"${variable.name}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === rosterCode\n ? { ...item, variables: [...item.variables, variable] }\n : item,\n ),\n )\n }\n return withPageItems(p, (items) => [\n ...items,\n { ...variable, itemType: 'variable' as const, order: items.length },\n ])\n }),\n }))\n },\n\n updateVariable: (pageCode, variableCode, updates, rosterCode) => {\n mutateForm(`Update variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === rosterCode\n ? {\n ...item,\n variables: item.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n : item,\n ),\n )\n }\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageVariable(item) && item.code === variableCode\n ? ({ ...item, ...updates, itemType: 'variable' as const } as IFormVariable)\n : item,\n ),\n )\n }),\n }))\n },\n\n removeVariable: (pageCode, variableCode, rosterCode) => {\n mutateForm(`Remove variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === rosterCode\n ? {\n ...item,\n variables: item.variables.filter((v) => v.code !== variableCode),\n }\n : item,\n ),\n )\n }\n return withPageItems(p, (items) =>\n items.filter((item) => !(isPageVariable(item) && item.code === variableCode)),\n )\n }),\n }))\n },\n\n addVariableFromTemplate: (pageCode, template, rosterCode) => {\n mutateForm(`Add variable from template \"${template.code}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) => {\n if (!(isPageRoster(item) && item.code === rosterCode)) return item\n const inserted = variableFromTemplate(template, item.variables.length)\n return { ...item, variables: [...item.variables, inserted] }\n }),\n )\n }\n return withPageItems(p, (items) => [\n ...items,\n variableFromTemplate(template, items.length),\n ])\n }),\n }))\n },\n\n setVariableOverride: (pageCode, variableCode, key, value, rosterCode) => {\n mutateForm(`Override \"${String(key)}\" on \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n\n const updateVariableInList = (variable: IFormVariable): IFormVariable => {\n const nextOverrides = {\n ...(variable.templateOverrides ?? {}),\n [key]: value,\n } as IFormVariable['templateOverrides']\n const mirrored = applyOverrideMirror(variable, key, value)\n return { ...mirrored, templateOverrides: nextOverrides }\n }\n\n if (rosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === rosterCode\n ? {\n ...item,\n variables: item.variables.map((v) =>\n v.code === variableCode ? updateVariableInList(v) : v,\n ),\n }\n : item,\n ),\n )\n }\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageVariable(item) && item.code === variableCode\n ? (updateVariableInList(item as IFormVariable) as IFormPageItem)\n : item,\n ),\n )\n }),\n }))\n },\n\n resetVariableOverride: (pageCode, variableCode, key, rosterCode) => {\n const templates = get().availableTemplates\n mutateForm(`Reset override \"${String(key)}\" on \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n\n const restoreVariable = (variable: IFormVariable): IFormVariable => {\n const overrides = { ...(variable.templateOverrides ?? {}) }\n delete (overrides as Record<string, unknown>)[key as string]\n const template = variable.templateId\n ? templates.find((t) => t.id === variable.templateId)\n : undefined\n const restoredValue = template\n ? (templateValueForKey(template, key) as IVariableTemplateOverrides[typeof key])\n : undefined\n const mirrored = applyOverrideMirror(variable, key, restoredValue)\n return { ...mirrored, templateOverrides: overrides }\n }\n\n if (rosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === rosterCode\n ? {\n ...item,\n variables: item.variables.map((v) =>\n v.code === variableCode ? restoreVariable(v) : v,\n ),\n }\n : item,\n ),\n )\n }\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageVariable(item) && item.code === variableCode\n ? (restoreVariable(item as IFormVariable) as IFormPageItem)\n : item,\n ),\n )\n }),\n }))\n },\n\n moveVariable: (fromPageCode, toPageCode, variableCode, newOrder, fromRosterCode, toRosterCode) => {\n mutateForm(`Move variable \"${variableCode}\"`, (form) => {\n let movedVariable: IFormVariable | undefined\n\n // Remove from source page\n const pagesAfterRemove = form.pages.map((p) => {\n if (p.code !== fromPageCode) return p\n if (fromRosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) => {\n if (!(isPageRoster(item) && item.code === fromRosterCode)) return item\n const v = item.variables.find((vv) => vv.code === variableCode)\n if (v) movedVariable = { ...v }\n return {\n ...item,\n variables: item.variables.filter((vv) => vv.code !== variableCode),\n }\n }),\n )\n }\n return withPageItems(p, (items) =>\n items.filter((item) => {\n if (isPageVariable(item) && item.code === variableCode) {\n movedVariable = { ...item }\n return false\n }\n return true\n }),\n )\n })\n\n if (!movedVariable) return form\n movedVariable = { ...movedVariable, order: newOrder, itemType: 'variable' as const }\n\n // Insert into target\n const pagesAfterInsert = pagesAfterRemove.map((p) => {\n if (p.code !== toPageCode) return p\n if (toRosterCode) {\n return withPageItems(p, (items) =>\n items.map((item) =>\n isPageRoster(item) && item.code === toRosterCode\n ? {\n ...item,\n variables: [...item.variables, movedVariable!].sort(\n (a, b) => a.order - b.order,\n ),\n }\n : item,\n ),\n )\n }\n return withPageItems(p, (items) =>\n [...items, movedVariable!].sort((a, b) => a.order - b.order),\n )\n })\n\n return { ...form, pages: pagesAfterInsert }\n })\n },\n\n moveItem: (pageCode, fromIndex, toIndex) => {\n mutateForm(`Reorder page items in \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n return withPageItems(p, (items) => {\n if (\n fromIndex < 0 ||\n fromIndex >= items.length ||\n toIndex < 0 ||\n toIndex >= items.length ||\n fromIndex === toIndex\n ) {\n return items\n }\n const next = items.slice()\n const [moved] = next.splice(fromIndex, 1)\n next.splice(toIndex, 0, moved!)\n return next.map((item, idx) => ({ ...item, order: idx }))\n })\n }),\n }))\n },\n\n // --- Selection ---\n\n select: (selection) => set({ selection }),\n clearSelection: () => set({ selection: { type: 'form' } }),\n\n // --- View ---\n\n setView: (view) => set({ view }),\n\n // --- History (Undo/Redo) ---\n\n undo: () => {\n const { history, historyIndex, form } = get()\n if (historyIndex < 0) return\n\n // Save current state as redo point if at the end\n if (historyIndex === history.length - 1) {\n const entry: HistoryEntry = {\n form: deepClone(form),\n description: 'Current state',\n timestamp: Date.now(),\n }\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n history: [...history, entry],\n })\n } else {\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n })\n }\n },\n\n redo: () => {\n const { history, historyIndex } = get()\n if (historyIndex >= history.length - 2) return\n const nextIndex = historyIndex + 2\n if (nextIndex < history.length) {\n set({\n form: deepClone(history[nextIndex]!.form),\n historyIndex: nextIndex - 1,\n isDirty: true,\n })\n }\n },\n\n canUndo: () => get().historyIndex >= 0,\n canRedo: () => {\n const { history, historyIndex } = get()\n return historyIndex < history.length - 2\n },\n\n // --- FormType CRUD ---\n\n addFormType: (type) => {\n const newType: IFormType = { ...type, id: generateId() }\n set((state) => ({ formTypes: [...state.formTypes, newType] }))\n },\n\n updateFormType: (id, patch) => {\n set((state) => ({\n formTypes: state.formTypes.map((t) => (t.id === id ? { ...t, ...patch } : t)),\n }))\n },\n\n removeFormType: (id) => {\n const state = get()\n // If the current form references this type, clear the reference first.\n if (state.form.formTypeId === id) {\n const { formTypeId: _drop, ...rest } = state.form\n set({ form: { ...(rest as IFormDefinition) } })\n }\n set((s) => ({ formTypes: s.formTypes.filter((t) => t.id !== id) }))\n },\n\n // --- Variable templates (UI state, out of undo/redo) ---\n\n setAvailableTemplates: (templates) => {\n set({ availableTemplates: templates })\n },\n\n // --- Persistence ---\n\n setAdapter: (adapter) => set({ adapter }),\n\n save: async () => {\n const { adapter, form } = get()\n if (!adapter?.saveForm) return\n set({ isSaving: true })\n try {\n await adapter.saveForm(form)\n set({ isDirty: false })\n } finally {\n set({ isSaving: false })\n }\n },\n\n load: async (formId) => {\n const { adapter } = get()\n if (!adapter?.loadForm) return\n const form = await adapter.loadForm(formId)\n get().setForm(form)\n },\n\n // --- Import/Export ---\n\n exportJson: () => serializeForm(get().form),\n\n importJson: (json) => {\n // deserializeForm already runs `migrateFormToItems`; setForm runs it\n // again for safety against adapters that bypass the envelope.\n const form = deserializeForm(json)\n get().setForm(form)\n },\n }\n})\n","/**\n * French labels for FormEditor — absolute default.\n *\n * Any consumer that does not pass a `labels` prop will see this content.\n */\n\nimport type { IEditorLabels } from './types'\n\nexport const frLabels: IEditorLabels = {\n toolbar: {\n formNamePlaceholder: 'Nom du formulaire',\n unsaved: 'Non sauvegardé',\n addPage: '+ Page',\n types: 'Types',\n manageFormTypesTitle: 'Gérer les types de formulaire',\n undo: 'Annuler',\n redo: 'Rétablir',\n save: 'Enregistrer',\n saving: 'Enregistrement...',\n export: 'Exporter',\n import: 'Importer',\n viewEditor: 'Éditeur',\n viewPreview: 'Aperçu',\n viewJson: 'JSON',\n },\n\n toolbox: {\n searchPlaceholder: 'Rechercher...',\n addPageFirst: 'Ajoutez d’abord une page',\n tabFields: 'Champs',\n tabVariables: 'Variables',\n noTemplates: 'Aucune variable dans ce scope',\n noScope: 'Configurez un scope pour accéder au référentiel',\n groupText: 'Texte',\n groupSelection: 'Sélection',\n groupDateTime: 'Date et heure',\n groupMedia: 'Médias',\n groupAdvanced: 'Avancé',\n groupRoster: 'Roster',\n typeRosterCheck: 'Cases à cocher',\n typeRosterList: 'Liste',\n typeRosterCollection: 'Collection',\n typeRosterCollectionExtend: 'Collection étendue',\n types: {\n text: 'Texte court',\n textarea: 'Zone de texte',\n number: 'Nombre',\n email: 'Email',\n select: 'Liste déroulante',\n multiselect: 'Multi-sélection',\n radio: 'Boutons radio',\n checkbox: 'Cases à cocher',\n date: 'Date',\n datetime: 'Date et heure',\n time: 'Heure',\n file: 'Fichier',\n image: 'Image',\n gps: 'GPS',\n rating: 'Note (étoiles)',\n calculated: 'Calculé',\n hidden: 'Masqué',\n label: 'Étiquette',\n },\n },\n\n canvas: {\n emptyStateNoPage: 'Cliquez sur « + Page » dans la barre d’outils pour commencer',\n emptyStateNoPageDnd: 'Glissez un champ depuis la boîte à outils ou ajoutez une page pour commencer',\n emptyStatePage: 'Cliquez sur un type de champ dans la boîte à outils pour l’ajouter ici',\n unnamedPage: 'Page sans nom',\n repeatable: 'Répétable',\n fieldsRostersCount: (fields, rosters) =>\n `${fields} champ${fields > 1 ? 's' : ''} · ${rosters} roster${rosters > 1 ? 's' : ''}`,\n fieldsCount: (fields) => `${fields} champ${fields > 1 ? 's' : ''}`,\n rosterVarsCount: (vars) => `${vars} variable${vars > 1 ? 's' : ''}`,\n addRoster: '+ Ajouter un roster',\n addFieldToRoster: '+ Ajouter un champ au roster',\n pilotPrefix: 'pilote :',\n newRosterName: 'Nouveau roster',\n newFieldName: 'Nouveau champ',\n newVariableName: (typeLabel) => `Nouveau ${typeLabel.toLowerCase()}`,\n hasConditionsTitle: 'Contient des conditions',\n dataSourceConnectedTitle: 'Source de données connectée',\n },\n\n properties: {\n title: 'Propriétés',\n name: 'Nom',\n code: 'Code',\n description: 'Description',\n placeholder: 'Placeholder',\n version: 'Version',\n formType: 'Type de formulaire',\n noType: '— Aucun type —',\n formSummary: (pages, variables) =>\n `${pages} page${pages > 1 ? 's' : ''} · ${variables} variable${variables > 1 ? 's' : ''}`,\n pageSummary: (variables, rosters) =>\n `${variables} variable${variables > 1 ? 's' : ''} · ${rosters} roster${rosters > 1 ? 's' : ''}`,\n rosterSummary: (variables, options) =>\n `${variables} variable${variables > 1 ? 's' : ''} · ${options} option${options > 1 ? 's' : ''}`,\n repeatablePage: 'Page répétable',\n minInstances: 'Minimum d’instances',\n maxInstances: 'Maximum d’instances',\n controlVariableCode: 'Code de la variable de contrôle',\n instanceLabel: 'Modèle de libellé d’instance',\n rosterType: 'Type de roster',\n pilotVariableCode: 'Code de la variable pilote',\n rosterTypes: {\n check: 'Cases à cocher (sélection multiple)',\n list: 'Liste (dropdown par ligne)',\n collection: 'Collection (ajout/suppression de lignes)',\n collection_extend: 'Collection étendue (vue tableau)',\n },\n linkedTemplate: 'Variable liée au référentiel',\n templateCode: 'Code (non modifiable)',\n templateName: 'Nom (non modifiable)',\n resetOverride: 'Réinitialiser',\n type: 'Type',\n ratingStyle: 'Style de notation',\n ratingStyles: {\n star: '★ Étoiles',\n number: '123 Nombres',\n color: '● Points de couleur',\n },\n layout: 'Mise en page',\n startNewRow: 'Nouvelle ligne',\n columnSpan: 'Largeur (colonnes, 1-12)',\n columnSpanAuto: 'Auto (part égale)',\n columnSpanHalf: ' (moitié)',\n columnSpanThird: ' (tiers)',\n columnSpanFull: ' (pleine largeur)',\n required: 'Obligatoire',\n readonly: 'Lecture seule',\n hidden: 'Masqué par défaut',\n expression: 'Expression',\n langConfigSection: 'Langues',\n langConfigAvailable: 'Langues disponibles',\n langConfigDefault: 'Langue par défaut',\n langConfigStrategy: 'Stratégie de détection',\n langConfigStrategies: {\n prop: 'Propriété (prop)',\n browser: 'Navigateur',\n selector: 'Sélecteur dans le formulaire',\n auto: 'Auto (navigateur puis défaut)',\n },\n langConfigSelectorPosition: 'Position du sélecteur',\n langConfigPositions: {\n top: 'Haut',\n bottom: 'Bas',\n },\n langConfigConfirmRemove: (lang) =>\n `Supprimer la langue « ${lang.toUpperCase()} » supprimera toutes les traductions ${lang.toUpperCase()}. Confirmer ?`,\n langConfigConfirmYes: 'Supprimer',\n langConfigConfirmNo: 'Annuler',\n },\n\n optionsEditor: {\n optionsCount: (count) => `Options (${count})`,\n noOptions: 'Aucune option. Ajoutez-en une pour peupler les choix.',\n optionLabelPlaceholder: 'Libellé',\n optionValuePlaceholder: 'valeur',\n addOption: '+ Ajouter une option',\n optionLabelAria: (index) => `Libellé de l’option ${index + 1}`,\n optionValueAria: (index) => `Valeur de l’option ${index + 1}`,\n removeOptionAria: (index) => `Supprimer l’option ${index + 1}`,\n },\n\n conditionBuilder: {\n conditionsCount: (count) => `Conditions (${count})`,\n addCondition: '+ Ajouter une condition',\n rulesCount: (rules) => ` (${rules} règle${rules > 1 ? 's' : ''})`,\n addRule: '+ Ajouter une règle',\n action: 'Action',\n match: 'Correspondance',\n all: 'TOUT (ET)',\n any: 'AU MOINS UN (OU)',\n actions: {\n show: 'Afficher si',\n hide: 'Masquer si',\n validate: 'Valider que',\n require: 'Obligatoire si',\n readonly: 'Lecture seule si',\n setValue: 'Définir la valeur si',\n },\n operators: {\n equals: 'est égal à',\n not_equals: 'est différent de',\n greater_than: 'est supérieur à',\n less_than: 'est inférieur à',\n greater_than_or_equal: 'est supérieur ou égal à',\n less_than_or_equal: 'est inférieur ou égal à',\n contains: 'contient',\n not_contains: 'ne contient pas',\n is_empty: 'est vide',\n is_not_empty: 'n’est pas vide',\n starts_with: 'commence par',\n ends_with: 'se termine par',\n in: 'est dans la liste',\n not_in: 'n’est pas dans la liste',\n between: 'est entre',\n regex: 'correspond au pattern',\n },\n variablePlaceholder: 'Variable...',\n valuePlaceholder: 'Valeur',\n errorMessage: 'Message d’erreur',\n errorMessagePlaceholder: 'Message d’erreur de validation',\n targetVariableCode: 'Code de la variable cible',\n targetVariablePlaceholder: 'VAR_CIBLE',\n valueToSet: 'Valeur à définir',\n valueToSetPlaceholder: 'Valeur',\n },\n\n dataSource: {\n title: 'Source de données',\n connector: 'Connecteur',\n none: 'Aucune (options statiques)',\n connectedTo: 'Connecté à :',\n dependencies: (count) => `Dépendances (${count})`,\n selectVariable: 'Sélectionner une variable...',\n dependencyKeyPlaceholder: 'Clé de dépendance (ex : parentId)',\n addDependency: '+ Ajouter',\n },\n\n formTypesDialog: {\n dialogAriaLabel: 'Types de formulaires',\n title: 'Types de formulaires',\n closeAriaLabel: 'Fermer',\n noTypes: 'Aucun type défini. Ajoutez-en un ci-dessous.',\n confirmDelete: 'Ce type est utilisé par le formulaire courant. Confirmer la suppression ?',\n deleteConfirm: 'Supprimer',\n deleteCancel: 'Annuler',\n removeTypeAria: (name) => `Supprimer ${name}`,\n newTypeNamePlaceholder: 'Nom du nouveau type',\n newTypeCodePlaceholder: 'CODE (auto)',\n addButton: '+ Ajouter',\n },\n\n formEditor: {\n previewMissing: 'Passer la prop PreviewComponent pour activer l’aperçu',\n },\n}\n","/**\n * English labels for FormEditor — opt-in via `labels` prop.\n */\n\nimport type { IEditorLabels } from './types'\n\nexport const enLabels: IEditorLabels = {\n toolbar: {\n formNamePlaceholder: 'Form name',\n unsaved: 'Unsaved',\n addPage: '+ Page',\n types: 'Types',\n manageFormTypesTitle: 'Manage form types',\n undo: 'Undo',\n redo: 'Redo',\n save: 'Save',\n saving: 'Saving...',\n export: 'Export',\n import: 'Import',\n viewEditor: 'Editor',\n viewPreview: 'Preview',\n viewJson: 'JSON',\n },\n\n toolbox: {\n searchPlaceholder: 'Search fields...',\n addPageFirst: 'Add a page first',\n tabFields: 'Fields',\n tabVariables: 'Variables',\n noTemplates: 'No variables in this scope',\n noScope: 'Configure a scope to access the variable library',\n groupText: 'Text',\n groupSelection: 'Selection',\n groupDateTime: 'Date & Time',\n groupMedia: 'Media',\n groupAdvanced: 'Advanced',\n groupRoster: 'Roster',\n typeRosterCheck: 'Checks',\n typeRosterList: 'List',\n typeRosterCollection: 'Collection',\n typeRosterCollectionExtend: 'Collection extended',\n types: {\n text: 'Text',\n textarea: 'Text Area',\n number: 'Number',\n email: 'Email',\n select: 'Dropdown',\n multiselect: 'Multi Select',\n radio: 'Radio',\n checkbox: 'Checkbox',\n date: 'Date',\n datetime: 'DateTime',\n time: 'Time',\n file: 'File',\n image: 'Image',\n gps: 'GPS',\n rating: 'Rating (stars)',\n calculated: 'Calculated',\n hidden: 'Hidden',\n label: 'Label',\n },\n },\n\n canvas: {\n emptyStateNoPage: 'Click \"+ Page\" in the toolbar to get started',\n emptyStateNoPageDnd: 'Drag a field from the toolbox or add a page to get started',\n emptyStatePage: 'Click a field type in the toolbox to add it here',\n unnamedPage: 'Unnamed Page',\n repeatable: 'Repeatable',\n fieldsRostersCount: (fields, rosters) =>\n `${fields} field${fields === 1 ? '' : 's'} · ${rosters} roster${rosters === 1 ? '' : 's'}`,\n fieldsCount: (fields) => `${fields} field${fields === 1 ? '' : 's'}`,\n rosterVarsCount: (vars) => `${vars} var${vars === 1 ? '' : 's'}`,\n addRoster: '+ Add Roster',\n addFieldToRoster: '+ Add field to roster',\n pilotPrefix: 'pilot:',\n newRosterName: 'New Roster',\n newFieldName: 'New field',\n newVariableName: (typeLabel) => `New ${typeLabel}`,\n hasConditionsTitle: 'Has conditions',\n dataSourceConnectedTitle: 'Data source connected',\n },\n\n properties: {\n title: 'Properties',\n name: 'Name',\n code: 'Code',\n description: 'Description',\n placeholder: 'Placeholder',\n version: 'Version',\n formType: 'Form type',\n noType: '— No type —',\n formSummary: (pages, variables) =>\n `${pages} page${pages === 1 ? '' : 's'} · ${variables} variable${variables === 1 ? '' : 's'}`,\n pageSummary: (variables, rosters) =>\n `${variables} variable${variables === 1 ? '' : 's'} · ${rosters} roster${rosters === 1 ? '' : 's'}`,\n rosterSummary: (variables, options) =>\n `${variables} variable${variables === 1 ? '' : 's'} · ${options} option${options === 1 ? '' : 's'}`,\n repeatablePage: 'Repeatable page',\n minInstances: 'Min instances',\n maxInstances: 'Max instances',\n controlVariableCode: 'Control variable code',\n instanceLabel: 'Instance label template',\n rosterType: 'Roster Type',\n pilotVariableCode: 'Pilot variable code',\n rosterTypes: {\n check: 'Check (multi-select checkboxes)',\n list: 'List (dropdown per row)',\n collection: 'Collection (add/remove rows)',\n collection_extend: 'Collection Extended (table view)',\n },\n linkedTemplate: 'Linked to variable library',\n templateCode: 'Code (read-only)',\n templateName: 'Name (read-only)',\n resetOverride: 'Reset',\n type: 'Type',\n ratingStyle: 'Rating style',\n ratingStyles: {\n star: '★ Stars',\n number: '123 Numbers',\n color: '● Color dots',\n },\n layout: 'Layout',\n startNewRow: 'Start new row',\n columnSpan: 'Column span (1-12)',\n columnSpanAuto: 'Auto (equal share)',\n columnSpanHalf: ' (half)',\n columnSpanThird: ' (third)',\n columnSpanFull: ' (full)',\n required: 'Required',\n readonly: 'Read only',\n hidden: 'Hidden by default',\n expression: 'Expression',\n langConfigSection: 'Languages',\n langConfigAvailable: 'Available languages',\n langConfigDefault: 'Default language',\n langConfigStrategy: 'Detection strategy',\n langConfigStrategies: {\n prop: 'Prop (host-controlled)',\n browser: 'Browser',\n selector: 'In-form selector',\n auto: 'Auto (browser then default)',\n },\n langConfigSelectorPosition: 'Selector position',\n langConfigPositions: {\n top: 'Top',\n bottom: 'Bottom',\n },\n langConfigConfirmRemove: (lang) =>\n `Removing \"${lang.toUpperCase()}\" will delete every ${lang.toUpperCase()} translation. Confirm?`,\n langConfigConfirmYes: 'Delete',\n langConfigConfirmNo: 'Cancel',\n },\n\n optionsEditor: {\n optionsCount: (count) => `Options (${count})`,\n noOptions: 'No options yet — add one to populate the choices.',\n optionLabelPlaceholder: 'Label',\n optionValuePlaceholder: 'value',\n addOption: '+ Add option',\n optionLabelAria: (index) => `Option ${index + 1} label`,\n optionValueAria: (index) => `Option ${index + 1} value`,\n removeOptionAria: (index) => `Remove option ${index + 1}`,\n },\n\n conditionBuilder: {\n conditionsCount: (count) => `Conditions (${count})`,\n addCondition: '+ Add condition',\n rulesCount: (rules) => ` (${rules} rule${rules === 1 ? '' : 's'})`,\n addRule: '+ Add rule',\n action: 'Action',\n match: 'Match',\n all: 'ALL (AND)',\n any: 'ANY (OR)',\n actions: {\n show: 'Show when',\n hide: 'Hide when',\n validate: 'Validate that',\n require: 'Require when',\n readonly: 'Read-only when',\n setValue: 'Set value when',\n },\n operators: {\n equals: 'equals',\n not_equals: 'not equals',\n greater_than: 'greater than',\n less_than: 'less than',\n greater_than_or_equal: 'greater than or equal',\n less_than_or_equal: 'less than or equal',\n contains: 'contains',\n not_contains: 'not contains',\n is_empty: 'is empty',\n is_not_empty: 'is not empty',\n starts_with: 'starts with',\n ends_with: 'ends with',\n in: 'in',\n not_in: 'not in',\n between: 'between',\n regex: 'matches regex',\n },\n variablePlaceholder: 'Variable...',\n valuePlaceholder: 'Value',\n errorMessage: 'Error message',\n errorMessagePlaceholder: 'Validation error message',\n targetVariableCode: 'Target variable code',\n targetVariablePlaceholder: 'TARGET_VAR',\n valueToSet: 'Value to set',\n valueToSetPlaceholder: 'Value',\n },\n\n dataSource: {\n title: 'Data Source Connector',\n connector: 'Connector',\n none: 'None (static options)',\n connectedTo: 'Connected to:',\n dependencies: (count) => `Dependencies (${count})`,\n selectVariable: 'Select variable...',\n dependencyKeyPlaceholder: 'Dependency key (e.g. parentId)',\n addDependency: '+ Add',\n },\n\n formTypesDialog: {\n dialogAriaLabel: 'Form types',\n title: 'Form types',\n closeAriaLabel: 'Close',\n noTypes: 'No form types yet. Add one below.',\n confirmDelete: 'This type is used by the current form. Confirm deletion?',\n deleteConfirm: 'Delete',\n deleteCancel: 'Cancel',\n removeTypeAria: (name) => `Remove ${name}`,\n newTypeNamePlaceholder: 'New type name',\n newTypeCodePlaceholder: 'CODE (auto)',\n addButton: '+ Add',\n },\n\n formEditor: {\n previewMissing: 'Pass PreviewComponent prop to enable preview',\n },\n}\n","/**\n * EditorLabelsContext — propagates a resolved IEditorLabels through the\n * FormEditor component tree.\n *\n * The provider value is the *already merged* IEditorLabels (full coverage).\n * Merging happens once in FormEditor via `mergeLabels`. Sub-components only\n * read via `useLabels()`.\n */\n\nimport { createContext, useContext } from 'react'\nimport type { ReactNode } from 'react'\nimport { frLabels } from './fr'\nimport type { DeepPartial, IEditorLabels } from './types'\n\nconst EditorLabelsContext = createContext<IEditorLabels>(frLabels)\n\nexport interface EditorLabelsProviderProps {\n labels: IEditorLabels\n children: ReactNode\n}\n\nexport function EditorLabelsProvider({\n labels,\n children,\n}: EditorLabelsProviderProps) {\n return (\n <EditorLabelsContext.Provider value={labels}>\n {children}\n </EditorLabelsContext.Provider>\n )\n}\n\n/** Read the resolved labels. Defaults to French if no provider is mounted. */\nexport function useLabels(): IEditorLabels {\n return useContext(EditorLabelsContext)\n}\n\n// ---- merge helpers ----\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\n/**\n * Recursively merges `override` into `base`. Functions, arrays and primitives\n * are replaced wholesale. Plain objects are merged key-by-key so a partial\n * override never erases sibling keys.\n */\nexport function mergeLabels(\n base: IEditorLabels,\n override?: DeepPartial<IEditorLabels>,\n): IEditorLabels {\n if (!override) return base\n return mergeDeep(base, override) as IEditorLabels\n}\n\nfunction mergeDeep(base: unknown, override: unknown): unknown {\n if (!isPlainObject(base) || !isPlainObject(override)) {\n return override === undefined ? base : override\n }\n const result: Record<string, unknown> = { ...base }\n for (const key of Object.keys(override)) {\n const baseValue = base[key]\n const overrideValue = override[key]\n if (isPlainObject(baseValue) && isPlainObject(overrideValue)) {\n result[key] = mergeDeep(baseValue, overrideValue)\n } else if (overrideValue !== undefined) {\n result[key] = overrideValue\n }\n }\n return result\n}\n","/**\n * FormTypesDialog — administration of the editor's IFormType collection.\n *\n * Native React modal (no external lib). Overlay click closes the dialog;\n * clicks on the modal body do not propagate. Same visual pattern as the\n * renderer's ValidationErrorsModal.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\n\nexport interface FormTypesDialogProps {\n open: boolean\n onClose: () => void\n}\n\nexport function FormTypesDialog({ open, onClose }: FormTypesDialogProps) {\n const { formTypes, form, addFormType, updateFormType, removeFormType } = useEditorStore()\n const labels = useLabels()\n\n const [newName, setNewName] = useState('')\n const [newCode, setNewCode] = useState('')\n const [editingId, setEditingId] = useState<string | null>(null)\n const [editName, setEditName] = useState('')\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null)\n\n if (!open) return null\n\n const handleAdd = () => {\n if (!newName.trim()) return\n addFormType({\n name: newName.trim(),\n code: newCode.trim() || newName.trim().toUpperCase().replace(/\\s+/g, '_'),\n })\n setNewName('')\n setNewCode('')\n }\n\n const startEdit = (id: string, currentName: string) => {\n setEditingId(id)\n setEditName(currentName)\n }\n\n const commitEdit = () => {\n if (editingId && editName.trim()) {\n updateFormType(editingId, { name: editName.trim() })\n }\n setEditingId(null)\n setEditName('')\n }\n\n const askDelete = (id: string) => {\n if (form.formTypeId === id) {\n setConfirmDeleteId(id)\n } else {\n removeFormType(id)\n }\n }\n\n const confirmDelete = () => {\n if (confirmDeleteId) removeFormType(confirmDeleteId)\n setConfirmDeleteId(null)\n }\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.formTypesDialog.dialogAriaLabel}\n data-testid=\"form-types-dialog\"\n onClick={onClose}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.3)',\n zIndex: 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n backgroundColor: '#fff',\n borderRadius: '8px',\n maxWidth: '32rem',\n width: '100%',\n maxHeight: '80vh',\n overflow: 'auto',\n boxShadow: '0 10px 25px rgba(0,0,0,0.2)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: '#1e293b',\n }}\n >\n <header\n style={{\n padding: '16px',\n borderBottom: '1px solid #e2e8f0',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <h3 style={{ fontSize: '16px', fontWeight: 600, margin: 0 }}>{labels.formTypesDialog.title}</h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.formTypesDialog.closeAriaLabel}\n data-testid=\"form-types-dialog-close-x\"\n style={{\n background: 'transparent',\n border: 'none',\n fontSize: '18px',\n cursor: 'pointer',\n color: '#64748b',\n padding: '4px 8px',\n }}\n >\n ×\n </button>\n </header>\n\n <section style={{ padding: '16px' }}>\n {formTypes.length === 0 && (\n <div\n data-testid=\"form-types-empty\"\n style={{ fontSize: '13px', color: '#94a3b8', marginBottom: '12px' }}\n >\n {labels.formTypesDialog.noTypes}\n </div>\n )}\n\n <ul style={{ listStyle: 'none', padding: 0, margin: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {formTypes.map((t) => {\n const isEditing = editingId === t.id\n const inUse = form.formTypeId === t.id\n const awaitingConfirm = confirmDeleteId === t.id\n return (\n <li\n key={t.id}\n data-testid={`form-type-row-${t.id}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n backgroundColor: inUse ? '#f1f5f9' : '#fff',\n }}\n >\n {isEditing ? (\n <input\n type=\"text\"\n value={editName}\n autoFocus\n data-testid={`form-type-name-edit-${t.id}`}\n onChange={(e) => setEditName(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commitEdit()\n if (e.key === 'Escape') { setEditingId(null); setEditName('') }\n }}\n style={{\n flex: 1,\n padding: '4px 8px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n }}\n />\n ) : (\n <span\n data-testid={`form-type-name-${t.id}`}\n onClick={() => startEdit(t.id, t.name)}\n style={{\n flex: 1,\n fontSize: '13px',\n cursor: 'pointer',\n padding: '4px 8px',\n }}\n >\n {t.name}\n </span>\n )}\n <span style={{ fontSize: '11px', color: '#94a3b8', fontFamily: 'monospace' }}>{t.code}</span>\n <button\n type=\"button\"\n aria-label={labels.formTypesDialog.removeTypeAria(t.name)}\n data-testid={`form-type-remove-${t.id}`}\n onClick={() => askDelete(t.id)}\n style={{\n width: '24px',\n height: '24px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#64748b',\n cursor: 'pointer',\n fontSize: '14px',\n lineHeight: 1,\n }}\n >\n ×\n </button>\n {awaitingConfirm && (\n <div\n data-testid={`form-type-confirm-${t.id}`}\n style={{\n flexBasis: '100%',\n fontSize: '12px',\n color: '#b91c1c',\n backgroundColor: '#fef2f2',\n padding: '6px 8px',\n borderRadius: '4px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span style={{ flex: 1 }}>\n {labels.formTypesDialog.confirmDelete}\n </span>\n <button\n type=\"button\"\n data-testid={`form-type-confirm-yes-${t.id}`}\n onClick={confirmDelete}\n style={{\n padding: '4px 8px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#ef4444',\n color: '#fff',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.formTypesDialog.deleteConfirm}\n </button>\n <button\n type=\"button\"\n data-testid={`form-type-confirm-no-${t.id}`}\n onClick={() => setConfirmDeleteId(null)}\n style={{\n padding: '4px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.formTypesDialog.deleteCancel}\n </button>\n </div>\n )}\n </li>\n )\n })}\n </ul>\n </section>\n\n <section\n style={{\n padding: '12px 16px',\n borderTop: '1px solid #e2e8f0',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n backgroundColor: '#f8fafc',\n }}\n >\n <input\n type=\"text\"\n value={newName}\n data-testid=\"form-types-new-name\"\n placeholder={labels.formTypesDialog.newTypeNamePlaceholder}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => { if (e.key === 'Enter') handleAdd() }}\n style={{\n flex: 1,\n padding: '6px 8px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n }}\n />\n <input\n type=\"text\"\n value={newCode}\n data-testid=\"form-types-new-code\"\n placeholder={labels.formTypesDialog.newTypeCodePlaceholder}\n onChange={(e) => setNewCode(e.target.value)}\n style={{\n width: '120px',\n padding: '6px 8px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n fontFamily: 'monospace',\n }}\n />\n <button\n type=\"button\"\n data-testid=\"form-types-add\"\n onClick={handleAdd}\n disabled={newName.trim() === ''}\n style={{\n padding: '6px 12px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: newName.trim() === '' ? '#cbd5e1' : '#2563eb',\n color: '#fff',\n fontSize: '13px',\n cursor: newName.trim() === '' ? 'not-allowed' : 'pointer',\n }}\n >\n {labels.formTypesDialog.addButton}\n </button>\n </section>\n </div>\n </div>\n )\n}\n","/**\n * Editor toolbar — top bar with form title, actions, and view controls.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { EditorView } from '../../store/types'\nimport { FormTypesDialog } from '../dialogs/FormTypesDialog'\nimport { useLabels } from '../../i18n'\nimport { DEFAULT_LANG_CONFIG, resolveLabel } from '@msbci/form-core'\nimport type { LocalizedString } from '@msbci/form-core'\n\nexport interface EditorToolbarProps {\n onSave?: () => void\n onExport?: () => void\n onImport?: () => void\n}\n\nexport function EditorToolbar({ onSave, onExport, onImport }: EditorToolbarProps) {\n const {\n form,\n updateFormMeta,\n view,\n setView,\n isDirty,\n isSaving,\n canUndo,\n canRedo,\n undo,\n redo,\n save,\n addPage,\n } = useEditorStore()\n const labels = useLabels()\n\n const [showFormTypesDialog, setShowFormTypesDialog] = useState(false)\n\n const handleSave = async () => {\n await save()\n onSave?.()\n }\n\n const handleAddPage = () => {\n const nextOrder = form.pages.length\n addPage({\n id: `page-${Date.now()}`,\n code: `PAGE_${nextOrder + 1}`,\n name: `Page ${nextOrder + 1}`,\n order: nextOrder,\n isRepeatable: false,\n items: [],\n })\n }\n\n const viewButtons: Array<{ view: EditorView; label: string }> = [\n { view: 'canvas', label: labels.toolbar.viewEditor },\n { view: 'preview', label: labels.toolbar.viewPreview },\n { view: 'json', label: labels.toolbar.viewJson },\n ]\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '8px 16px',\n borderBottom: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n gap: '8px',\n }}\n >\n {/* Form title (quick-edit) — touches only the default-lang value;\n richer multilingue editing happens in the right-hand properties panel. */}\n <input\n type=\"text\"\n value={resolveLabel(\n form.name,\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang,\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang,\n )}\n onChange={(e) => {\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n let next: LocalizedString\n if (typeof form.name === 'string') {\n next = e.target.value\n } else {\n next = { ...(form.name ?? {}), [defaultLang]: e.target.value }\n }\n updateFormMeta({ name: next })\n }}\n style={{\n border: 'none',\n fontSize: '16px',\n fontWeight: 600,\n color: '#1e293b',\n padding: '4px 8px',\n borderRadius: '4px',\n outline: 'none',\n minWidth: '200px',\n backgroundColor: 'transparent',\n }}\n placeholder={labels.toolbar.formNamePlaceholder}\n />\n\n {isDirty && (\n <span style={{ fontSize: '11px', color: '#f59e0b', fontWeight: 500 }}>\n {labels.toolbar.unsaved}\n </span>\n )}\n\n <div style={{ flex: 1 }} />\n\n {/* Add page */}\n <ToolbarButton onClick={handleAddPage} label={labels.toolbar.addPage} />\n\n {/* Form types */}\n <ToolbarButton\n onClick={() => setShowFormTypesDialog(true)}\n label={labels.toolbar.types}\n title={labels.toolbar.manageFormTypesTitle}\n />\n\n {/* Separator */}\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* Undo / Redo */}\n <ToolbarButton onClick={undo} label=\"↩\" disabled={!canUndo()} title={labels.toolbar.undo} />\n <ToolbarButton onClick={redo} label=\"↪\" disabled={!canRedo()} title={labels.toolbar.redo} />\n\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* View toggle */}\n <div style={{ display: 'flex', borderRadius: '6px', overflow: 'hidden', border: '1px solid #e2e8f0' }}>\n {viewButtons.map((btn) => (\n <button\n key={btn.view}\n type=\"button\"\n onClick={() => setView(btn.view)}\n style={{\n padding: '4px 12px',\n fontSize: '12px',\n fontWeight: 500,\n border: 'none',\n cursor: 'pointer',\n backgroundColor: view === btn.view ? '#2563eb' : '#fff',\n color: view === btn.view ? '#fff' : '#64748b',\n }}\n >\n {btn.label}\n </button>\n ))}\n </div>\n\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* Save */}\n <ToolbarButton\n onClick={handleSave}\n label={isSaving ? labels.toolbar.saving : labels.toolbar.save}\n primary\n disabled={isSaving || !isDirty}\n />\n\n {/* Export / Import */}\n {onExport && <ToolbarButton onClick={onExport} label={labels.toolbar.export} />}\n {onImport && <ToolbarButton onClick={onImport} label={labels.toolbar.import} />}\n\n <FormTypesDialog\n open={showFormTypesDialog}\n onClose={() => setShowFormTypesDialog(false)}\n />\n </div>\n )\n}\n\nfunction ToolbarButton({\n onClick,\n label,\n primary,\n disabled,\n title,\n}: {\n onClick: () => void\n label: string\n primary?: boolean\n disabled?: boolean\n title?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: primary ? 'none' : '1px solid #e2e8f0',\n backgroundColor: primary ? '#2563eb' : '#fff',\n color: primary ? '#fff' : '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n {label}\n </button>\n )\n}\n","/**\n * Toolbox panel (DnD) — left side of the editor.\n * Two tabs:\n * - Champs : variable types + roster variants (draggable).\n * - Variables : reusable templates from the current scope (draggable\n * with data.type='new-variable-from-template').\n */\n\nimport { useMemo, useState } from 'react'\nimport { useDraggable } from '@dnd-kit/core'\nimport { useEditorStore } from '../../store/editor-store'\nimport {\n DEFAULT_LANG_CONFIG,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IVariableTemplate,\n LocalizedString,\n RosterType,\n VariableType,\n} from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\n\ntype ToolboxEntry =\n | { kind: 'variable'; type: VariableType; label: string; icon: string }\n | { kind: 'roster'; rosterType: RosterType; label: string; icon: string }\n\ninterface ToolboxGroup {\n label: string\n items: ToolboxEntry[]\n}\n\ntype Tab = 'fields' | 'variables'\n\nexport function Toolbox() {\n const labels = useLabels()\n const [tab, setTab] = useState<Tab>('fields')\n const [search, setSearch] = useState('')\n const { form, availableTemplates } = useEditorStore()\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n const groups = useMemo<ToolboxGroup[]>(\n () => [\n {\n label: labels.toolbox.groupText,\n items: [\n { kind: 'variable', type: 'text', label: labels.toolbox.types.text, icon: 'T' },\n { kind: 'variable', type: 'textarea', label: labels.toolbox.types.textarea, icon: '¶' },\n { kind: 'variable', type: 'number', label: labels.toolbox.types.number, icon: '#' },\n ],\n },\n {\n label: labels.toolbox.groupSelection,\n items: [\n { kind: 'variable', type: 'select', label: labels.toolbox.types.select, icon: '▼' },\n { kind: 'variable', type: 'multiselect', label: labels.toolbox.types.multiselect, icon: '☑' },\n { kind: 'variable', type: 'radio', label: labels.toolbox.types.radio, icon: '◉' },\n { kind: 'variable', type: 'checkbox', label: labels.toolbox.types.checkbox, icon: '☐' },\n ],\n },\n {\n label: labels.toolbox.groupDateTime,\n items: [\n { kind: 'variable', type: 'date', label: labels.toolbox.types.date, icon: '📅' },\n { kind: 'variable', type: 'datetime', label: labels.toolbox.types.datetime, icon: '🕐' },\n { kind: 'variable', type: 'time', label: labels.toolbox.types.time, icon: '⏰' },\n ],\n },\n {\n label: labels.toolbox.groupAdvanced,\n items: [\n { kind: 'variable', type: 'file', label: labels.toolbox.types.file, icon: '📎' },\n { kind: 'variable', type: 'gps', label: labels.toolbox.types.gps, icon: '📍' },\n { kind: 'variable', type: 'calculated', label: labels.toolbox.types.calculated, icon: 'fx' },\n { kind: 'variable', type: 'hidden', label: labels.toolbox.types.hidden, icon: '👁' },\n { kind: 'variable', type: 'label', label: labels.toolbox.types.label, icon: 'Aa' },\n ],\n },\n {\n label: labels.toolbox.groupRoster,\n items: [\n { kind: 'roster', rosterType: 'check', label: labels.toolbox.typeRosterCheck, icon: '▤' },\n { kind: 'roster', rosterType: 'list', label: labels.toolbox.typeRosterList, icon: '▦' },\n { kind: 'roster', rosterType: 'collection', label: labels.toolbox.typeRosterCollection, icon: '▥' },\n { kind: 'roster', rosterType: 'collection_extend', label: labels.toolbox.typeRosterCollectionExtend, icon: '▩' },\n ],\n },\n ],\n [labels],\n )\n\n const filteredGroups = groups.map((group) => ({\n ...group,\n items: group.items.filter((item) =>\n item.label.toLowerCase().includes(search.toLowerCase()),\n ),\n })).filter((group) => group.items.length > 0)\n\n return (\n <div\n style={{\n width: '220px',\n borderRight: '1px solid #e2e8f0',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: '#f8fafc',\n overflow: 'hidden',\n }}\n >\n <ToolboxTabs tab={tab} setTab={setTab} labels={labels} />\n <div style={{ padding: '12px', borderBottom: '1px solid #e2e8f0' }}>\n <input\n type=\"text\"\n placeholder={labels.toolbox.searchPlaceholder}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{\n width: '100%',\n padding: '6px 10px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n fontSize: '13px',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n <div style={{ flex: 1, overflowY: 'auto', padding: '8px' }}>\n {tab === 'fields' && filteredGroups.map((group) => (\n <div key={group.label} style={{ marginBottom: '16px' }}>\n <div\n style={{\n fontSize: '11px',\n fontWeight: 600,\n color: '#94a3b8',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n marginBottom: '6px',\n padding: '0 4px',\n }}\n >\n {group.label}\n </div>\n {group.items.map((item) => (\n <ToolboxItem key={`${item.kind}-${item.kind === 'roster' ? item.rosterType : item.type}`} entry={item} />\n ))}\n </div>\n ))}\n\n {tab === 'variables' && (\n <VariablesDndTab\n templates={availableTemplates}\n scopeId={form.scopeId}\n search={search}\n defaultLang={defaultLang}\n labels={labels}\n />\n )}\n </div>\n </div>\n )\n}\n\nfunction ToolboxTabs({ tab, setTab, labels }: { tab: Tab; setTab: (t: Tab) => void; labels: ReturnType<typeof useLabels> }) {\n const baseTab: React.CSSProperties = {\n flex: 1,\n padding: '8px 0',\n fontSize: '12px',\n fontWeight: 500,\n textAlign: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n color: '#64748b',\n borderBottomWidth: '2px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n }\n const activeTab: React.CSSProperties = {\n ...baseTab,\n color: '#2563eb',\n fontWeight: 600,\n borderBottomColor: '#2563eb',\n }\n return (\n <div style={{ display: 'flex', borderBottom: '1px solid #e2e8f0', backgroundColor: '#fff' }}>\n <div\n role=\"tab\"\n aria-selected={tab === 'fields'}\n data-testid=\"toolbox-tab-fields\"\n onClick={() => setTab('fields')}\n style={tab === 'fields' ? activeTab : baseTab}\n >\n {labels.toolbox.tabFields}\n </div>\n <div\n role=\"tab\"\n aria-selected={tab === 'variables'}\n data-testid=\"toolbox-tab-variables\"\n onClick={() => setTab('variables')}\n style={tab === 'variables' ? activeTab : baseTab}\n >\n {labels.toolbox.tabVariables}\n </div>\n </div>\n )\n}\n\nfunction ToolboxItem({ entry }: { entry: ToolboxEntry }) {\n const id =\n entry.kind === 'roster'\n ? `toolbox-roster-${entry.rosterType}`\n : `toolbox-variable-${entry.type}`\n const data =\n entry.kind === 'roster'\n ? { type: 'new-roster', rosterType: entry.rosterType }\n : { type: 'new-variable', variableType: entry.type }\n\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({ id, data })\n\n return (\n <div\n ref={setNodeRef}\n data-testid={id}\n {...listeners}\n {...attributes}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 8px',\n marginBottom: '2px',\n borderRadius: '6px',\n cursor: 'grab',\n fontSize: '13px',\n color: '#334155',\n backgroundColor: isDragging ? '#e2e8f0' : 'transparent',\n userSelect: 'none',\n }}\n >\n <span style={{ width: '20px', textAlign: 'center', fontSize: '14px' }}>{entry.icon}</span>\n <span>{entry.label}</span>\n </div>\n )\n}\n\ninterface VariablesDndTabProps {\n templates: IVariableTemplate[]\n scopeId: string | undefined\n search: string\n defaultLang: string\n labels: ReturnType<typeof useLabels>\n}\n\nfunction VariablesDndTab({ templates, scopeId, search, defaultLang, labels }: VariablesDndTabProps) {\n const emptyState = (text: string) => (\n <div\n data-testid=\"toolbox-variables-empty\"\n style={{ padding: '14px', color: '#94a3b8', fontSize: '12px', textAlign: 'center', fontStyle: 'italic' }}\n >\n {text}\n </div>\n )\n\n if (!scopeId) return emptyState(labels.toolbox.noScope)\n if (templates.length === 0) return emptyState(labels.toolbox.noTemplates)\n\n const needle = search.toLowerCase()\n const matches = templates\n .filter((t) => {\n if (!needle) return true\n const codeMatch = t.code.toLowerCase().includes(needle)\n const nameMatch = resolveLocalized(t.name, defaultLang).toLowerCase().includes(needle)\n return codeMatch || nameMatch\n })\n .slice()\n .sort((a, b) => a.code.localeCompare(b.code))\n\n if (matches.length === 0) return emptyState(labels.toolbox.noTemplates)\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {matches.map((template) => (\n <ToolboxTemplateItem key={template.id} template={template} defaultLang={defaultLang} />\n ))}\n </div>\n )\n}\n\nfunction ToolboxTemplateItem({ template, defaultLang }: { template: IVariableTemplate; defaultLang: string }) {\n const id = `toolbox-template-${template.code}`\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: { type: 'new-variable-from-template', template },\n })\n\n return (\n <div\n ref={setNodeRef}\n data-testid={id}\n {...listeners}\n {...attributes}\n style={{\n display: 'flex', alignItems: 'center', gap: '8px',\n padding: '6px 8px', borderRadius: '6px', cursor: 'grab',\n fontSize: '13px', color: '#334155',\n backgroundColor: isDragging ? '#e2e8f0' : 'transparent',\n userSelect: 'none',\n }}\n >\n <span\n style={{\n fontSize: '10px', fontWeight: 600,\n padding: '2px 6px', borderRadius: '4px',\n backgroundColor: '#e0e7ff', color: '#3730a3',\n textTransform: 'uppercase', letterSpacing: '0.3px',\n minWidth: '42px', textAlign: 'center',\n }}\n >\n {template.variableType}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', minWidth: 0, flex: 1 }}>\n <span style={{ fontFamily: 'monospace', fontSize: '11px', color: '#475569', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{template.code}</span>\n <span style={{ fontSize: '12px', color: '#1e293b', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{resolveLocalized(template.name, defaultLang)}</span>\n </div>\n </div>\n )\n}\n\nfunction resolveLocalized(value: LocalizedString | undefined, defaultLang: string): string {\n return resolveLabel(value, defaultLang, defaultLang)\n}\n","/**\n * Canvas panel — center of the editor.\n * Displays the form structure as pages with a unified list of items\n * (variables + rosters). Items share a single SortableContext so the\n * drag & drop reordering works across both kinds.\n */\n\nimport { useDroppable } from '@dnd-kit/core'\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport {\n DEFAULT_LANG_CONFIG,\n getPageVariables,\n isPageRoster,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IFormPage,\n IFormPageItem,\n IFormVariable,\n IFormRoster,\n LocalizedString,\n} from '@msbci/form-core'\n\nfunction useCanvasResolve() {\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n return (label: LocalizedString | undefined) => resolveLabel(label, defaultLang, defaultLang)\n}\n\nexport function Canvas() {\n const { form } = useEditorStore()\n const labels = useLabels()\n\n if (form.pages.length === 0) {\n return (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#94a3b8',\n fontSize: '14px',\n }}\n >\n {labels.canvas.emptyStateNoPageDnd}\n </div>\n )\n }\n\n const pages = form.pages.slice().sort((a, b) => a.order - b.order)\n const pageSortIds = pages.map((p) => `page-${p.code}`)\n\n return (\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}>\n <SortableContext items={pageSortIds} strategy={verticalListSortingStrategy}>\n {pages.map((page) => (\n <CanvasPage key={page.code} page={page} />\n ))}\n </SortableContext>\n </div>\n )\n}\n\nfunction CanvasPage({ page }: { page: IFormPage }) {\n const { selection, select } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'page' && selection.pageCode === page.code\n\n // The page is BOTH sortable (so users can drag it to reorder) AND\n // a droppable target (so toolbox items can land on its background).\n // `useSortable` already supplies a droppable behaviour on the same node;\n // we expose drag handle listeners on the header only so children remain\n // freely clickable / sortable.\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n isOver,\n } = useSortable({\n id: `page-${page.code}`,\n data: { type: 'page', pageCode: page.code },\n })\n\n const items: IFormPageItem[] = (page.items ?? [\n ...getPageVariables(page),\n ...(page.rosters ?? []),\n ])\n .slice()\n .sort((a, b) => a.order - b.order)\n const variableCount = items.filter((i) => !isPageRoster(i)).length\n\n return (\n <div\n ref={setNodeRef}\n style={{\n marginBottom: '16px',\n border: `2px solid ${isSelected ? '#2563eb' : isOver ? '#93c5fd' : '#e2e8f0'}`,\n borderRadius: '8px',\n overflow: 'hidden',\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n }}\n >\n {/* Page header — the ⠿ span is the dedicated drag handle; the rest\n of the header reacts to clicks (select page) without competing\n with the pointer sensor. */}\n <div\n onClick={() => select({ type: 'page', pageCode: page.code })}\n style={{\n padding: '10px 14px',\n backgroundColor: isSelected ? '#eff6ff' : '#f8fafc',\n borderBottom: '1px solid #e2e8f0',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span\n {...attributes}\n {...listeners}\n data-testid={`canvas-page-drag-handle-${page.code}`}\n aria-label={`Reorder page ${page.code}`}\n title=\"Drag to reorder\"\n onClick={(e) => e.stopPropagation()}\n style={{\n color: '#94a3b8',\n fontSize: '14px',\n cursor: 'grab',\n padding: '2px 6px',\n borderRadius: '4px',\n userSelect: 'none',\n touchAction: 'none',\n }}\n >\n ⠿\n </span>\n <span style={{ fontSize: '14px', fontWeight: 600, color: '#1e293b' }}>\n {resolveCanvas(page.name) || labels.canvas.unnamedPage}\n </span>\n {page.isRepeatable && (\n <span\n style={{\n fontSize: '10px',\n padding: '1px 6px',\n borderRadius: '4px',\n backgroundColor: '#dbeafe',\n color: '#2563eb',\n fontWeight: 500,\n }}\n >\n {labels.canvas.repeatable}\n </span>\n )}\n </div>\n <span style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.canvas.fieldsCount(variableCount)}\n </span>\n </div>\n\n {/* Items list — variables and rosters share the same sortable context */}\n <SortableContext\n items={items.map((it) => it.code)}\n strategy={verticalListSortingStrategy}\n >\n <div style={{ padding: '4px 0' }}>\n {items.map((item) =>\n isPageRoster(item) ? (\n <CanvasRoster\n key={item.code}\n roster={item}\n pageCode={page.code}\n />\n ) : (\n <CanvasVariable\n key={item.code}\n variable={item as IFormVariable}\n pageCode={page.code}\n />\n ),\n )}\n </div>\n </SortableContext>\n </div>\n )\n}\n\nfunction CanvasVariable({ variable, pageCode, rosterCode }: { variable: IFormVariable; pageCode: string; rosterCode?: string }) {\n const { selection, select } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected =\n selection.type === 'variable' &&\n selection.pageCode === pageCode &&\n selection.variableCode === variable.code\n\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: variable.code,\n data: { type: 'variable', pageCode, variableCode: variable.code, rosterCode },\n })\n\n return (\n <div\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n onClick={(e) => {\n e.stopPropagation()\n select({ type: 'variable', pageCode, variableCode: variable.code, rosterCode })\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '6px 14px',\n margin: '1px 0',\n cursor: 'pointer',\n backgroundColor: isSelected ? '#eff6ff' : isDragging ? '#f1f5f9' : 'transparent',\n borderLeft: isSelected ? '3px solid #2563eb' : '3px solid transparent',\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n fontSize: '13px',\n }}\n >\n <span style={{ color: '#94a3b8', fontSize: '11px', width: '60px', flexShrink: 0 }}>\n {variable.type}\n </span>\n <span style={{ color: '#334155', flex: 1 }}>{resolveCanvas(variable.name) || variable.code}</span>\n {variable.isRequired && <span style={{ color: '#ef4444', fontSize: '11px' }}>*</span>}\n {variable.conditions && variable.conditions.length > 0 && (\n <span style={{ color: '#f59e0b', fontSize: '11px' }} title={labels.canvas.hasConditionsTitle}>⚡</span>\n )}\n {variable.dataSourceId && (\n <span style={{ color: '#22c55e', fontSize: '11px' }} title={labels.canvas.dataSourceConnectedTitle}>⟳</span>\n )}\n </div>\n )\n}\n\nfunction CanvasRoster({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { selection, select, addVariable } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected =\n selection.type === 'roster' &&\n selection.pageCode === pageCode &&\n selection.rosterCode === roster.code\n\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: roster.code,\n data: { type: 'roster', pageCode, rosterCode: roster.code },\n })\n\n // Droppable target for toolbox draggables aimed at the roster body\n // (separate id from the sortable so we can distinguish \"drop on the\n // roster as a target\" from \"reorder the roster among page items\").\n const { setNodeRef: setDropRef, isOver } = useDroppable({\n id: `roster-drop-${roster.code}`,\n data: { type: 'roster-drop', pageCode, rosterCode: roster.code },\n })\n\n const handleAddVarToRoster = (e: React.MouseEvent) => {\n e.stopPropagation()\n const code = `RV_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(\n pageCode,\n {\n id: `var-${Date.now()}`,\n code,\n name: labels.canvas.newFieldName,\n type: 'text',\n order: roster.variables.length,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n },\n roster.code,\n )\n }\n\n return (\n <div\n ref={setNodeRef}\n style={{\n margin: '4px 8px',\n border: `1px solid ${isSelected ? '#2563eb' : isOver ? '#f59e0b' : '#e2e8f0'}`,\n borderRadius: '6px',\n overflow: 'hidden',\n backgroundColor: isOver ? '#fefce8' : undefined,\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n }}\n >\n <div\n {...attributes}\n {...listeners}\n onClick={(e) => {\n e.stopPropagation()\n select({ type: 'roster', pageCode, rosterCode: roster.code })\n }}\n style={{\n padding: '6px 10px',\n backgroundColor: isSelected ? '#fef3c7' : '#fffbeb',\n fontSize: '12px',\n fontWeight: 600,\n color: '#92400e',\n cursor: 'grab',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <span style={{ fontSize: '10px' }}>▤</span>\n {resolveCanvas(roster.name) || roster.code} ({roster.rosterType})\n </div>\n <div ref={setDropRef}>\n {roster.variables\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((v) => (\n <CanvasVariable key={v.code} variable={v} pageCode={pageCode} rosterCode={roster.code} />\n ))}\n <div style={{ padding: '4px 10px', borderTop: '1px solid #fde68a' }}>\n <button\n type=\"button\"\n onClick={handleAddVarToRoster}\n data-testid={`canvas-add-field-to-roster-${roster.code}`}\n style={{\n padding: '2px 8px',\n borderRadius: '3px',\n border: '1px dashed #d4a843',\n backgroundColor: 'transparent',\n color: '#92400e',\n fontSize: '10px',\n cursor: 'pointer',\n }}\n >\n {labels.canvas.addFieldToRoster}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * DndManager — internal drag & drop orchestration for FormEditor.\n *\n * Wraps the editor tree in a `<DndContext>`, wires up the pointer +\n * keyboard sensors, and translates every drop event into a store\n * mutation. Pairs with the package's DnD-aware `Toolbox` and `Canvas`\n * components, which emit the `data` shapes documented below.\n *\n * Toolbox draggables (`active.data.type`):\n * - 'new-variable' → addVariable\n * - 'new-roster' → addRoster\n * - 'new-variable-from-template' → addVariableFromTemplate\n *\n * Canvas sortables (`active.data.type`):\n * - 'variable' → moveItem | moveVariable\n * - 'roster' → moveItem\n * - 'page' → reorderPages\n *\n * The pure handler factory `createDragEndHandler` is exported alongside\n * the component so the DnD logic can be unit-tested without mounting\n * the React tree.\n */\n\nimport React, { useMemo, useState } from 'react'\nimport {\n DndContext,\n closestCenter,\n PointerSensor,\n KeyboardSensor,\n useSensor,\n useSensors,\n DragOverlay,\n} from '@dnd-kit/core'\nimport type { DragEndEvent, DragStartEvent } from '@dnd-kit/core'\nimport { sortableKeyboardCoordinates, arrayMove } from '@dnd-kit/sortable'\nimport { useEditorStore } from '../store/editor-store'\nimport {\n getPageVariables,\n getPageRosters,\n} from '@msbci/form-core'\nimport type {\n IFormDefinition,\n IFormPageItem,\n IFormRoster,\n IFormVariable,\n IVariableTemplate,\n RosterType,\n VariableType,\n} from '@msbci/form-core'\n\n/**\n * Subset of the editor store the drag-end logic actually needs. Decoupling\n * makes the handler trivially mockable in unit tests.\n */\nexport interface DragEndActions {\n addVariable: (pageCode: string, variable: IFormVariable, rosterCode?: string) => void\n addRoster: (pageCode: string, roster: IFormRoster) => void\n addVariableFromTemplate: (pageCode: string, template: IVariableTemplate, rosterCode?: string) => void\n moveItem: (pageCode: string, fromIndex: number, toIndex: number) => void\n moveVariable: (\n fromPageCode: string,\n toPageCode: string,\n variableCode: string,\n newOrder: number,\n fromRosterCode?: string,\n toRosterCode?: string,\n ) => void\n reorderPages: (orderedCodes: string[]) => void\n}\n\n/** Active draggable payload — what Canvas / Toolbox put under `data.current`. */\nexport interface ActiveDragData {\n type?:\n | 'new-variable'\n | 'new-roster'\n | 'new-variable-from-template'\n | 'variable'\n | 'roster'\n | 'page'\n variableType?: VariableType\n rosterType?: RosterType\n template?: IVariableTemplate\n pageCode?: string\n variableCode?: string\n rosterCode?: string\n}\n\n/** Over (drop-target) payload. */\nexport interface OverDropData {\n type?: 'page' | 'variable' | 'roster' | 'roster-drop'\n pageCode?: string\n rosterCode?: string\n}\n\n/** Read the canonical items[] of a page (legacy shape tolerant). */\nfunction readItems(form: IFormDefinition, pageCode: string): IFormPageItem[] | null {\n const page = form.pages.find((p) => p.code === pageCode)\n if (!page) return null\n if (Array.isArray(page.items)) return page.items.slice().sort((a, b) => a.order - b.order)\n return [...getPageVariables(page), ...getPageRosters(page)].sort((a, b) => a.order - b.order)\n}\n\nfunction genCode(prefix: string): string {\n return `${prefix}_${Date.now().toString(36).slice(-4).toUpperCase()}`\n}\n\n/**\n * Build a pure drag-end handler. Given a snapshot accessor for the form\n * and the store actions, returns a function that translates a DragEndEvent\n * into the right action call. Exported for unit tests.\n */\nexport function createDragEndHandler(\n actions: DragEndActions,\n getForm: () => IFormDefinition,\n): (event: DragEndEvent) => void {\n return (event: DragEndEvent) => {\n const { active, over } = event\n if (!active || !over) return\n const a = active.data.current as ActiveDragData | undefined\n if (!a?.type) return\n const form = getForm()\n\n // ─── Toolbox → drop target ──────────────────────────────────\n\n const resolveTarget = (): { pageCode: string; rosterCode?: string } | null => {\n const od = over.data.current as OverDropData | undefined\n if (!od) return null\n if (od.type === 'page' && od.pageCode) return { pageCode: od.pageCode }\n if (od.type === 'variable' && od.pageCode) {\n return { pageCode: od.pageCode, rosterCode: od.rosterCode }\n }\n // Drop on the roster's header (the useSortable on the header).\n if (od.type === 'roster' && od.pageCode) {\n return { pageCode: od.pageCode, rosterCode: od.rosterCode }\n }\n // Drop on the roster's body — dedicated useDroppable provided by\n // CanvasRoster so toolbox draggables can land *inside* the roster.\n if (od.type === 'roster-drop' && od.pageCode) {\n return { pageCode: od.pageCode, rosterCode: od.rosterCode }\n }\n return null\n }\n\n if (a.type === 'new-variable') {\n const target = resolveTarget() ?? { pageCode: form.pages[0]?.code ?? '' }\n if (!target.pageCode) return\n const variableType = a.variableType ?? 'text'\n actions.addVariable(\n target.pageCode,\n {\n id: `var-${Date.now()}`,\n code: genCode(variableType.toUpperCase()),\n name: `New ${variableType}`,\n type: variableType,\n order: 0,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n },\n target.rosterCode,\n )\n return\n }\n\n if (a.type === 'new-roster') {\n const target = resolveTarget() ?? { pageCode: form.pages[0]?.code ?? '' }\n if (!target.pageCode) return\n const rosterType = a.rosterType ?? 'collection'\n actions.addRoster(target.pageCode, {\n id: `roster-${Date.now()}`,\n code: genCode('ROSTER'),\n name: 'New Roster',\n rosterType,\n order: 0,\n variables: [],\n })\n return\n }\n\n if (a.type === 'new-variable-from-template' && a.template) {\n const target = resolveTarget() ?? { pageCode: form.pages[0]?.code ?? '' }\n if (!target.pageCode) return\n actions.addVariableFromTemplate(target.pageCode, a.template, target.rosterCode)\n return\n }\n\n // ─── Page reorder ───────────────────────────────────────────\n\n if (a.type === 'page') {\n const od = over.data.current as OverDropData | undefined\n if (od?.type !== 'page' || !od.pageCode || !a.pageCode) return\n if (a.pageCode === od.pageCode) return\n const sorted = form.pages.slice().sort((p, q) => p.order - q.order)\n const oldIdx = sorted.findIndex((p) => p.code === a.pageCode)\n const newIdx = sorted.findIndex((p) => p.code === od.pageCode)\n if (oldIdx === -1 || newIdx === -1 || oldIdx === newIdx) return\n const orderedCodes = arrayMove(sorted, oldIdx, newIdx).map((p) => p.code)\n actions.reorderPages(orderedCodes)\n return\n }\n\n // ─── Variable / roster reorder & cross-container moves ─────\n\n if (a.type === 'variable' || a.type === 'roster') {\n const od = over.data.current as OverDropData | undefined\n const fromPage = a.pageCode\n if (!fromPage || !od) return\n\n // A side is \"top-level\" when it is a roster (its `rosterCode` is its own\n // code, not a parent) or a variable that sits directly under the page.\n const isTopLevel = (side: { type?: string; rosterCode?: string }) =>\n side.type === 'roster' || (side.type === 'variable' && !side.rosterCode)\n const aTop = isTopLevel(a)\n const oTop = isTopLevel(od)\n\n // Same-page reorder of two top-level items (mixed variables + rosters).\n if (od.pageCode === fromPage && od.type !== 'page' && aTop && oTop) {\n const items = readItems(form, fromPage)\n if (!items) return\n const activeCode = String(active.id)\n const overCode = String(over.id)\n if (activeCode === overCode) return\n const fromIdx = items.findIndex((it) => it.code === activeCode)\n const toIdx = items.findIndex((it) => it.code === overCode)\n if (fromIdx === -1 || toIdx === -1) return\n actions.moveItem(fromPage, fromIdx, toIdx)\n return\n }\n\n // Variable cross-page / cross-roster (only variables can travel).\n if (a.type === 'variable' && a.variableCode) {\n const toPage = od.pageCode ?? fromPage\n const toRoster = od.type === 'page' ? undefined : od.rosterCode\n if (toPage === fromPage && (a.rosterCode ?? undefined) === (toRoster ?? undefined)) {\n return\n }\n actions.moveVariable(fromPage, toPage, a.variableCode, 0, a.rosterCode, toRoster)\n return\n }\n }\n }\n}\n\n/**\n * Wraps the editor tree in a `<DndContext>` configured with pointer +\n * keyboard sensors and the drag-end handler returned by\n * {@link createDragEndHandler}. A `<DragOverlay>` shows a label while\n * something is being dragged.\n */\nexport function DndManager({ children }: { children: React.ReactNode }) {\n const store = useEditorStore()\n const [dragLabel, setDragLabel] = useState<string | null>(null)\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 8 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n )\n\n const handleDragEnd = useMemo(\n () =>\n createDragEndHandler(\n {\n addVariable: store.addVariable,\n addRoster: store.addRoster,\n addVariableFromTemplate: store.addVariableFromTemplate,\n moveItem: store.moveItem,\n moveVariable: store.moveVariable,\n reorderPages: store.reorderPages,\n },\n () => useEditorStore.getState().form,\n ),\n [\n store.addVariable,\n store.addRoster,\n store.addVariableFromTemplate,\n store.moveItem,\n store.moveVariable,\n store.reorderPages,\n ],\n )\n\n const handleDragStart = (event: DragStartEvent) => {\n const data = event.active.data.current as ActiveDragData | undefined\n if (!data) return\n if (data.type === 'new-variable') setDragLabel(data.variableType ?? 'variable')\n else if (data.type === 'new-roster') setDragLabel(`roster:${data.rosterType ?? ''}`)\n else if (data.type === 'new-variable-from-template') setDragLabel(`tpl:${data.template?.code ?? ''}`)\n else if (data.type === 'variable') setDragLabel(data.variableCode ?? '')\n else if (data.type === 'roster') setDragLabel(`▤ ${String(event.active.id)}`)\n else if (data.type === 'page') setDragLabel(`📄 ${data.pageCode ?? ''}`)\n }\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={(event) => {\n setDragLabel(null)\n handleDragEnd(event)\n }}\n >\n {children}\n <DragOverlay>\n {dragLabel && (\n <div\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n backgroundColor: '#2563eb',\n color: '#fff',\n fontSize: '13px',\n fontWeight: 500,\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n }}\n >\n {dragLabel}\n </div>\n )}\n </DragOverlay>\n </DndContext>\n )\n}\n","/**\n * LocalizedInput — input/textarea control for editing a `LocalizedString`\n * inside the editor's properties panel.\n *\n * Behaviour:\n * - `availableLangs.length ≤ 1` → a single plain input. The value stays a\n * `string`. If a `Record<string, string>` was previously stored, it is\n * flattened to the lone language on first edit (see `valueFor`).\n * - `availableLangs.length > 1` → tabbed editor with one input per lang.\n * The first lang is the default tab; the value is upgraded to a\n * `Record<string, string>` the first time any tab is edited.\n *\n * Backward compat:\n * - A `string` value flows through untouched until the user edits.\n * - Switching from 2 → 1 language elsewhere (langConfig change) does NOT\n * happen here; FormProperties handles the flattening with confirmation.\n */\n\nimport { useState } from 'react'\nimport type { LocalizedString } from '@msbci/form-core'\nimport { DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\nimport { useEditorStore } from '../../store/editor-store'\n\n/**\n * Flattens a LocalizedString value to a plain `string` of the given lang.\n *\n * Used when langConfig shrinks from N → 1 language: every LocalizedString\n * field in the schema should collapse to the remaining language's string,\n * with FR as the absolute fallback. Plain strings are returned as-is.\n */\nexport function flattenLocalized(\n value: LocalizedString | undefined,\n keepLang: string,\n fallbackLang = 'fr',\n): string {\n if (value === undefined || value === null) return ''\n if (typeof value === 'string') return value\n const exact = value[keepLang]\n if (typeof exact === 'string' && exact !== '') return exact\n const fb = value[fallbackLang]\n if (typeof fb === 'string' && fb !== '') return fb\n for (const v of Object.values(value)) {\n if (typeof v === 'string' && v !== '') return v\n }\n return ''\n}\n\nexport interface LocalizedInputProps {\n /** Current value (string or per-language record). Undefined → '' . */\n value: LocalizedString | undefined\n /**\n * Notified with the *next* shape. When `availableLangs.length === 1`, the\n * next shape is always a plain `string`. When >1 it is always a\n * `Record<string, string>` once the user starts editing.\n */\n onChange: (next: LocalizedString) => void\n /** Active language codes — drives single-input vs tabbed mode. */\n availableLangs: string[]\n /** Default language (used for the first tab and the flat → record upgrade). */\n defaultLang?: string\n /** Optional placeholder forwarded to each input. */\n placeholder?: string\n /** Render a textarea instead of an input. */\n multiline?: boolean\n /** Optional test id forwarded to the active input (suffixed by lang). */\n testIdPrefix?: string\n /** Disabled flag forwarded to all inputs. */\n disabled?: boolean\n}\n\nconst inputBase: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n}\n\nconst tabBase: React.CSSProperties = {\n padding: '4px 10px',\n border: '1px solid #e2e8f0',\n borderBottom: 'none',\n borderTopLeftRadius: '4px',\n borderTopRightRadius: '4px',\n fontSize: '11px',\n fontWeight: 600,\n cursor: 'pointer',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n minWidth: '38px',\n}\n\n/**\n * Reads the displayable value for a given language without coercing the\n * underlying shape. Plain strings are returned as-is for the default lang\n * (and only for it — other tabs start empty).\n */\nfunction valueFor(\n value: LocalizedString | undefined,\n lang: string,\n defaultLang: string,\n): string {\n if (value === undefined || value === null) return ''\n if (typeof value === 'string') {\n return lang === defaultLang ? value : ''\n }\n const exact = value[lang]\n return typeof exact === 'string' ? exact : ''\n}\n\nexport function LocalizedInput({\n value,\n onChange,\n availableLangs,\n defaultLang = 'fr',\n placeholder,\n multiline,\n testIdPrefix,\n disabled,\n}: LocalizedInputProps) {\n const langs = availableLangs.length > 0 ? availableLangs : [defaultLang]\n const isMulti = langs.length > 1\n const [activeLang, setActiveLang] = useState<string>(langs[0]!)\n const labels = useLabels()\n\n // Resync active lang if the available set shrinks.\n if (!langs.includes(activeLang)) {\n // Schedule via a fresh render — useState setter outside effect is fine\n // because this branch only fires when langs change.\n setActiveLang(langs[0]!)\n }\n\n const handleChange = (lang: string, next: string) => {\n if (!isMulti) {\n onChange(next)\n return\n }\n // Upgrade plain string → record on first multi-edit.\n const base: Record<string, string> =\n typeof value === 'string'\n ? { [defaultLang]: value }\n : { ...(value ?? {}) }\n base[lang] = next\n onChange(base)\n }\n\n if (!isMulti) {\n const lang = langs[0]!\n const v = valueFor(value, lang, defaultLang)\n return multiline ? (\n <textarea\n value={v}\n rows={3}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${lang}` : undefined}\n onChange={(e) => handleChange(lang, e.target.value)}\n style={inputBase}\n />\n ) : (\n <input\n type=\"text\"\n value={v}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${lang}` : undefined}\n onChange={(e) => handleChange(lang, e.target.value)}\n style={inputBase}\n />\n )\n }\n\n const v = valueFor(value, activeLang, defaultLang)\n\n return (\n <div data-testid={testIdPrefix} style={{ display: 'flex', flexDirection: 'column' }}>\n <div role=\"tablist\" aria-label={labels.properties.title} style={{ display: 'flex', gap: '2px' }}>\n {langs.map((lang) => {\n const isActive = lang === activeLang\n return (\n <button\n key={lang}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n data-testid={testIdPrefix ? `${testIdPrefix}-tab-${lang}` : undefined}\n onClick={() => setActiveLang(lang)}\n style={{\n ...tabBase,\n backgroundColor: isActive ? '#fff' : '#f1f5f9',\n color: isActive ? '#2563eb' : '#64748b',\n borderColor: isActive ? '#e2e8f0' : '#e2e8f0',\n }}\n >\n {lang}\n </button>\n )\n })}\n </div>\n {multiline ? (\n <textarea\n value={v}\n rows={3}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${activeLang}` : undefined}\n onChange={(e) => handleChange(activeLang, e.target.value)}\n style={{ ...inputBase, borderTopLeftRadius: 0 }}\n />\n ) : (\n <input\n type=\"text\"\n value={v}\n placeholder={placeholder}\n disabled={disabled}\n data-testid={testIdPrefix ? `${testIdPrefix}-${activeLang}` : undefined}\n onChange={(e) => handleChange(activeLang, e.target.value)}\n style={{ ...inputBase, borderTopLeftRadius: 0 }}\n />\n )}\n </div>\n )\n}\n\n/**\n * LocalizedField — label + LocalizedInput, wired to the editor store's\n * `form.langConfig` so callers don't have to pass `availableLangs` each time.\n *\n * Use this in the right-hand properties panel for every LocalizedString\n * field (variable.name, page.name, variable.description, etc.). For plain\n * string fields (code, version, …) keep the regular PropertyField.\n */\nexport interface LocalizedFieldProps {\n label: string\n value: LocalizedString | undefined\n onChange: (next: LocalizedString) => void\n placeholder?: string\n multiline?: boolean\n testIdPrefix?: string\n disabled?: boolean\n}\n\nexport function LocalizedField({\n label,\n value,\n onChange,\n placeholder,\n multiline,\n testIdPrefix,\n disabled,\n}: LocalizedFieldProps) {\n const form = useEditorStore((s) => s.form)\n const langConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n <LocalizedInput\n value={value}\n onChange={onChange}\n availableLangs={langConfig.availableLangs}\n defaultLang={langConfig.defaultLang}\n placeholder={placeholder}\n multiline={multiline}\n testIdPrefix={testIdPrefix}\n disabled={disabled}\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { LocalizedField, flattenLocalized } from './LocalizedInput'\nimport {\n DEFAULT_LANG_CONFIG,\n getPageVariables,\n getPageRosters,\n isPageRoster,\n} from '@msbci/form-core'\nimport type {\n IFormDefinition,\n IFormLangConfig,\n IFormPage,\n IFormPageItem,\n IFormRoster,\n IFormVariable,\n IVariableOption,\n IConditionRule,\n IValidationRule,\n IRepeatConfig,\n LangDetectionStrategy,\n LocalizedString,\n} from '@msbci/form-core'\n\n/** Languages the demo / editor knows how to display today. */\nconst SUPPORTED_LANGS = ['fr', 'en'] as const\n\nexport function FormProperties() {\n const { form, formTypes, updateFormMeta } = useEditorStore()\n const labels = useLabels()\n const langConfig: IFormLangConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n\n const totalVariables = form.pages.reduce(\n (sum, p) =>\n sum +\n getPageVariables(p).length +\n getPageRosters(p).reduce((rs, r) => rs + r.variables.length, 0),\n 0,\n )\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={form.name}\n onChange={(v) => updateFormMeta({ name: v })}\n testIdPrefix=\"form-name\"\n />\n <PropertyField label={labels.properties.code} value={form.code} onChange={(v) => updateFormMeta({ code: v })} />\n <LocalizedField\n label={labels.properties.description}\n value={form.description}\n onChange={(v) => updateFormMeta({ description: v })}\n multiline\n testIdPrefix=\"form-description\"\n />\n <PropertyField label={labels.properties.version} value={form.version} onChange={(v) => updateFormMeta({ version: v })} />\n\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.formType}\n </label>\n <select\n data-testid=\"form-properties-type-select\"\n value={form.formTypeId ?? ''}\n onChange={(e) => updateFormMeta({ formTypeId: e.target.value || undefined })}\n style={{\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n >\n <option value=\"\">{labels.properties.noType}</option>\n {formTypes.map((t) => (\n <option key={t.id} value={t.id}>{t.name}</option>\n ))}\n </select>\n </div>\n\n <LangConfigSection langConfig={langConfig} />\n\n <div style={{ fontSize: '12px', color: '#94a3b8', marginTop: '8px' }}>\n {labels.properties.formSummary(form.pages.length, totalVariables)}\n </div>\n </div>\n )\n}\n\n/**\n * Section \"Langues\" — admin UI for IFormDefinition.langConfig.\n *\n * - Toggle each supported language. The defaultLang is always implicitly\n * enabled (you cannot uncheck it while leaving zero langs).\n * - Removing a language with existing translations triggers a confirmation;\n * on confirm, every LocalizedString in the schema collapses to the\n * remaining default lang (no silent data loss).\n * - Strategy + selector position selectors are plain dropdowns.\n */\nfunction LangConfigSection({ langConfig }: { langConfig: IFormLangConfig }) {\n const { form, updateFormMeta, setForm } = useEditorStore()\n const labels = useLabels()\n const [confirmRemoveLang, setConfirmRemoveLang] = useState<string | null>(null)\n\n const sectionLabel: React.CSSProperties = {\n display: 'block',\n fontSize: '12px',\n fontWeight: 500,\n color: '#64748b',\n marginBottom: '4px',\n }\n\n const selectStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }\n\n const applyLangConfig = (next: IFormLangConfig) => {\n updateFormMeta({ langConfig: next })\n }\n\n const addLang = (lang: string) => {\n if (langConfig.availableLangs.includes(lang)) return\n applyLangConfig({\n ...langConfig,\n availableLangs: [...langConfig.availableLangs, lang],\n })\n }\n\n const requestRemoveLang = (lang: string) => {\n // Cannot remove the lone language nor the defaultLang.\n if (langConfig.availableLangs.length <= 1) return\n if (lang === langConfig.defaultLang) return\n setConfirmRemoveLang(lang)\n }\n\n const performRemoveLang = (lang: string) => {\n const nextLangs = langConfig.availableLangs.filter((l) => l !== lang)\n const nextDefault = nextLangs.includes(langConfig.defaultLang)\n ? langConfig.defaultLang\n : (nextLangs[0] ?? 'fr')\n // Collapse every LocalizedString in the schema down to a plain string\n // when only one language remains — and always strip the removed lang.\n const nextForm = stripLangFromForm(form, lang, nextDefault, nextLangs.length === 1)\n const nextLangConfig: IFormLangConfig = {\n ...langConfig,\n defaultLang: nextDefault,\n availableLangs: nextLangs,\n }\n setForm({ ...nextForm, langConfig: nextLangConfig })\n setConfirmRemoveLang(null)\n }\n\n const cancelRemove = () => setConfirmRemoveLang(null)\n\n return (\n <div\n data-testid=\"form-lang-config\"\n style={{\n padding: '8px',\n backgroundColor: '#f8fafc',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginTop: '4px',\n }}\n >\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.properties.langConfigSection}\n </div>\n\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigAvailable}</label>\n <div style={{ display: 'flex', gap: '8px', flexWrap: 'wrap' }}>\n {SUPPORTED_LANGS.map((lang) => {\n const isEnabled = langConfig.availableLangs.includes(lang)\n const isDefault = lang === langConfig.defaultLang\n const isOnlyOne = langConfig.availableLangs.length <= 1\n const disabled = isEnabled && (isDefault || isOnlyOne)\n return (\n <label\n key={lang}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: '#334155',\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n }}\n >\n <input\n type=\"checkbox\"\n data-testid={`lang-toggle-${lang}`}\n checked={isEnabled}\n disabled={disabled}\n onChange={(e) => {\n if (e.target.checked) addLang(lang)\n else requestRemoveLang(lang)\n }}\n />\n <span>{lang.toUpperCase()}</span>\n {isDefault && (\n <span style={{ fontSize: '10px', color: '#94a3b8', fontStyle: 'italic' }}>\n ({labels.properties.langConfigDefault})\n </span>\n )}\n </label>\n )\n })}\n </div>\n </div>\n\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigDefault}</label>\n <select\n data-testid=\"lang-default-select\"\n value={langConfig.defaultLang}\n onChange={(e) => applyLangConfig({ ...langConfig, defaultLang: e.target.value })}\n style={selectStyle}\n >\n {langConfig.availableLangs.map((lang) => (\n <option key={lang} value={lang}>{lang.toUpperCase()}</option>\n ))}\n </select>\n </div>\n\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigStrategy}</label>\n <select\n data-testid=\"lang-strategy-select\"\n value={langConfig.strategy}\n onChange={(e) => applyLangConfig({ ...langConfig, strategy: e.target.value as LangDetectionStrategy })}\n style={selectStyle}\n >\n <option value=\"prop\">{labels.properties.langConfigStrategies.prop}</option>\n <option value=\"browser\">{labels.properties.langConfigStrategies.browser}</option>\n <option value=\"selector\">{labels.properties.langConfigStrategies.selector}</option>\n <option value=\"auto\">{labels.properties.langConfigStrategies.auto}</option>\n </select>\n </div>\n\n {langConfig.strategy === 'selector' && (\n <div>\n <label style={sectionLabel}>{labels.properties.langConfigSelectorPosition}</label>\n <select\n data-testid=\"lang-selector-position-select\"\n value={langConfig.selectorPosition ?? 'top'}\n onChange={(e) =>\n applyLangConfig({\n ...langConfig,\n selectorPosition: e.target.value as 'top' | 'bottom',\n })\n }\n style={selectStyle}\n >\n <option value=\"top\">{labels.properties.langConfigPositions.top}</option>\n <option value=\"bottom\">{labels.properties.langConfigPositions.bottom}</option>\n </select>\n </div>\n )}\n\n {confirmRemoveLang && (\n <div\n data-testid=\"lang-remove-confirm\"\n style={{\n padding: '8px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '6px',\n fontSize: '12px',\n color: '#b91c1c',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <span>{labels.properties.langConfigConfirmRemove(confirmRemoveLang)}</span>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"lang-remove-confirm-yes\"\n onClick={() => performRemoveLang(confirmRemoveLang)}\n style={{\n padding: '4px 10px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: '#ef4444',\n color: '#fff',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.properties.langConfigConfirmYes}\n </button>\n <button\n type=\"button\"\n data-testid=\"lang-remove-confirm-no\"\n onClick={cancelRemove}\n style={{\n padding: '4px 10px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.properties.langConfigConfirmNo}\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/**\n * Mutation helper — walks the form schema and either strips a language key\n * from every LocalizedString (when more than one lang remains) or flattens\n * each LocalizedString to a plain string keyed by `keepLang` (when only one\n * lang remains after removal).\n */\nfunction stripLangFromForm(\n form: IFormDefinition,\n removeLang: string,\n keepLang: string,\n flattenToPlain: boolean,\n): IFormDefinition {\n const transform = (v: LocalizedString | undefined): LocalizedString | undefined => {\n if (v === undefined) return undefined\n if (typeof v === 'string') return v\n const copy = { ...v }\n delete copy[removeLang]\n if (flattenToPlain) {\n // Use flattenLocalized fallback chain: keepLang → 'fr' → first non-empty.\n return flattenLocalized(copy, keepLang, 'fr')\n }\n return copy\n }\n\n const transformOption = (opt: IVariableOption): IVariableOption => ({\n ...opt,\n label: transform(opt.label) ?? '',\n })\n\n const transformValidation = (rule: IValidationRule): IValidationRule => ({\n ...rule,\n message: transform(rule.message) ?? '',\n })\n\n const transformCondition = (c: IConditionRule): IConditionRule => ({\n ...c,\n errorMessage: transform(c.errorMessage),\n })\n\n const transformVariable = (v: IFormVariable): IFormVariable => ({\n ...v,\n name: transform(v.name) ?? '',\n description: transform(v.description),\n placeholder: transform(v.placeholder),\n options: v.options ? v.options.map(transformOption) : v.options,\n validationRules: v.validationRules ? v.validationRules.map(transformValidation) : v.validationRules,\n conditions: v.conditions ? v.conditions.map(transformCondition) : v.conditions,\n })\n\n const transformRoster = (r: IFormRoster): IFormRoster => ({\n ...r,\n name: transform(r.name) ?? '',\n options: r.options ? r.options.map(transformOption) : r.options,\n variables: r.variables.map(transformVariable),\n conditions: r.conditions ? r.conditions.map(transformCondition) : r.conditions,\n })\n\n const transformRepeatConfig = (cfg: IRepeatConfig): IRepeatConfig => ({\n ...cfg,\n instanceLabel: transform(cfg.instanceLabel),\n })\n\n const transformItem = (item: IFormPageItem): IFormPageItem =>\n isPageRoster(item) ? transformRoster(item) : transformVariable(item)\n\n const transformPage = (p: IFormPage): IFormPage => {\n const items = Array.isArray(p.items)\n ? p.items.map(transformItem)\n : [...getPageVariables(p).map(transformVariable), ...getPageRosters(p).map(transformRoster)]\n const { variables: _v, rosters: _r, ...rest } = p\n void _v\n void _r\n return {\n ...rest,\n name: transform(p.name) ?? '',\n repeatConfig: p.repeatConfig ? transformRepeatConfig(p.repeatConfig) : p.repeatConfig,\n items,\n conditions: p.conditions ? p.conditions.map(transformCondition) : p.conditions,\n }\n }\n\n return {\n ...form,\n name: transform(form.name) ?? '',\n description: transform(form.description),\n pages: form.pages.map(transformPage),\n }\n}\n\nexport function PropertyField({\n label,\n value,\n onChange,\n multiline,\n type = 'text',\n readOnly,\n}: {\n label: string\n value: string\n onChange: (value: string) => void\n multiline?: boolean\n type?: string\n readOnly?: boolean\n}) {\n const inputStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: readOnly ? '#64748b' : '#334155',\n backgroundColor: readOnly ? '#f1f5f9' : '#fff',\n outline: 'none',\n boxSizing: 'border-box',\n cursor: readOnly ? 'not-allowed' : 'text',\n }\n\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n {multiline ? (\n <textarea value={value} onChange={(e) => onChange(e.target.value)} rows={3} style={inputStyle} readOnly={readOnly} />\n ) : (\n <input type={type} value={value} onChange={(e) => onChange(e.target.value)} style={inputStyle} readOnly={readOnly} />\n )}\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { useLabels } from '../../i18n'\nimport { getPageVariables, getPageRosters } from '@msbci/form-core'\nimport type { IFormPage } from '@msbci/form-core'\n\nexport function PageProperties({ page }: { page: IFormPage }) {\n const { updatePage } = useEditorStore()\n const labels = useLabels()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={page.name}\n onChange={(v) => updatePage(page.code, { name: v })}\n testIdPrefix=\"page-name\"\n />\n <PropertyField label={labels.properties.code} value={page.code} onChange={() => {}} />\n\n <div>\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={page.isRepeatable}\n onChange={(e) => updatePage(page.code, {\n isRepeatable: e.target.checked,\n repeatConfig: e.target.checked ? { min: 1, max: 10 } : undefined,\n })}\n />\n {labels.properties.repeatablePage}\n </label>\n </div>\n\n {page.isRepeatable && page.repeatConfig && (\n <div style={{ padding: '8px', backgroundColor: '#f8fafc', borderRadius: '6px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <PropertyField\n label={labels.properties.minInstances}\n value={String(page.repeatConfig.min ?? 1)}\n type=\"number\"\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, min: parseInt(v) || 1 } })}\n />\n <PropertyField\n label={labels.properties.maxInstances}\n value={String(page.repeatConfig.max ?? 10)}\n type=\"number\"\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, max: parseInt(v) || 10 } })}\n />\n <PropertyField\n label={labels.properties.controlVariableCode}\n value={page.repeatConfig.controlVariableCode ?? ''}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, controlVariableCode: v || undefined } })}\n />\n <LocalizedField\n label={labels.properties.instanceLabel}\n value={page.repeatConfig.instanceLabel}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, instanceLabel: v } })}\n testIdPrefix=\"page-instance-label\"\n />\n </div>\n )}\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.properties.pageSummary(\n getPageVariables(page).length,\n getPageRosters(page).length,\n )}\n </div>\n </div>\n )\n}\n","/**\n * ConditionBuilder — visual AND/OR condition constructor.\n *\n * Allows building condition rules visually:\n * - Add/remove rules\n * - Select source variable, operator, value\n * - Group rules with AND/OR logic\n * - Preview as expression string\n * - Select condition action (show, hide, validate, setValue)\n */\n\nimport { useMemo, useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { LocalizedInput } from './LocalizedInput'\nimport type {\n IConditionRule,\n ConditionAction,\n ConditionOperator,\n IRosterVariableRef,\n} from '@msbci/form-core'\nimport { DEFAULT_LANG_CONFIG, generateId, RosterConditionEngine } from '@msbci/form-core'\n\ninterface ConditionRuleUI {\n id: string\n variableCode: string\n operator: ConditionOperator\n value: string\n}\n\ninterface ConditionGroupUI {\n logic: 'and' | 'or'\n rules: ConditionRuleUI[]\n}\n\nconst OPERATOR_VALUES: ConditionOperator[] = [\n 'equals',\n 'not_equals',\n 'greater_than',\n 'less_than',\n 'greater_than_or_equal',\n 'less_than_or_equal',\n 'contains',\n 'not_contains',\n 'is_empty',\n 'is_not_empty',\n 'starts_with',\n 'ends_with',\n 'in',\n 'regex',\n]\n\nconst ACTION_VALUES: ConditionAction[] = [\n 'show',\n 'hide',\n 'validate',\n 'require',\n 'readonly',\n 'setValue',\n]\n\nconst NO_VALUE_OPERATORS: ConditionOperator[] = ['is_empty', 'is_not_empty']\n\nexport interface RosterConditionContext {\n /** Variables that belong to the same roster row (scope-restricted). */\n variables: IRosterVariableRef[]\n /** Code of the variable whose conditions are being edited. */\n currentVariableCode: string\n /** Order of the variable whose conditions are being edited. */\n currentVariableOrder: number\n}\n\nexport interface ConditionBuilderProps {\n conditions: IConditionRule[]\n onChange: (conditions: IConditionRule[]) => void\n /** All variable codes available in the form (for the source selector) */\n availableVariables: Array<{ code: string; name: string }>\n /**\n * When set, conditions are validated against the roster scope using\n * RosterConditionEngine. Scope errors are displayed under each rule.\n */\n rosterContext?: RosterConditionContext\n}\n\nexport function ConditionBuilder({\n conditions,\n onChange,\n availableVariables,\n rosterContext,\n}: ConditionBuilderProps) {\n const labels = useLabels()\n const [expandedId, setExpandedId] = useState<string | null>(null)\n\n const handleAdd = () => {\n const newCondition: IConditionRule = {\n id: generateId(),\n action: 'show',\n expression: '',\n }\n onChange([...conditions, newCondition])\n setExpandedId(newCondition.id)\n }\n\n const handleRemove = (id: string) => {\n onChange(conditions.filter((c) => c.id !== id))\n if (expandedId === id) setExpandedId(null)\n }\n\n const handleUpdate = (id: string, updates: Partial<IConditionRule>) => {\n onChange(conditions.map((c) => (c.id === id ? { ...c, ...updates } : c)))\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.conditionBuilder.conditionsCount(conditions.length)}\n </div>\n\n {conditions.map((condition) => (\n <ConditionRuleEditor\n key={condition.id}\n condition={condition}\n isExpanded={expandedId === condition.id}\n onToggle={() => setExpandedId(expandedId === condition.id ? null : condition.id)}\n onUpdate={(updates) => handleUpdate(condition.id, updates)}\n onRemove={() => handleRemove(condition.id)}\n availableVariables={availableVariables}\n rosterContext={rosterContext}\n />\n ))}\n\n <button\n type=\"button\"\n onClick={handleAdd}\n style={{\n padding: '6px 12px',\n border: '1px dashed #cbd5e1',\n borderRadius: '6px',\n backgroundColor: 'transparent',\n color: '#2563eb',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.addCondition}\n </button>\n </div>\n )\n}\n\nfunction ConditionRuleEditor({\n condition,\n isExpanded,\n onToggle,\n onUpdate,\n onRemove,\n availableVariables,\n rosterContext,\n}: {\n condition: IConditionRule\n isExpanded: boolean\n onToggle: () => void\n onUpdate: (updates: Partial<IConditionRule>) => void\n onRemove: () => void\n availableVariables: Array<{ code: string; name: string }>\n rosterContext?: RosterConditionContext\n}) {\n const labels = useLabels()\n // Parse the visual state from condition\n const [group, setGroup] = useState<ConditionGroupUI>(() => parseExpressionToGroup(condition.expression))\n\n const syncExpression = (g: ConditionGroupUI, action: ConditionAction) => {\n setGroup(g)\n const expr = groupToExpression(g, action)\n onUpdate({ expression: expr })\n }\n\n const handleActionChange = (action: ConditionAction) => {\n onUpdate({ action })\n const expr = groupToExpression(group, action)\n onUpdate({ action, expression: expr })\n }\n\n const handleAddRule = () => {\n const newRule: ConditionRuleUI = { id: generateId(), variableCode: '', operator: 'equals', value: '' }\n const newGroup = { ...group, rules: [...group.rules, newRule] }\n syncExpression(newGroup, condition.action)\n }\n\n const handleRemoveRule = (ruleId: string) => {\n const newGroup = { ...group, rules: group.rules.filter((r) => r.id !== ruleId) }\n syncExpression(newGroup, condition.action)\n }\n\n const handleRuleChange = (ruleId: string, updates: Partial<ConditionRuleUI>) => {\n const newGroup = {\n ...group,\n rules: group.rules.map((r) => (r.id === ruleId ? { ...r, ...updates } : r)),\n }\n syncExpression(newGroup, condition.action)\n }\n\n const handleLogicChange = (logic: 'and' | 'or') => {\n const newGroup = { ...group, logic }\n syncExpression(newGroup, condition.action)\n }\n\n const actionLabel = labels.conditionBuilder.actions[condition.action] ?? condition.action\n\n return (\n <div style={{ border: '1px solid #e2e8f0', borderRadius: '6px', overflow: 'hidden' }}>\n {/* Header */}\n <div\n onClick={onToggle}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n padding: '6px 10px', backgroundColor: '#f8fafc', cursor: 'pointer',\n fontSize: '12px', color: '#334155',\n }}\n >\n <span style={{ fontWeight: 500 }}>\n {actionLabel}{group.rules.length > 0 ? labels.conditionBuilder.rulesCount(group.rules.length) : ''}\n </span>\n <div style={{ display: 'flex', gap: '4px' }}>\n <span style={{ color: '#94a3b8' }}>{isExpanded ? '▲' : '▼'}</span>\n <span\n onClick={(e) => { e.stopPropagation(); onRemove() }}\n style={{ color: '#ef4444', cursor: 'pointer', padding: '0 4px' }}\n role=\"button\"\n >\n ×\n </span>\n </div>\n </div>\n\n {/* Expanded editor */}\n {isExpanded && (\n <div style={{ padding: '10px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {/* Action select */}\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.action}\n </label>\n <select\n value={condition.action}\n onChange={(e) => handleActionChange(e.target.value as ConditionAction)}\n style={selectStyle}\n >\n {ACTION_VALUES.map((a) => (\n <option key={a} value={a}>{labels.conditionBuilder.actions[a]}</option>\n ))}\n </select>\n </div>\n\n {/* Logic toggle */}\n {group.rules.length > 1 && (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <span style={{ fontSize: '11px', color: '#64748b' }}>{labels.conditionBuilder.match}</span>\n <button\n type=\"button\"\n onClick={() => handleLogicChange('and')}\n style={{\n ...pillStyle,\n backgroundColor: group.logic === 'and' ? '#2563eb' : '#f1f5f9',\n color: group.logic === 'and' ? '#fff' : '#64748b',\n }}\n >\n {labels.conditionBuilder.all}\n </button>\n <button\n type=\"button\"\n onClick={() => handleLogicChange('or')}\n style={{\n ...pillStyle,\n backgroundColor: group.logic === 'or' ? '#2563eb' : '#f1f5f9',\n color: group.logic === 'or' ? '#fff' : '#64748b',\n }}\n >\n {labels.conditionBuilder.any}\n </button>\n </div>\n )}\n\n {/* Rules */}\n {group.rules.map((rule) => (\n <div key={rule.id} style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {/* Variable selector */}\n <select\n value={rule.variableCode}\n onChange={(e) => handleRuleChange(rule.id, { variableCode: e.target.value })}\n style={{ ...selectStyle, flex: 1 }}\n >\n <option value=\"\">{labels.conditionBuilder.variablePlaceholder}</option>\n {availableVariables.map((v) => (\n <option key={v.code} value={v.code}>{v.name} ({v.code})</option>\n ))}\n </select>\n\n {/* Operator */}\n <select\n value={rule.operator}\n onChange={(e) => handleRuleChange(rule.id, { operator: e.target.value as ConditionOperator })}\n style={{ ...selectStyle, width: '130px' }}\n >\n {OPERATOR_VALUES.map((o) => (\n <option key={o} value={o}>{labels.conditionBuilder.operators[o]}</option>\n ))}\n </select>\n\n {/* Value (hidden for is_empty/is_not_empty) */}\n {!NO_VALUE_OPERATORS.includes(rule.operator) && (\n <input\n type=\"text\"\n value={rule.value}\n onChange={(e) => handleRuleChange(rule.id, { value: e.target.value })}\n placeholder={labels.conditionBuilder.valuePlaceholder}\n style={{ ...inputStyle, flex: 1 }}\n />\n )}\n\n {/* Remove rule */}\n <button\n type=\"button\"\n onClick={() => handleRemoveRule(rule.id)}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px', padding: '2px' }}\n >\n ×\n </button>\n </div>\n ))}\n\n <button\n type=\"button\"\n onClick={handleAddRule}\n style={{\n padding: '4px 8px', border: '1px dashed #cbd5e1', borderRadius: '4px',\n backgroundColor: 'transparent', color: '#64748b', fontSize: '11px', cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.addRule}\n </button>\n\n {/* Expression preview */}\n {condition.expression && (\n <div style={{ padding: '6px 8px', backgroundColor: '#f0fdf4', borderRadius: '4px', fontSize: '11px', fontFamily: 'monospace', color: '#166534', wordBreak: 'break-all' }}>\n {condition.expression}\n </div>\n )}\n\n {/* Roster scope errors */}\n {rosterContext && condition.expression && (() => {\n const validation = RosterConditionEngine.validateCondition(\n condition.expression,\n rosterContext.variables,\n rosterContext.currentVariableCode,\n rosterContext.currentVariableOrder,\n )\n if (validation.isValid) return null\n return (\n <div\n data-testid=\"condition-builder-roster-errors\"\n style={{\n padding: '6px 8px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '4px',\n fontSize: '11px',\n color: '#b91c1c',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n }}\n >\n {validation.errors.map((err, i) => (\n <div key={i}>\n <strong>{err.type}</strong>{err.variableCode ? `: \\${${err.variableCode}}` : ''} — {err.message}\n </div>\n ))}\n </div>\n )\n })()}\n\n {/* Error message (for validate action) */}\n {condition.action === 'validate' && (\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.errorMessage}\n </label>\n <ConditionErrorMessageEditor\n value={condition.errorMessage}\n onChange={(next) => onUpdate({ errorMessage: next })}\n placeholder={labels.conditionBuilder.errorMessagePlaceholder}\n />\n </div>\n )}\n\n {/* Target + value (for setValue action) */}\n {condition.action === 'setValue' && (\n <>\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.targetVariableCode}\n </label>\n <input\n type=\"text\"\n value={condition.targetVariableCode ?? ''}\n onChange={(e) => onUpdate({ targetVariableCode: e.target.value || undefined })}\n placeholder={labels.conditionBuilder.targetVariablePlaceholder}\n style={inputStyle}\n />\n </div>\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n {labels.conditionBuilder.valueToSet}\n </label>\n <input\n type=\"text\"\n value={condition.setValue !== undefined ? String(condition.setValue) : ''}\n onChange={(e) => onUpdate({ setValue: e.target.value })}\n placeholder={labels.conditionBuilder.valueToSetPlaceholder}\n style={inputStyle}\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---- Localised error-message editor (wired to form.langConfig) ----\n\nfunction ConditionErrorMessageEditor({\n value,\n onChange,\n placeholder,\n}: {\n value: IConditionRule['errorMessage']\n onChange: (next: IConditionRule['errorMessage']) => void\n placeholder?: string\n}) {\n const form = useEditorStore((s) => s.form)\n const langConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n return (\n <LocalizedInput\n value={value}\n // `onChange` receives a LocalizedString; we pass it through. Empty\n // strings are kept so the admin can clear a translation without\n // dropping the whole field.\n onChange={(next) => onChange(next)}\n availableLangs={langConfig.availableLangs}\n defaultLang={langConfig.defaultLang}\n placeholder={placeholder}\n testIdPrefix=\"condition-error-message\"\n />\n )\n}\n\n// ---- Expression <-> UI conversion ----\n\nfunction operatorToSymbol(op: ConditionOperator): string {\n const map: Record<ConditionOperator, string> = {\n equals: '==', not_equals: '!=', contains: 'contains',\n not_contains: '!contains', starts_with: 'startsWith', ends_with: 'endsWith',\n greater_than: '>', less_than: '<', greater_than_or_equal: '>=', less_than_or_equal: '<=',\n is_empty: 'isEmpty', is_not_empty: 'isNotEmpty', in: 'in', not_in: '!in',\n between: 'between', regex: 'regex',\n }\n return map[op] ?? '=='\n}\n\nfunction groupToExpression(group: ConditionGroupUI, action: ConditionAction): string {\n if (group.rules.length === 0) return ''\n\n const parts = group.rules\n .filter((r) => r.variableCode)\n .map((rule) => {\n const varRef = `\\${${rule.variableCode}}`\n const sym = operatorToSymbol(rule.operator)\n\n if (rule.operator === 'is_empty') return `isEmpty(${varRef})`\n if (rule.operator === 'is_not_empty') return `isNotEmpty(${varRef})`\n if (rule.operator === 'contains') return `contains(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'starts_with') return `startsWith(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'ends_with') return `endsWith(${varRef}, \"${rule.value}\")`\n\n const val = /^\\d+(\\.\\d+)?$/.test(rule.value) ? rule.value : `\"${rule.value}\"`\n return `${varRef} ${sym} ${val}`\n })\n\n if (parts.length === 0) return ''\n\n const joined = parts.join(group.logic === 'and' ? ' && ' : ' || ')\n\n if (action === 'show') return `show(${joined})`\n if (action === 'hide') return `hide(${joined})`\n if (action === 'validate') return `ConditionEval(${joined})`\n return joined\n}\n\nfunction parseExpressionToGroup(expression: string): ConditionGroupUI {\n // Simple parsing — returns a basic group for the visual editor\n // Complex expressions are kept as raw text\n return { logic: 'and', rules: [] }\n}\n\n// ---- Shared styles ----\n\nconst selectStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n\nconst pillStyle: React.CSSProperties = {\n padding: '2px 8px', borderRadius: '10px', border: 'none',\n fontSize: '10px', fontWeight: 600, cursor: 'pointer',\n}\n","/**\n * DataSourceSelector — select a DataSourceConnector + map dependency fields.\n *\n * Allows:\n * - Selecting a registered connector by ID\n * - Mapping dependency keys to variable codes (e.g. departementId → ${DEPARTEMENT})\n * - Previewing the connector configuration\n */\n\nimport { useState } from 'react'\nimport type { IDataSourceConnector } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\n\nexport interface DataSourceSelectorProps {\n /** Currently selected connector ID */\n dataSourceId?: string\n /** Current dependency mapping: { depKey: variableCode } */\n dependencies?: Record<string, string>\n /** Registered connectors available for selection */\n availableConnectors: IDataSourceConnector[]\n /** All variable codes available for dependency mapping */\n availableVariables: Array<{ code: string; name: string }>\n /** Called when connector changes */\n onConnectorChange: (connectorId: string | undefined) => void\n /** Called when dependencies change */\n onDependenciesChange: (dependencies: Record<string, string>) => void\n}\n\nexport function DataSourceSelector({\n dataSourceId,\n dependencies = {},\n availableConnectors,\n availableVariables,\n onConnectorChange,\n onDependenciesChange,\n}: DataSourceSelectorProps) {\n const labels = useLabels()\n const [newDepKey, setNewDepKey] = useState('')\n\n const selectedConnector = availableConnectors.find((c) => c.id === dataSourceId)\n const depEntries = Object.entries(dependencies)\n\n const handleAddDependency = () => {\n if (!newDepKey.trim()) return\n onDependenciesChange({ ...dependencies, [newDepKey.trim()]: '' })\n setNewDepKey('')\n }\n\n const handleRemoveDependency = (key: string) => {\n const next = { ...dependencies }\n delete next[key]\n onDependenciesChange(next)\n }\n\n const handleDepVarChange = (key: string, variableCode: string) => {\n onDependenciesChange({ ...dependencies, [key]: variableCode })\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px', padding: '8px', backgroundColor: '#f0fdf4', borderRadius: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#166534', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.dataSource.title}\n </div>\n\n {/* Connector selector */}\n <div>\n <label style={labelStyle}>{labels.dataSource.connector}</label>\n <select\n value={dataSourceId ?? ''}\n onChange={(e) => {\n const id = e.target.value || undefined\n onConnectorChange(id)\n if (!id) onDependenciesChange({})\n }}\n style={selectStyle}\n >\n <option value=\"\">{labels.dataSource.none}</option>\n {availableConnectors.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name} ({c.id})\n </option>\n ))}\n </select>\n </div>\n\n {/* Connector info */}\n {selectedConnector && (\n <div style={{ fontSize: '11px', color: '#166534', padding: '4px 6px', backgroundColor: '#dcfce7', borderRadius: '4px' }}>\n {labels.dataSource.connectedTo} <strong>{selectedConnector.name}</strong>\n </div>\n )}\n\n {/* Dependencies mapping */}\n {dataSourceId && (\n <>\n <div style={{ fontSize: '11px', fontWeight: 500, color: '#166534' }}>\n {labels.dataSource.dependencies(depEntries.length)}\n </div>\n\n {depEntries.map(([key, varCode]) => (\n <div key={key} style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <span style={{ fontSize: '11px', color: '#334155', minWidth: '60px', fontFamily: 'monospace' }}>\n {key}\n </span>\n <span style={{ fontSize: '11px', color: '#94a3b8' }}>→</span>\n <select\n value={varCode}\n onChange={(e) => handleDepVarChange(key, e.target.value)}\n style={{ ...selectStyle, flex: 1 }}\n >\n <option value=\"\">{labels.dataSource.selectVariable}</option>\n {availableVariables.map((v) => (\n <option key={v.code} value={v.code}>\n {v.name} ({v.code})\n </option>\n ))}\n </select>\n <button\n type=\"button\"\n onClick={() => handleRemoveDependency(key)}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px' }}\n >\n ×\n </button>\n </div>\n ))}\n\n {/* Add dependency */}\n <div style={{ display: 'flex', gap: '4px' }}>\n <input\n type=\"text\"\n value={newDepKey}\n onChange={(e) => setNewDepKey(e.target.value)}\n placeholder={labels.dataSource.dependencyKeyPlaceholder}\n style={{ ...inputStyle, flex: 1 }}\n onKeyDown={(e) => e.key === 'Enter' && handleAddDependency()}\n />\n <button\n type=\"button\"\n onClick={handleAddDependency}\n disabled={!newDepKey.trim()}\n style={{\n padding: '4px 8px', border: '1px solid #cbd5e1', borderRadius: '4px',\n backgroundColor: '#fff', color: '#2563eb', fontSize: '11px', cursor: 'pointer',\n opacity: newDepKey.trim() ? 1 : 0.5,\n }}\n >\n {labels.dataSource.addDependency}\n </button>\n </div>\n </>\n )}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n fontSize: '11px', fontWeight: 500, color: '#166534', display: 'block', marginBottom: '2px',\n}\n\nconst selectStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', backgroundColor: '#fff',\n}\n\nconst inputStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n","/**\n * OptionsEditor — inline editor for IVariableOption[] on select / multiselect /\n * radio / checkbox variable types. Provides add/remove/edit with label-to-value\n * slug auto-fill and an empty-field visual warning.\n *\n * Label is a `LocalizedString`: the row uses LocalizedInput so the admin can\n * fill each language tab when the form has more than one available lang.\n * Slug auto-fill uses the value of the default language as its source.\n *\n * Drag & drop reordering is out of scope (handled in a follow-up).\n */\n\nimport { DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport type { IVariableOption, LocalizedString } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\nimport { useEditorStore } from '../../store/editor-store'\nimport { LocalizedInput } from './LocalizedInput'\n\nexport interface OptionsEditorProps {\n options: IVariableOption[]\n onChange: (options: IVariableOption[]) => void\n disabled?: boolean\n}\n\n/**\n * Slugify a label into a value-safe code:\n * \"Très grande équipe\" → \"tres_grande_equipe\"\n * spaces → underscore, diacritics stripped, lowercase, non-alphanum dropped.\n */\nfunction slugifyValue(label: string): string {\n return label\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, '_')\n .replace(/[^a-z0-9_-]/g, '')\n}\n\nfunction asString(value: unknown): string {\n return typeof value === 'string' ? value : value == null ? '' : String(value)\n}\n\n/** Resolves a LocalizedString to a string for slug / empty-check purposes. */\nfunction pickLabelString(label: LocalizedString | undefined, defaultLang: string): string {\n if (label === undefined || label === null) return ''\n if (typeof label === 'string') return label\n const exact = label[defaultLang]\n if (typeof exact === 'string' && exact !== '') return exact\n for (const v of Object.values(label)) {\n if (typeof v === 'string' && v !== '') return v\n }\n return ''\n}\n\nexport function OptionsEditor({ options, onChange, disabled }: OptionsEditorProps) {\n const labels = useLabels()\n const form = useEditorStore((s) => s.form)\n const langConfig = form.langConfig ?? DEFAULT_LANG_CONFIG\n\n const updateOption = (index: number, patch: Partial<IVariableOption>) => {\n const next = options.map((opt, i) => (i === index ? { ...opt, ...patch } : opt))\n onChange(next)\n }\n\n const handleLabelChange = (index: number, nextLabel: LocalizedString) => {\n const current = options[index]\n const currentValue = asString(current.value)\n const prevPrimary = pickLabelString(current.label, langConfig.defaultLang)\n const nextPrimary = pickLabelString(nextLabel, langConfig.defaultLang)\n // Auto-fill the slug only when the value is still empty AND the primary\n // label just became non-empty (first time the user types).\n if (currentValue === '' && prevPrimary === '' && nextPrimary !== '') {\n updateOption(index, { label: nextLabel, value: slugifyValue(nextPrimary) })\n } else {\n updateOption(index, { label: nextLabel })\n }\n }\n\n const handleValueChange = (index: number, value: string) => {\n updateOption(index, { value })\n }\n\n const addOption = () => {\n onChange([...options, { label: '', value: '' }])\n }\n\n const removeOption = (index: number) => {\n onChange(options.filter((_, i) => i !== index))\n }\n\n const labelBlock: React.CSSProperties = {\n display: 'block',\n fontSize: '12px',\n fontWeight: 500,\n color: '#64748b',\n marginBottom: '4px',\n }\n\n const valueInputBase: React.CSSProperties = {\n flex: 1,\n padding: '6px 8px',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#000',\n outline: 'none',\n }\n\n const okBorder = '1px solid #e2e8f0'\n const errorBorder = '1px solid #ef4444'\n\n return (\n <div data-testid=\"options-editor\">\n <label style={labelBlock}>{labels.optionsEditor.optionsCount(options.length)}</label>\n\n {options.length === 0 && (\n <div\n data-testid=\"options-editor-empty\"\n style={{ fontSize: '12px', color: '#94a3b8', marginBottom: '8px' }}\n >\n {labels.optionsEditor.noOptions}\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {options.map((opt, index) => {\n const primary = pickLabelString(opt.label, langConfig.defaultLang)\n const valueStr = asString(opt.value)\n const labelInvalid = primary.trim() === ''\n const valueInvalid = valueStr.trim() === ''\n return (\n <div\n key={index}\n data-testid={`option-row-${index}`}\n style={{ display: 'flex', alignItems: 'flex-start', gap: '6px' }}\n >\n <div\n aria-label={labels.optionsEditor.optionLabelAria(index)}\n data-testid={`option-label-${index}`}\n style={{ flex: 1, border: labelInvalid ? errorBorder : okBorder, borderRadius: '4px' }}\n >\n <LocalizedInput\n value={opt.label}\n onChange={(next) => handleLabelChange(index, next)}\n availableLangs={langConfig.availableLangs}\n defaultLang={langConfig.defaultLang}\n placeholder={labels.optionsEditor.optionLabelPlaceholder}\n disabled={disabled}\n testIdPrefix={`option-label-input-${index}`}\n />\n </div>\n <input\n type=\"text\"\n aria-label={labels.optionsEditor.optionValueAria(index)}\n data-testid={`option-value-${index}`}\n value={valueStr}\n placeholder={labels.optionsEditor.optionValuePlaceholder}\n disabled={disabled}\n onChange={(e) => handleValueChange(index, e.target.value)}\n style={{ ...valueInputBase, border: valueInvalid ? errorBorder : okBorder, maxWidth: '40%' }}\n />\n <button\n type=\"button\"\n aria-label={labels.optionsEditor.removeOptionAria(index)}\n data-testid={`option-remove-${index}`}\n onClick={() => removeOption(index)}\n disabled={disabled}\n style={{\n width: '24px',\n height: '24px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#64748b',\n cursor: disabled ? 'not-allowed' : 'pointer',\n lineHeight: 1,\n fontSize: '14px',\n }}\n >\n ×\n </button>\n </div>\n )\n })}\n </div>\n\n <button\n type=\"button\"\n data-testid=\"options-editor-add\"\n onClick={addOption}\n disabled={disabled}\n style={{\n marginTop: '8px',\n padding: '6px 10px',\n border: '1px dashed #94a3b8',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: '#2563eb',\n fontSize: '12px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n {labels.optionsEditor.addOption}\n </button>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport { DataSourceSelector } from './DataSourceSelector'\nimport { OptionsEditor } from './OptionsEditor'\nimport { useLabels } from '../../i18n'\nimport {\n DEFAULT_LANG_CONFIG,\n getPageVariables,\n getPageRosters,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IFormVariable,\n IVariableTemplateOverrides,\n VariableType,\n IConditionRule,\n IDataSourceConnector,\n IVariableOption,\n} from '@msbci/form-core'\n\nexport interface VariablePropertiesProps {\n variable: IFormVariable\n pageCode: string\n rosterCode?: string\n /** Data source connectors available for selection */\n availableConnectors?: IDataSourceConnector[]\n}\n\n/**\n * Keys that live on a template AND that can be overridden locally. Used to\n * route edits to `setVariableOverride` (for linked variables) instead of\n * the regular `updateVariable`. Maps `'type'` on the variable to\n * `'variableType'` on the override key — both refer to the same concept.\n */\ntype OverrideField =\n | 'type'\n | 'description'\n | 'placeholder'\n | 'isRequired'\n | 'isReadonly'\n | 'isHidden'\n | 'options'\n | 'validationRules'\n | 'conditions'\n | 'expression'\n | 'dataSourceId'\n | 'dataSourceDependencies'\n | 'style'\n | 'metadata'\n\nconst OVERRIDE_FIELDS: ReadonlySet<OverrideField> = new Set([\n 'type', 'description', 'placeholder',\n 'isRequired', 'isReadonly', 'isHidden',\n 'options', 'validationRules', 'conditions',\n 'expression', 'dataSourceId', 'dataSourceDependencies',\n 'style', 'metadata',\n])\n\nfunction variableToOverrideKey(field: OverrideField): keyof IVariableTemplateOverrides {\n return field === 'type' ? 'variableType' : (field as keyof IVariableTemplateOverrides)\n}\n\nexport function VariableProperties({\n variable,\n pageCode,\n rosterCode,\n availableConnectors = [],\n}: VariablePropertiesProps) {\n const { form, updateVariable, setVariableOverride, resetVariableOverride, availableTemplates } = useEditorStore()\n const labels = useLabels()\n\n const variableTypes = useMemo<Array<{ value: VariableType; label: string }>>(\n () => [\n { value: 'text', label: labels.toolbox.types.text },\n { value: 'textarea', label: labels.toolbox.types.textarea },\n { value: 'number', label: labels.toolbox.types.number },\n { value: 'date', label: labels.toolbox.types.date },\n { value: 'datetime', label: labels.toolbox.types.datetime },\n { value: 'time', label: labels.toolbox.types.time },\n { value: 'select', label: labels.toolbox.types.select },\n { value: 'multiselect', label: labels.toolbox.types.multiselect },\n { value: 'radio', label: labels.toolbox.types.radio },\n { value: 'checkbox', label: labels.toolbox.types.checkbox },\n { value: 'file', label: labels.toolbox.types.file },\n { value: 'gps', label: labels.toolbox.types.gps },\n { value: 'rating', label: labels.toolbox.types.rating },\n { value: 'calculated', label: labels.toolbox.types.calculated },\n { value: 'hidden', label: labels.toolbox.types.hidden },\n { value: 'label', label: labels.toolbox.types.label },\n ],\n [labels],\n )\n\n const isLinked = Boolean(variable.templateId)\n const linkedTemplate = isLinked\n ? availableTemplates.find((t) => t.id === variable.templateId)\n : undefined\n\n const fallbackLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n /**\n * Apply a partial update to the variable.\n * - When the variable is template-linked AND every field in `updates`\n * is in the surchargeable set, we route through `setVariableOverride`\n * so the override map stays in sync (one call per field).\n * - Otherwise (instance-only fields, or non-linked variable) we fall\n * back to a plain `updateVariable`.\n *\n * Mixed payloads (instance-only + surchargeable on the same edit) are\n * supported by issuing both calls.\n */\n const update = (updates: Partial<IFormVariable>) => {\n if (!isLinked) {\n updateVariable(pageCode, variable.code, updates, rosterCode)\n return\n }\n const instanceUpdates: Partial<IFormVariable> = {}\n let hasInstance = false\n for (const [k, v] of Object.entries(updates)) {\n if (OVERRIDE_FIELDS.has(k as OverrideField)) {\n const overrideKey = variableToOverrideKey(k as OverrideField)\n setVariableOverride(\n pageCode,\n variable.code,\n overrideKey,\n v as IVariableTemplateOverrides[typeof overrideKey],\n rosterCode,\n )\n } else {\n (instanceUpdates as Record<string, unknown>)[k] = v\n hasInstance = true\n }\n }\n if (hasInstance) {\n updateVariable(pageCode, variable.code, instanceUpdates, rosterCode)\n }\n }\n\n const isOverridden = (field: OverrideField): boolean => {\n if (!isLinked) return false\n const key = variableToOverrideKey(field)\n return Object.prototype.hasOwnProperty.call(variable.templateOverrides ?? {}, key)\n }\n\n const handleReset = (field: OverrideField) => {\n if (!isLinked) return\n resetVariableOverride(pageCode, variable.code, variableToOverrideKey(field), rosterCode)\n }\n\n // Collect all variable codes in the form for condition builder / dependency mapping.\n // `name` is LocalizedString — resolve to the form's defaultLang for display.\n const displayName = (n: IFormVariable['name']): string =>\n resolveLabel(n, fallbackLang, fallbackLang)\n const allVariables = form.pages.flatMap((p) => [\n ...getPageVariables(p).map((v) => ({ code: v.code, name: displayName(v.name) })),\n ...getPageRosters(p).flatMap((r) =>\n r.variables.map((v) => ({ code: v.code, name: displayName(v.name) })),\n ),\n ])\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n {isLinked && (\n <LinkedTemplateBanner\n variable={variable}\n templateCodeLabel={labels.properties.templateCode}\n templateNameLabel={labels.properties.templateName}\n bannerTitle={labels.properties.linkedTemplate}\n defaultLang={fallbackLang}\n />\n )}\n\n {/* Name — read-only when linked to a template */}\n {isLinked ? (\n <ReadOnlyLocalizedField\n label={labels.properties.templateName}\n value={variable.name}\n defaultLang={fallbackLang}\n testId=\"variable-name-readonly\"\n />\n ) : (\n <LocalizedField\n label={labels.properties.name}\n value={variable.name}\n onChange={(v) => update({ name: v })}\n testIdPrefix=\"variable-name\"\n />\n )}\n\n <PropertyField\n label={isLinked ? labels.properties.templateCode : labels.properties.code}\n value={variable.code}\n onChange={() => {}}\n readOnly\n />\n\n <FieldWithReset\n isOverridden={isOverridden('description')}\n onReset={() => handleReset('description')}\n resetLabel={labels.properties.resetOverride}\n >\n <LocalizedField\n label={labels.properties.description}\n value={variable.description}\n onChange={(v) => update({ description: v })}\n testIdPrefix=\"variable-description\"\n />\n </FieldWithReset>\n\n <FieldWithReset\n isOverridden={isOverridden('placeholder')}\n onReset={() => handleReset('placeholder')}\n resetLabel={labels.properties.resetOverride}\n >\n <LocalizedField\n label={labels.properties.placeholder}\n value={variable.placeholder}\n onChange={(v) => update({ placeholder: v })}\n testIdPrefix=\"variable-placeholder\"\n />\n </FieldWithReset>\n\n {/* Type */}\n <FieldWithReset\n isOverridden={isOverridden('type')}\n onReset={() => handleReset('type')}\n resetLabel={labels.properties.resetOverride}\n >\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.type}\n </label>\n <select\n value={variable.type}\n onChange={(e) => update({ type: e.target.value as VariableType })}\n style={{ width: '100%', padding: '6px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n {variableTypes.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n </FieldWithReset>\n\n {/* Rating style (lives on metadata — overridable as a whole metadata blob) */}\n {variable.type === 'rating' && (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.ratingStyle}\n </label>\n <select\n value={(variable.metadata as any)?.ratingStyle ?? 'star'}\n onChange={(e) => update({ metadata: { ...variable.metadata as any, ratingStyle: e.target.value } })}\n style={{ width: '100%', padding: '6px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n <option value=\"star\">{labels.properties.ratingStyles.star}</option>\n <option value=\"number\">{labels.properties.ratingStyles.number}</option>\n <option value=\"color\">{labels.properties.ratingStyles.color}</option>\n </select>\n </div>\n )}\n\n {/* Layout — instance-only, NOT overridable */}\n <div style={{ padding: '8px', backgroundColor: '#f8fafc', borderRadius: '6px', display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase' }}>{labels.properties.layout}</div>\n <CheckboxProperty\n label={labels.properties.startNewRow}\n checked={variable.startWithNewLine !== false}\n onChange={(v) => update({ startWithNewLine: v ? undefined : false })}\n />\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '2px' }}>\n {labels.properties.columnSpan}\n </label>\n <select\n value={variable.colSpan ?? 'auto'}\n onChange={(e) => update({ colSpan: e.target.value === 'auto' ? undefined : parseInt(e.target.value) })}\n style={{ width: '100%', padding: '4px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n <option value=\"auto\">{labels.properties.columnSpanAuto}</option>\n {[1,2,3,4,5,6,7,8,9,10,11,12].map((n) => (\n <option key={n} value={n}>\n {n}/12{n === 6 ? labels.properties.columnSpanHalf : n === 4 ? labels.properties.columnSpanThird : n === 12 ? labels.properties.columnSpanFull : ''}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Flags */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <FieldWithReset\n isOverridden={isOverridden('isRequired')}\n onReset={() => handleReset('isRequired')}\n resetLabel={labels.properties.resetOverride}\n inline\n >\n <CheckboxProperty label={labels.properties.required} checked={variable.isRequired} onChange={(v) => update({ isRequired: v })} />\n </FieldWithReset>\n <FieldWithReset\n isOverridden={isOverridden('isReadonly')}\n onReset={() => handleReset('isReadonly')}\n resetLabel={labels.properties.resetOverride}\n inline\n >\n <CheckboxProperty label={labels.properties.readonly} checked={variable.isReadonly} onChange={(v) => update({ isReadonly: v })} />\n </FieldWithReset>\n <FieldWithReset\n isOverridden={isOverridden('isHidden')}\n onReset={() => handleReset('isHidden')}\n resetLabel={labels.properties.resetOverride}\n inline\n >\n <CheckboxProperty label={labels.properties.hidden} checked={variable.isHidden} onChange={(v) => update({ isHidden: v })} />\n </FieldWithReset>\n </div>\n\n {/* Calculated expression */}\n {variable.type === 'calculated' && (\n <FieldWithReset\n isOverridden={isOverridden('expression')}\n onReset={() => handleReset('expression')}\n resetLabel={labels.properties.resetOverride}\n >\n <PropertyField\n label={labels.properties.expression}\n value={variable.expression ?? ''}\n onChange={(v) => update({ expression: v || undefined })}\n multiline\n />\n </FieldWithReset>\n )}\n\n {/* Data source connector */}\n {['select', 'multiselect', 'radio'].includes(variable.type) && (\n <DataSourceSelector\n dataSourceId={variable.dataSourceId}\n dependencies={variable.dataSourceDependencies}\n availableConnectors={availableConnectors}\n availableVariables={allVariables}\n onConnectorChange={(id) => update({ dataSourceId: id })}\n onDependenciesChange={(deps) => update({ dataSourceDependencies: Object.keys(deps).length > 0 ? deps : undefined })}\n />\n )}\n\n {/* Static options (when no data source) */}\n {['select', 'multiselect', 'radio', 'checkbox'].includes(variable.type) && !variable.dataSourceId && (\n <FieldWithReset\n isOverridden={isOverridden('options')}\n onReset={() => handleReset('options')}\n resetLabel={labels.properties.resetOverride}\n >\n <OptionsEditor\n options={variable.options ?? []}\n onChange={(options: IVariableOption[]) => update({ options })}\n />\n </FieldWithReset>\n )}\n\n {/* Conditions */}\n <FieldWithReset\n isOverridden={isOverridden('conditions')}\n onReset={() => handleReset('conditions')}\n resetLabel={labels.properties.resetOverride}\n >\n <ConditionBuilder\n conditions={variable.conditions ?? []}\n onChange={(conditions) => update({ conditions })}\n availableVariables={allVariables}\n rosterContext={(() => {\n if (!rosterCode) return undefined\n const page = form.pages.find((p) => p.code === pageCode)\n const roster = page\n ? getPageRosters(page).find((r) => r.code === rosterCode)\n : undefined\n if (!roster) return undefined\n return {\n variables: roster.variables.map((v) => ({ code: v.code, order: v.order })),\n currentVariableCode: variable.code,\n currentVariableOrder: variable.order,\n }\n })()}\n />\n </FieldWithReset>\n </div>\n )\n}\n\nfunction LinkedTemplateBanner({\n variable,\n templateCodeLabel,\n templateNameLabel,\n bannerTitle,\n defaultLang,\n}: {\n variable: IFormVariable\n templateCodeLabel: string\n templateNameLabel: string\n bannerTitle: string\n defaultLang: string\n}) {\n return (\n <div\n data-testid=\"variable-linked-banner\"\n style={{\n padding: '10px 12px',\n backgroundColor: '#eff6ff',\n border: '1px solid #bfdbfe',\n borderRadius: '6px',\n fontSize: '12px',\n color: '#1e40af',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', fontWeight: 600 }}>\n <span>🔗</span>\n <span>{bannerTitle}</span>\n </div>\n <div style={{ fontSize: '11px', color: '#1e3a8a' }}>\n {templateCodeLabel} : <span style={{ fontFamily: 'monospace' }}>{variable.code}</span>\n </div>\n <div style={{ fontSize: '11px', color: '#1e3a8a' }}>\n {templateNameLabel} : {resolveLabel(variable.name, defaultLang, defaultLang)}\n </div>\n </div>\n )\n}\n\nfunction ReadOnlyLocalizedField({\n label,\n value,\n defaultLang,\n testId,\n}: {\n label: string\n value: IFormVariable['name']\n defaultLang: string\n testId: string\n}) {\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n <div\n data-testid={testId}\n style={{\n padding: '6px 8px',\n backgroundColor: '#f1f5f9',\n color: '#64748b',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n cursor: 'not-allowed',\n userSelect: 'text',\n }}\n >\n {resolveLabel(value, defaultLang, defaultLang)}\n </div>\n </div>\n )\n}\n\ninterface FieldWithResetProps {\n isOverridden: boolean\n onReset: () => void\n resetLabel: string\n children: React.ReactNode\n /** When inline, render the reset button next to the child on the same row. */\n inline?: boolean\n}\n\nfunction FieldWithReset({ isOverridden, onReset, resetLabel, children, inline = false }: FieldWithResetProps) {\n if (!isOverridden) return <>{children}</>\n const button = (\n <button\n type=\"button\"\n data-testid=\"reset-override\"\n onClick={onReset}\n style={{\n padding: '2px 8px',\n border: '1px solid #fde68a',\n borderRadius: '4px',\n backgroundColor: '#fffbeb',\n color: '#92400e',\n fontSize: '10px',\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n ↺ {resetLabel}\n </button>\n )\n if (inline) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div style={{ flex: 1 }}>{children}</div>\n {button}\n </div>\n )\n }\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {children}\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>{button}</div>\n </div>\n )\n}\n\nfunction CheckboxProperty({\n label,\n checked,\n onChange,\n}: {\n label: string\n checked: boolean\n onChange: (value: boolean) => void\n}) {\n return (\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}>\n <input type=\"checkbox\" checked={checked} onChange={(e) => onChange(e.target.checked)} />\n {label}\n </label>\n )\n}\n","import { useMemo } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { useLabels } from '../../i18n'\nimport type { IFormRoster, RosterType } from '@msbci/form-core'\n\nexport function RosterProperties({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { updateRoster } = useEditorStore()\n const labels = useLabels()\n\n const rosterTypeOptions = useMemo<Array<{ value: RosterType; label: string }>>(\n () => [\n { value: 'check', label: labels.properties.rosterTypes.check },\n { value: 'list', label: labels.properties.rosterTypes.list },\n { value: 'collection', label: labels.properties.rosterTypes.collection },\n { value: 'collection_extend', label: labels.properties.rosterTypes.collection_extend },\n ],\n [labels],\n )\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <LocalizedField\n label={labels.properties.name}\n value={roster.name}\n onChange={(v) => updateRoster(pageCode, roster.code, { name: v })}\n testIdPrefix=\"roster-name\"\n />\n <PropertyField label={labels.properties.code} value={roster.code} onChange={() => {}} />\n\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {labels.properties.rosterType}\n </label>\n <select\n value={roster.rosterType}\n onChange={(e) => updateRoster(pageCode, roster.code, { rosterType: e.target.value as RosterType })}\n style={{ width: '100%', padding: '6px 8px', border: '1px solid #e2e8f0', borderRadius: '4px', fontSize: '13px' }}\n >\n {rosterTypeOptions.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n <PropertyField\n label={labels.properties.pilotVariableCode}\n value={roster.pilotVariableCode ?? ''}\n onChange={(v) => updateRoster(pageCode, roster.code, { pilotVariableCode: v || undefined })}\n />\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.properties.rosterSummary(roster.variables.length, roster.options?.length ?? 0)}\n </div>\n </div>\n )\n}\n","/**\n * Properties panel — right side of the editor.\n * Contextual based on selection: form, page, roster, or variable.\n */\n\nimport { useEditorStore } from '../../store/editor-store'\nimport { FormProperties } from './FormProperties'\nimport { PageProperties } from './PageProperties'\nimport { VariableProperties } from './VariableProperties'\nimport { RosterProperties } from './RosterProperties'\nimport { useLabels } from '../../i18n'\nimport { getPageVariables, getPageRosters } from '@msbci/form-core'\nimport type { IDataSourceConnector } from '@msbci/form-core'\n\nexport interface PropertiesPanelProps {\n availableConnectors?: IDataSourceConnector[]\n}\n\nexport function PropertiesPanel({ availableConnectors = [] }: PropertiesPanelProps) {\n const { selection, form } = useEditorStore()\n const labels = useLabels()\n\n const content = (() => {\n switch (selection.type) {\n case 'form':\n return <FormProperties />\n\n case 'page': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n return <PageProperties page={page} />\n }\n\n case 'roster': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n const roster = page\n ? getPageRosters(page).find((r) => r.code === selection.rosterCode)\n : undefined\n if (!page || !roster) return <FormProperties />\n return <RosterProperties roster={roster} pageCode={page.code} />\n }\n\n case 'variable': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n const roster = selection.rosterCode\n ? getPageRosters(page).find((r) => r.code === selection.rosterCode)\n : undefined\n const variables = roster ? roster.variables : getPageVariables(page)\n const variable = variables.find((v) => v.code === selection.variableCode)\n if (!variable) return <FormProperties />\n return (\n <VariableProperties\n variable={variable}\n pageCode={page.code}\n rosterCode={selection.rosterCode}\n availableConnectors={availableConnectors}\n />\n )\n }\n }\n })()\n\n return (\n <div\n style={{\n width: '300px',\n borderLeft: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n overflowY: 'auto',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n borderBottom: '1px solid #e2e8f0',\n fontSize: '12px',\n fontWeight: 600,\n color: '#64748b',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n {labels.properties.title}\n </div>\n <div style={{ padding: '16px' }}>{content}</div>\n </div>\n )\n}\n","/**\n * FormEditor — main entry point for the visual form builder.\n *\n * 3-panel layout: Toolbox (left) | Canvas (center) | Properties (right)\n */\n\nimport React, { useEffect, useMemo, useRef } from 'react'\nimport type { ComponentType } from 'react'\nimport { useEditorStore } from '../store/editor-store'\nimport type { IEditorAdapter } from '../store/types'\nimport { EditorToolbar } from './toolbar/EditorToolbar'\nimport { Toolbox } from './toolbox/Toolbox'\nimport { Canvas } from './canvas/Canvas'\nimport { DndManager } from './DndManager'\nimport { PropertiesPanel } from './properties/PropertiesPanel'\nimport { EditorLabelsProvider, frLabels, mergeLabels } from '../i18n'\nimport type { DeepPartial, IEditorLabels } from '../i18n'\nimport type { IFormDefinition, IDataSourceConnector } from '@msbci/form-core'\n\nexport interface FormEditorProps {\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n adapter?: IEditorAdapter\n initialForm?: IFormDefinition\n formId?: string\n onChange?: (form: IFormDefinition) => void\n onSave?: () => void\n /**\n * Localised labels for every visible string in the editor.\n * Deep-merged with the French defaults — pass only the keys you want to\n * override. Use {@link import('../i18n').enLabels} for English out of the box.\n */\n labels?: DeepPartial<IEditorLabels>\n PreviewComponent?: ComponentType<{\n formSchema: IFormDefinition\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n mode?: string\n }>\n /**\n * Override the default DnD-enabled Toolbox. Most consumers should leave\n * this undefined and rely on the default `Toolbox` component, which\n * already supports drag & drop and the click-to-add flow.\n */\n ToolboxComponent?: ComponentType<any>\n /**\n * Override the default DnD-enabled Canvas. Most consumers should leave\n * this undefined; the default `Canvas` component handles reordering and\n * cross-container drops automatically.\n */\n CanvasComponent?: ComponentType<any>\n /**\n * @deprecated Drag & drop is now provided by `DndManager` internally.\n * If you still pass a `Wrapper`, it is applied AROUND the internal\n * `<DndManager>` so your wrapper keeps running, but you no longer need\n * to mount your own `<DndContext>`. A one-time console warning is\n * emitted to make the deprecation visible.\n */\n Wrapper?: ComponentType<any>\n}\n\nexport function FormEditor({\n theme,\n dataSources,\n adapter,\n initialForm,\n formId,\n onChange,\n onSave,\n labels,\n PreviewComponent,\n ToolboxComponent,\n CanvasComponent,\n Wrapper,\n}: FormEditorProps) {\n const { form, view, setForm, setAdapter, load, setAvailableTemplates } = useEditorStore()\n const resolvedLabels = useMemo(() => mergeLabels(frLabels, labels), [labels])\n\n useEffect(() => {\n if (adapter) setAdapter(adapter)\n }, [adapter, setAdapter])\n\n useEffect(() => {\n if (initialForm) {\n setForm(initialForm)\n } else if (formId && adapter?.loadForm) {\n load(formId)\n }\n }, [initialForm, formId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Reload the variable-template library whenever the form's scope changes\n // (after initial load, after the user edits scopeId via FormProperties,\n // or when an adapter without `loadTemplates` is swapped in).\n useEffect(() => {\n const scopeId = form.scopeId\n if (!scopeId || !adapter?.loadTemplates) {\n setAvailableTemplates([])\n return\n }\n let cancelled = false\n adapter\n .loadTemplates(scopeId)\n .then((templates) => {\n if (!cancelled) setAvailableTemplates(templates)\n })\n .catch(() => {\n if (!cancelled) setAvailableTemplates([])\n })\n return () => {\n cancelled = true\n }\n }, [form.scopeId, adapter, setAvailableTemplates])\n\n // Notify parent of changes — skip initial setForm to avoid loops\n const onChangeRef = useRef(onChange)\n const isInitialRef = useRef(true)\n onChangeRef.current = onChange\n useEffect(() => {\n if (isInitialRef.current) {\n isInitialRef.current = false\n return\n }\n onChangeRef.current?.(form)\n }, [form])\n\n const ActualToolbox = ToolboxComponent ?? Toolbox\n const ActualCanvas = CanvasComponent ?? Canvas\n\n // Emit a one-time console warning when the deprecated `Wrapper` prop\n // is provided. We keep it functional (applied AROUND the internal\n // <DndManager>) for backward compatibility.\n const wrapperWarnedRef = useRef(false)\n if (Wrapper && !wrapperWarnedRef.current && typeof console !== 'undefined') {\n wrapperWarnedRef.current = true\n console.warn(\n '[@msbci/form-editor] FormEditor.Wrapper is deprecated — drag & drop is now provided by the internal DndManager. The custom Wrapper will still be applied AROUND DndManager, but you should remove it.',\n )\n }\n const OuterWrapper = Wrapper ?? React.Fragment\n\n const content = (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <EditorToolbar onSave={onSave} />\n\n <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n {view === 'canvas' && (\n <>\n <ActualToolbox />\n <ActualCanvas />\n <PropertiesPanel availableConnectors={dataSources ? Object.values(dataSources) : []} />\n </>\n )}\n\n {view === 'preview' && PreviewComponent && (\n <div style={{ flex: 1, overflow: 'auto' }}>\n <PreviewComponent\n formSchema={form}\n theme={theme}\n dataSources={dataSources}\n mode=\"fill\"\n />\n </div>\n )}\n\n {view === 'preview' && !PreviewComponent && (\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>\n {resolvedLabels.formEditor.previewMissing}\n </div>\n )}\n\n {view === 'json' && (\n <div style={{ flex: 1, overflow: 'auto', padding: '16px' }}>\n <pre style={{\n fontFamily: 'monospace', fontSize: '12px', color: '#334155',\n backgroundColor: '#f8fafc', padding: '16px', borderRadius: '8px',\n border: '1px solid #e2e8f0', whiteSpace: 'pre-wrap', wordBreak: 'break-all',\n }}>\n {JSON.stringify(form, null, 2)}\n </pre>\n </div>\n )}\n </div>\n </div>\n )\n\n return (\n <EditorLabelsProvider labels={resolvedLabels}>\n <OuterWrapper>\n <DndManager>{content}</DndManager>\n </OuterWrapper>\n </EditorLabelsProvider>\n )\n}\n","/**\n * Toolbox — left panel. Two tabs:\n * - Champs : variable types + roster variants (original content).\n * - Variables : reusable templates from the current scope.\n *\n * Click to add. No drag & drop dependency (see Toolbox.tsx for DnD).\n */\n\nimport { useMemo, useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport {\n DEFAULT_LANG_CONFIG,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IVariableTemplate,\n LocalizedString,\n RosterType,\n VariableType,\n} from '@msbci/form-core'\n\ntype ToolboxEntry =\n | { kind: 'variable'; type: VariableType; label: string; icon: string }\n | { kind: 'roster'; rosterType: RosterType; label: string; icon: string }\n\ninterface ToolboxGroup {\n label: string\n items: ToolboxEntry[]\n}\n\ntype Tab = 'fields' | 'variables'\n\nexport function ToolboxSimple() {\n const labels = useLabels()\n const [tab, setTab] = useState<Tab>('fields')\n const [search, setSearch] = useState('')\n const { form, selection, addVariable, addRoster, addVariableFromTemplate, availableTemplates } = useEditorStore()\n\n const GROUPS = useMemo<ToolboxGroup[]>(\n () => [\n { label: labels.toolbox.groupText, items: [\n { kind: 'variable', type: 'text', label: labels.toolbox.types.text, icon: 'T' },\n { kind: 'variable', type: 'textarea', label: labels.toolbox.types.textarea, icon: '¶' },\n { kind: 'variable', type: 'number', label: labels.toolbox.types.number, icon: '#' },\n { kind: 'variable', type: 'email', label: labels.toolbox.types.email, icon: '@' },\n ] },\n { label: labels.toolbox.groupSelection, items: [\n { kind: 'variable', type: 'select', label: labels.toolbox.types.select, icon: '▼' },\n { kind: 'variable', type: 'multiselect', label: labels.toolbox.types.multiselect, icon: '☑' },\n { kind: 'variable', type: 'radio', label: labels.toolbox.types.radio, icon: '◉' },\n { kind: 'variable', type: 'checkbox', label: labels.toolbox.types.checkbox, icon: '☐' },\n ] },\n { label: labels.toolbox.groupDateTime, items: [\n { kind: 'variable', type: 'date', label: labels.toolbox.types.date, icon: '📅' },\n { kind: 'variable', type: 'datetime', label: labels.toolbox.types.datetime, icon: '🕐' },\n { kind: 'variable', type: 'time', label: labels.toolbox.types.time, icon: '⏰' },\n ] },\n { label: labels.toolbox.groupMedia, items: [\n { kind: 'variable', type: 'file', label: labels.toolbox.types.file, icon: '📎' },\n { kind: 'variable', type: 'image', label: labels.toolbox.types.image, icon: '🖼' },\n { kind: 'variable', type: 'gps', label: labels.toolbox.types.gps, icon: '📍' },\n ] },\n { label: labels.toolbox.groupAdvanced, items: [\n { kind: 'variable', type: 'rating', label: labels.toolbox.types.rating, icon: '★' },\n { kind: 'variable', type: 'calculated', label: labels.toolbox.types.calculated, icon: 'fx' },\n { kind: 'variable', type: 'hidden', label: labels.toolbox.types.hidden, icon: '👁' },\n { kind: 'variable', type: 'label', label: labels.toolbox.types.label, icon: 'Aa' },\n ] },\n { label: labels.toolbox.groupRoster, items: [\n { kind: 'roster', rosterType: 'check', label: labels.toolbox.typeRosterCheck, icon: '▤' },\n { kind: 'roster', rosterType: 'list', label: labels.toolbox.typeRosterList, icon: '▦' },\n { kind: 'roster', rosterType: 'collection', label: labels.toolbox.typeRosterCollection, icon: '▥' },\n { kind: 'roster', rosterType: 'collection_extend', label: labels.toolbox.typeRosterCollectionExtend, icon: '▩' },\n ] },\n ],\n [labels],\n )\n\n const pageCode = selection.type === 'page' ? selection.pageCode\n : selection.type === 'variable' ? selection.pageCode\n : selection.type === 'roster' ? selection.pageCode\n : form.pages[0]?.code\n\n const handleAdd = (entry: ToolboxEntry) => {\n if (!pageCode) return\n const page = form.pages.find((p) => p.code === pageCode)\n if (!page) return\n\n if (entry.kind === 'roster') {\n const code = `ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addRoster(pageCode, {\n id: `roster-${Date.now()}`,\n code,\n name: labels.canvas.newRosterName,\n rosterType: entry.rosterType,\n order: 0,\n variables: [],\n })\n return\n }\n\n const code = `${entry.type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(pageCode, {\n id: `var-${Date.now()}`,\n code,\n name: labels.canvas.newVariableName(entry.label),\n type: entry.type,\n order: 0,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n })\n }\n\n const handleAddTemplate = (template: IVariableTemplate) => {\n if (!pageCode) return\n addVariableFromTemplate(pageCode, template)\n }\n\n const filtered = GROUPS.map((g) => ({\n ...g,\n items: g.items.filter((i) => i.label.toLowerCase().includes(search.toLowerCase())),\n })).filter((g) => g.items.length > 0)\n\n return (\n <div style={{ width: '220px', borderRight: '1px solid #e2e8f0', display: 'flex', flexDirection: 'column', backgroundColor: '#f8fafc', overflow: 'hidden' }}>\n <ToolboxTabs tab={tab} setTab={setTab} labels={labels} />\n <div style={{ padding: '12px', borderBottom: '1px solid #e2e8f0' }}>\n <input type=\"text\" placeholder={labels.toolbox.searchPlaceholder} value={search} onChange={(e) => setSearch(e.target.value)}\n style={{ width: '100%', padding: '6px 10px', border: '1px solid #e2e8f0', borderRadius: '6px', fontSize: '13px', outline: 'none', boxSizing: 'border-box' }} />\n </div>\n <div style={{ flex: 1, overflowY: 'auto', padding: '8px' }}>\n {!pageCode && <div style={{ padding: '12px', color: '#94a3b8', fontSize: '12px', textAlign: 'center' }}>{labels.toolbox.addPageFirst}</div>}\n\n {tab === 'fields' && filtered.map((group) => (\n <div key={group.label} style={{ marginBottom: '16px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#94a3b8', textTransform: 'uppercase', letterSpacing: '0.5px', marginBottom: '6px', padding: '0 4px' }}>\n {group.label}\n </div>\n {group.items.map((item) => {\n const itemKey = item.kind === 'roster' ? `roster-${item.rosterType}` : `var-${item.type}`\n const testId =\n item.kind === 'roster'\n ? `toolbox-roster-${item.rosterType}`\n : `toolbox-variable-${item.type}`\n return (\n <div\n key={itemKey}\n data-testid={testId}\n onClick={() => handleAdd(item)}\n style={{ display: 'flex', alignItems: 'center', gap: '8px', padding: '6px 8px', marginBottom: '2px', borderRadius: '6px', cursor: 'pointer', fontSize: '13px', color: '#334155', userSelect: 'none' }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = '#e2e8f0' }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent' }}\n >\n <span style={{ width: '20px', textAlign: 'center', fontSize: '14px' }}>{item.icon}</span>\n <span>{item.label}</span>\n </div>\n )\n })}\n </div>\n ))}\n\n {tab === 'variables' && (\n <VariablesTab\n templates={availableTemplates}\n scopeId={form.scopeId}\n search={search}\n onAdd={handleAddTemplate}\n defaultLang={form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang}\n labels={labels}\n />\n )}\n </div>\n </div>\n )\n}\n\nfunction ToolboxTabs({ tab, setTab, labels }: { tab: Tab; setTab: (t: Tab) => void; labels: ReturnType<typeof useLabels> }) {\n const baseTab: React.CSSProperties = {\n flex: 1,\n padding: '8px 0',\n fontSize: '12px',\n fontWeight: 500,\n textAlign: 'center',\n cursor: 'pointer',\n userSelect: 'none',\n color: '#64748b',\n borderBottomWidth: '2px',\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n }\n const activeTab: React.CSSProperties = {\n ...baseTab,\n color: '#2563eb',\n fontWeight: 600,\n borderBottomColor: '#2563eb',\n }\n return (\n <div style={{ display: 'flex', borderBottom: '1px solid #e2e8f0', backgroundColor: '#fff' }}>\n <div\n role=\"tab\"\n aria-selected={tab === 'fields'}\n data-testid=\"toolbox-tab-fields\"\n onClick={() => setTab('fields')}\n style={tab === 'fields' ? activeTab : baseTab}\n >\n {labels.toolbox.tabFields}\n </div>\n <div\n role=\"tab\"\n aria-selected={tab === 'variables'}\n data-testid=\"toolbox-tab-variables\"\n onClick={() => setTab('variables')}\n style={tab === 'variables' ? activeTab : baseTab}\n >\n {labels.toolbox.tabVariables}\n </div>\n </div>\n )\n}\n\ninterface VariablesTabProps {\n templates: IVariableTemplate[]\n scopeId: string | undefined\n search: string\n onAdd: (template: IVariableTemplate) => void\n defaultLang: string\n labels: ReturnType<typeof useLabels>\n}\n\nfunction VariablesTab({ templates, scopeId, search, onAdd, defaultLang, labels }: VariablesTabProps) {\n const emptyState = (text: string) => (\n <div\n data-testid=\"toolbox-variables-empty\"\n style={{ padding: '14px', color: '#94a3b8', fontSize: '12px', textAlign: 'center', fontStyle: 'italic' }}\n >\n {text}\n </div>\n )\n\n if (!scopeId) return emptyState(labels.toolbox.noScope)\n if (templates.length === 0) return emptyState(labels.toolbox.noTemplates)\n\n const needle = search.toLowerCase()\n const matches = templates\n .filter((t) => {\n if (!needle) return true\n const codeMatch = t.code.toLowerCase().includes(needle)\n const nameMatch = resolveLocalized(t.name, defaultLang).toLowerCase().includes(needle)\n return codeMatch || nameMatch\n })\n .slice()\n .sort((a, b) => a.code.localeCompare(b.code))\n\n if (matches.length === 0) return emptyState(labels.toolbox.noTemplates)\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {matches.map((template) => (\n <div\n key={template.id}\n data-testid={`toolbox-template-${template.code}`}\n onClick={() => onAdd(template)}\n style={{\n display: 'flex', alignItems: 'center', gap: '8px',\n padding: '6px 8px', borderRadius: '6px', cursor: 'pointer',\n fontSize: '13px', color: '#334155', userSelect: 'none',\n }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = '#e2e8f0' }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent' }}\n >\n <span\n style={{\n fontSize: '10px', fontWeight: 600,\n padding: '2px 6px', borderRadius: '4px',\n backgroundColor: '#e0e7ff', color: '#3730a3',\n textTransform: 'uppercase', letterSpacing: '0.3px',\n minWidth: '42px', textAlign: 'center',\n }}\n >\n {template.variableType}\n </span>\n <div style={{ display: 'flex', flexDirection: 'column', minWidth: 0, flex: 1 }}>\n <span style={{ fontFamily: 'monospace', fontSize: '11px', color: '#475569', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{template.code}</span>\n <span style={{ fontSize: '12px', color: '#1e293b', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{resolveLocalized(template.name, defaultLang)}</span>\n </div>\n </div>\n ))}\n </div>\n )\n}\n\nfunction resolveLocalized(value: LocalizedString | undefined, defaultLang: string): string {\n return resolveLabel(value, defaultLang, defaultLang)\n}\n","/**\n * Canvas — center panel. Displays form structure.\n * Click to select. Variables and rosters share a single ordered list\n * (`page.items[]`) and are rendered together; rosters always break the\n * current multi-column row and span the full width.\n */\n\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport {\n DEFAULT_LANG_CONFIG,\n getPageVariables,\n isPageRoster,\n isPageVariable,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IFormPage,\n IFormPageItem,\n IFormVariable,\n IFormRoster,\n LocalizedString,\n} from '@msbci/form-core'\n\n/**\n * Resolves a `LocalizedString` for display inside the editor canvas, using\n * the form's `defaultLang` (or French as the absolute fallback). The canvas\n * is a structural overview, not a language preview — admins keep editing\n * in the right-hand properties panel where each language has its own tab.\n */\nfunction useCanvasResolve() {\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n return (label: LocalizedString | undefined) => resolveLabel(label, defaultLang, defaultLang)\n}\n\n/**\n * Group consecutive variables into multi-column rows; rosters always\n * terminate the current row and stand on their own.\n */\ntype CanvasRow =\n | { kind: 'variables'; variables: IFormVariable[] }\n | { kind: 'roster'; roster: IFormRoster }\n\nfunction groupItemsIntoRows(items: IFormPageItem[]): CanvasRow[] {\n const sorted = items.slice().sort((a, b) => a.order - b.order)\n const rows: CanvasRow[] = []\n let currentVarRow: IFormVariable[] | null = null\n\n for (const item of sorted) {\n if (isPageRoster(item)) {\n if (currentVarRow) {\n rows.push({ kind: 'variables', variables: currentVarRow })\n currentVarRow = null\n }\n rows.push({ kind: 'roster', roster: item })\n continue\n }\n // variable\n const v = item as IFormVariable\n if (v.startWithNewLine === false && currentVarRow && currentVarRow.length > 0) {\n currentVarRow.push(v)\n } else {\n if (currentVarRow) rows.push({ kind: 'variables', variables: currentVarRow })\n currentVarRow = [v]\n }\n }\n\n if (currentVarRow) rows.push({ kind: 'variables', variables: currentVarRow })\n return rows\n}\n\nexport function CanvasSimple() {\n const { form } = useEditorStore()\n const labels = useLabels()\n\n if (form.pages.length === 0) {\n return <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>{labels.canvas.emptyStateNoPage}</div>\n }\n\n return (\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}>\n {form.pages.slice().sort((a, b) => a.order - b.order).map((page) => (\n <PageBlock key={page.code} page={page} />\n ))}\n </div>\n )\n}\n\nfunction PageBlock({ page }: { page: IFormPage }) {\n const { selection, select, removePage } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'page' && selection.pageCode === page.code\n\n const items: IFormPageItem[] = page.items ?? [\n ...getPageVariables(page),\n ...(page.rosters ?? []),\n ]\n const variableCount = items.filter(isPageVariable).length\n const rosterCount = items.filter(isPageRoster).length\n const rows = groupItemsIntoRows(items)\n\n return (\n <div style={{\n marginBottom: '16px', border: `2px solid ${isSelected ? '#2563eb' : '#e2e8f0'}`,\n borderRadius: '8px', overflow: 'hidden',\n }}>\n {/* Page header */}\n <div onClick={() => select({ type: 'page', pageCode: page.code })}\n style={{\n padding: '10px 14px', backgroundColor: isSelected ? '#eff6ff' : '#f8fafc',\n borderBottom: '1px solid #e2e8f0', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '14px', fontWeight: 600, color: '#1e293b' }}>{resolveCanvas(page.name) || labels.canvas.unnamedPage}</span>\n {page.isRepeatable && <span style={{ fontSize: '10px', padding: '1px 6px', borderRadius: '4px', backgroundColor: '#dbeafe', color: '#2563eb', fontWeight: 500 }}>{labels.canvas.repeatable}</span>}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '12px', color: '#94a3b8' }}>\n {labels.canvas.fieldsRostersCount(variableCount, rosterCount)}\n </span>\n <button onClick={(e) => { e.stopPropagation(); removePage(page.code) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px', padding: '2px 4px' }}>×</button>\n </div>\n </div>\n\n {/* Items (variables + rosters) */}\n <div style={{ padding: '4px 0' }}>\n {rows.map((row, rowIdx) => {\n if (row.kind === 'roster') {\n return <RosterBlock key={`r-${row.roster.code}`} roster={row.roster} pageCode={page.code} />\n }\n if (row.variables.length === 1) {\n return <VarRow key={row.variables[0]!.code} variable={row.variables[0]!} pageCode={page.code} />\n }\n return (\n <div key={`row-${rowIdx}`} style={{ display: 'flex', gap: '2px', backgroundColor: '#f0f4ff', borderLeft: '2px solid #c7d2fe', margin: '1px 0' }}>\n {row.variables.map((v) => (\n <div key={v.code} style={{ flex: v.colSpan ? `0 0 ${(v.colSpan / 12) * 100}%` : '1 1 0%', minWidth: 0 }}>\n <VarRow variable={v} pageCode={page.code} />\n </div>\n ))}\n </div>\n )\n })}\n\n {/* Empty state */}\n {items.length === 0 && (\n <div style={{ padding: '12px 14px', color: '#94a3b8', fontSize: '12px', fontStyle: 'italic' }}>\n {labels.canvas.emptyStatePage}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nfunction VarRow({ variable, pageCode, rosterCode }: { variable: IFormVariable; pageCode: string; rosterCode?: string }) {\n const { selection, select, removeVariable } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'variable' && selection.variableCode === variable.code\n\n return (\n <div onClick={(e) => { e.stopPropagation(); select({ type: 'variable', pageCode, variableCode: variable.code, rosterCode }) }}\n style={{\n display: 'flex', alignItems: 'center', gap: '8px', padding: '6px 14px', cursor: 'pointer',\n backgroundColor: isSelected ? '#eff6ff' : 'transparent',\n borderLeft: isSelected ? '3px solid #2563eb' : '3px solid transparent', fontSize: '13px',\n }}>\n <span style={{ color: '#94a3b8', fontSize: '11px', width: '60px', flexShrink: 0 }}>{variable.type}</span>\n <span style={{ color: '#334155', flex: 1 }}>{resolveCanvas(variable.name) || variable.code}</span>\n {variable.isRequired && <span style={{ color: '#ef4444', fontSize: '11px' }}>*</span>}\n {variable.conditions && variable.conditions.length > 0 && <span style={{ color: '#f59e0b', fontSize: '11px' }} title={labels.canvas.hasConditionsTitle}>⚡</span>}\n {variable.dataSourceId && <span style={{ color: '#22c55e', fontSize: '11px' }} title={labels.canvas.dataSourceConnectedTitle}>⟳</span>}\n <button onClick={(e) => { e.stopPropagation(); removeVariable(pageCode, variable.code, rosterCode) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '12px', padding: '0 2px', opacity: 0.5 }}>×</button>\n </div>\n )\n}\n\nfunction RosterBlock({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { selection, select, removeRoster, addVariable } = useEditorStore()\n const labels = useLabels()\n const resolveCanvas = useCanvasResolve()\n const isSelected = selection.type === 'roster' && selection.rosterCode === roster.code\n\n const handleAddVarToRoster = (e: React.MouseEvent) => {\n e.stopPropagation()\n const code = `RV_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(pageCode, {\n id: `var-${Date.now()}`,\n code,\n name: labels.canvas.newFieldName,\n type: 'text',\n order: roster.variables.length,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n }, roster.code)\n }\n\n return (\n <div style={{ margin: '4px 8px', border: `1px solid ${isSelected ? '#2563eb' : '#e2e8f0'}`, borderRadius: '6px', overflow: 'hidden' }}>\n {/* Roster header */}\n <div onClick={(e) => { e.stopPropagation(); select({ type: 'roster', pageCode, rosterCode: roster.code }) }}\n style={{\n padding: '6px 10px', backgroundColor: isSelected ? '#fef3c7' : '#fffbeb',\n fontSize: '12px', fontWeight: 600, color: '#92400e', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <span>▤ {resolveCanvas(roster.name) || roster.code}</span>\n <span style={{ fontSize: '10px', padding: '1px 4px', borderRadius: '3px', backgroundColor: '#fde68a', color: '#78350f' }}>\n {roster.rosterType}\n </span>\n {roster.pilotVariableCode && (\n <span style={{ fontSize: '10px', color: '#92400e', fontWeight: 400 }}>\n {labels.canvas.pilotPrefix} {roster.pilotVariableCode}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span style={{ fontSize: '11px', color: '#b45309' }}>{labels.canvas.rosterVarsCount(roster.variables.length)}</span>\n <button onClick={(e) => { e.stopPropagation(); removeRoster(pageCode, roster.code) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '12px' }}>×</button>\n </div>\n </div>\n\n {/* Roster variables */}\n {roster.variables.slice().sort((a, b) => a.order - b.order).map((v) => (\n <VarRow key={v.code} variable={v} pageCode={pageCode} rosterCode={roster.code} />\n ))}\n\n {/* Add variable to roster */}\n <div style={{ padding: '4px 10px', borderTop: '1px solid #fde68a' }}>\n <button onClick={handleAddVarToRoster}\n style={{\n padding: '2px 8px', borderRadius: '3px', border: '1px dashed #d4a843',\n backgroundColor: 'transparent', color: '#92400e', fontSize: '10px',\n cursor: 'pointer',\n }}>\n {labels.canvas.addFieldToRoster}\n </button>\n </div>\n </div>\n )\n}\n"]}
|