@msbci/form-editor 1.3.6 → 1.3.8
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 +11 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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/dialogs/DataSourceConfigManager.tsx","../src/components/properties/LocalizedInput.tsx","../src/components/properties/OptionsEditor.tsx","../src/components/dialogs/VariableTemplateManager.tsx","../src/components/dialogs/ScopeManagerDialog.tsx","../src/components/toolbar/EditorToolbar.tsx","../src/components/toolbox/Toolbox.tsx","../src/components/canvas/Canvas.tsx","../src/components/DndManager.tsx","../src/components/properties/FormProperties.tsx","../src/components/properties/PageProperties.tsx","../src/components/properties/ConditionBuilder.tsx","../src/components/properties/ConditionsModal.tsx","../src/components/properties/DataSourceSelector.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","v","isPageVariable","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","scopes","configs","adapter","formId","serializeForm","json","deserializeForm","frLabels","fields","rosters","vars","typeLabel","pages","variables","options","lang","count","rules","scopeName","scopeCode","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","emptyDraft","configToDraft","c","defaultLang","resolveLabel","param","varCode","draftToPayload","draft","headersOverride","dependencies","DataSourceConfigManager","availableDataSources","availableScopes","setAvailableDataSources","DEFAULT_LANG_CONFIG","scopeIds","activeScopeId","setActiveScopeId","setDraft","isAdding","setIsAdding","busy","setBusy","scopesByCode","useMemo","map","filtered","handleStartAdd","handleStartEdit","config","handleCancelEdit","refreshList","mutate","handleSave","targetScopeId","payload","updated","list","created","handleDelete","emptyStateStyle","labelStyle","selectStyle","iconButtonStyle","FieldRow","inputStyle","h","_","i","smallButtonStyle","d","label","style","flattenLocalized","keepLang","fallbackLang","exact","fb","inputBase","tabBase","valueFor","LocalizedInput","onChange","availableLangs","placeholder","multiline","testIdPrefix","disabled","langs","isMulti","activeLang","setActiveLang","handleChange","isActive","LocalizedField","langConfig","slugifyValue","asString","pickLabelString","OptionsEditor","updateOption","opt","handleLabelChange","nextLabel","currentValue","prevPrimary","nextPrimary","handleValueChange","addOption","removeOption","labelBlock","valueInputBase","okBorder","errorBorder","primary","valueStr","labelInvalid","valueInvalid","VARIABLE_TYPES","TYPES_WITH_OPTIONS","TYPES_WITH_DATASOURCE","jsonToString","parseJsonSafe","raw","trimmed","templateToDraft","VariableTemplateManager","scopeId","setTemplates","formError","setFormError","advancedOpen","setAdvancedOpen","useEffect","cancelled","dataSourceOptions","resetForm","useCallback","startAdd","buildPayload","trimmedExpression","trimmedDataSourceId","vr","cd","st","_code","_name","err","message","displayName","errorStyle","vt","checkboxLabelStyle","AdvancedJsonField","testId","error","ScopeManagerDialog","setAvailableScopes","deleteErrors","setDeleteErrors","openTemplatesFor","setOpenTemplatesFor","refresh","scope","cancelEdit","nextName","prev","handleManageVariables","Fragment","EditorToolbar","onSave","onExport","onImport","updateFormMeta","setView","isDirty","isSaving","canUndo","canRedo","undo","redo","save","addPage","select","showFormTypesDialog","setShowFormTypesDialog","showDataSourcesDialog","setShowDataSourcesDialog","showScopesDialog","setShowScopesDialog","handleAddPage","nextOrder","viewButtons","ToolbarButton","btn","onClick","title","Toolbox","tab","setTab","search","setSearch","availableTemplates","filteredGroups","group","ToolboxTabs","ToolboxItem","VariablesDndTab","baseTab","activeTab","data","attributes","listeners","setNodeRef","isDragging","useDraggable","emptyState","text","needle","matches","codeMatch","nameMatch","resolveLocalized","ToolboxTemplateItem","useCanvasResolve","Canvas","handleEmptyClick","pageSortIds","SortableContext","verticalListSortingStrategy","CanvasPage","resolveCanvas","isSelected","transition","isOver","useSortable","variableCount","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","SUPPORTED_LANGS","FormProperties","totalVariables","sum","rs","r","PropertyField","ScopesSelector","ids","LangConfigSection","containerStyle","selectedScopes","remaining","addScope","removeAt","move","delta","picked","ghostBtn","selectStyleScopes","setForm","confirmRemoveLang","setConfirmRemoveLang","sectionLabel","applyLangConfig","addLang","requestRemoveLang","performRemoveLang","nextLangs","l","nextDefault","nextForm","stripLangFromForm","nextLangConfig","cancelRemove","isEnabled","isDefault","isOnlyOne","removeLang","flattenToPlain","copy","transformOption","transformValidation","rule","transformCondition","transformVariable","transformRoster","transformRepeatConfig","cfg","transformItem","transformPage","readOnly","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","g","action","expr","groupToExpression","handleActionChange","handleAddRule","newRule","newGroup","handleRemoveRule","ruleId","handleRuleChange","handleLogicChange","logic","actionLabel","pillStyle","o","validation","RosterConditionEngine","ConditionErrorMessageEditor","operatorToSymbol","op","parts","varRef","sym","val","joined","expression","ConditionsModal","onApply","dialogRef","useRef","previouslyFocused","mode","setMode","handleKey","focusables","el","first","last","handleApply","ModeButton","ManualEditorList","FormulasSummary","update","looksComplex","HighlightedTextarea","SYNTAX_COLORS","FUNCS","tokenize","tokens","end","ident","two","textareaRef","mirrorRef","handleScroll","sharedStyle","empty","DataSourceSelector","dataSourceId","availableConnectors","onConnectorChange","onDependenciesChange","newDepKey","setNewDepKey","entries","selectedConnector","depEntries","handleAddDependency","handleRemoveDependency","handleDepVarChange","OVERRIDE_FIELDS","variableToOverrideKey","field","VariableProperties","updateVariable","setVariableOverride","resetVariableOverride","conditionsModalOpen","setConditionsModalOpen","variableTypes","isLinked","instanceUpdates","hasInstance","k","overrideKey","isOverridden","handleReset","n","allVariables","LinkedTemplateBanner","ReadOnlyLocalizedField","FieldWithReset","FileConfigSection","ImageConfigSection","CheckboxProperty","deps","templateCodeLabel","templateNameLabel","bannerTitle","onReset","resetLabel","inline","button","checked","FILE_MAX_OPTIONS","FILE_MIN_OPTIONS","maxSelectValue","cleaned","uploadSectionStyle","uploadSectionTitleStyle","uploadFieldLabelStyle","uploadInputStyle","RosterProperties","updateRoster","rosterTypeOptions","PropertiesPanel","content","FormEditor","theme","dataSources","initialForm","PreviewComponent","ToolboxComponent","CanvasComponent","Wrapper","setAdapter","load","setAvailableTemplates","resolvedLabels","scopeIdsKey","batches","seen","merged","batch","tpl","loadDs","onChangeRef","isInitialRef","ActualToolbox","ActualCanvas","wrapperWarnedRef","OuterWrapper","React","ToolboxSimple","addRoster","addVariableFromTemplate","GROUPS","handleAddTemplate","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 availableScopes: [],\n availableDataSources: [],\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 setAvailableScopes: (scopes) => {\n set({ availableScopes: scopes })\n },\n\n setAvailableDataSources: (configs) => {\n set({ availableDataSources: configs })\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 formProperties: 'Propriétés du formulaire',\n types: 'Types',\n manageFormTypesTitle: 'Gérer les types de formulaire',\n dataSources: 'Sources',\n manageDataSourcesTitle: 'Gérer les sources de données',\n scopes: 'Scopes',\n manageScopesTitle: 'Gérer les scopes et les variables du référentiel',\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 fileConfig: 'Configuration fichier',\n fileConfigMax: 'Nombre max de fichiers',\n fileConfigMin: 'Nombre min obligatoire',\n fileConfigAccept: 'Types acceptés',\n fileConfigAcceptPlaceholder: '.pdf,.doc,.xlsx',\n fileConfigUnlimited: 'Illimité',\n imageConfig: 'Configuration image',\n imageConfigMax: 'Nombre max d’images',\n imageConfigMin: 'Nombre min obligatoire',\n imageConfigCamera: 'Autoriser la caméra',\n scopes: 'Scopes (référentiel de variables)',\n scopesHint: 'L’ordre définit la priorité : le premier scope gagne en cas de conflit sur un code.',\n noScopesAvailable: 'Aucun scope disponible — configurez-en un via l’API ou le seed.',\n moveScopeUp: 'Monter',\n moveScopeDown: 'Descendre',\n removeScope: 'Retirer',\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 modalTitle: (count) => `Conditions (${count})`,\n configureButton: (count) =>\n count === 0\n ? 'Configurer les conditions'\n : `Configurer les conditions (${count})`,\n applyButton: 'Appliquer',\n cancelButton: 'Annuler',\n closeButton: 'Fermer',\n formulasSummary: 'Formules configurées',\n noConditions: 'Aucune condition configurée',\n modeVisual: 'Constructeur visuel',\n modeManual: 'Saisie manuelle',\n manualWarning:\n 'Expression complexe — le constructeur visuel ne peut pas la représenter. Restez en mode manuel pour la modifier.',\n manualPlaceholder: 'Ex : show(${AGE} >= 18)',\n manualHelp:\n 'Fonctions : show / hide / setValue / validate / require / readonly / ConditionEval. Variables : ${CODE}.',\n validationExpression: 'Expression de validation',\n validationExpressionPlaceholder: 'Ex : ${CHAMP} != \"\"',\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 scopeManager: {\n dialogAriaLabel: 'Gestion des scopes',\n title: 'Gestion des scopes',\n closeAriaLabel: 'Fermer',\n addScope: '+ Ajouter un scope',\n newScopeName: 'Nom du scope',\n newScopeCodePlaceholder: 'CODE (auto)',\n manageVariables: 'Gérer les variables →',\n confirmDelete: 'Ce scope contient des éléments. Confirmer la suppression ?',\n deleteConfirm: 'Supprimer',\n deleteCancel: 'Annuler',\n noScopes: 'Aucun scope défini. Ajoutez-en un ci-dessous.',\n saveButton: 'Enregistrer',\n cancelButton: 'Annuler',\n deleteError: 'Impossible de supprimer le scope',\n editScopeAria: (code) => `Modifier le scope ${code}`,\n removeScopeAria: (code) => `Supprimer le scope ${code}`,\n manageVariablesAria: (code) => `Gérer les variables du scope ${code}`,\n },\n\n variableTemplateManager: {\n dialogAriaLabel: 'Variables du référentiel',\n title: (scopeName) => `Variables — ${scopeName}`,\n closeAriaLabel: 'Fermer',\n addTemplate: '+ Ajouter une variable',\n code: 'Code',\n name: 'Nom',\n type: 'Type',\n description: 'Description',\n placeholder: 'Texte d’aide',\n required: 'Obligatoire',\n readonly: 'Lecture seule',\n hidden: 'Masquée',\n options: 'Options',\n expression: 'Expression',\n dataSourceId: 'Source de données',\n advancedSection: 'Avancé',\n validationRules: 'Règles de validation',\n conditions: 'Conditions',\n style: 'Style',\n confirmDelete: 'Supprimer cette variable du référentiel ?',\n deleteConfirm: 'Supprimer',\n deleteCancel: 'Annuler',\n noTemplates: 'Aucune variable dans ce scope.',\n saveButton: 'Enregistrer',\n cancelButton: 'Annuler',\n duplicateCodeError: 'Ce code existe déjà dans ce scope.',\n readonlyCode: 'Code (immuable)',\n readonlyName: 'Nom (immuable)',\n editTemplateAria: (code) => `Modifier la variable ${code}`,\n removeTemplateAria: (code) => `Supprimer la variable ${code}`,\n backToScopes: '← Retour aux scopes',\n },\n\n dataSourceManager: {\n dialogAriaLabel: 'Sources de données',\n title: 'Sources de données',\n closeAriaLabel: 'Fermer',\n addButton: '+ Ajouter une source',\n noSources: 'Aucune source dans ce scope. Ajoutez-en une ci-dessous.',\n noScope: 'Le formulaire n’a aucun scope — ajoutez-en un dans les propriétés du formulaire.',\n scopeFilterLabel: 'Scope',\n fieldCode: 'Code',\n fieldName: 'Nom',\n fieldUrl: 'URL',\n fieldMethod: 'Méthode',\n fieldQueryParam: 'Paramètre de recherche',\n fieldValueField: 'Champ valeur',\n fieldLabelField: 'Champ libellé',\n fieldHeaders: 'Headers (chiffrés)',\n headerKeyPlaceholder: 'Clé (ex : Authorization)',\n headerValuePlaceholder: 'Valeur',\n addHeader: '+ Ajouter un header',\n fieldDependencies: 'Dépendances',\n dependencyParamPlaceholder: 'Paramètre URL',\n dependencyVarPlaceholder: 'Code variable',\n addDependency: '+ Ajouter une dépendance',\n save: 'Enregistrer',\n cancel: 'Annuler',\n editAria: (code) => `Modifier la source ${code}`,\n deleteAria: (code) => `Supprimer la source ${code}`,\n scopeBadge: (scopeCode) => `Scope : ${scopeCode}`,\n confirmDelete: (code) => `Supprimer la source \"${code}\" ?`,\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 formProperties: 'Form properties',\n types: 'Types',\n manageFormTypesTitle: 'Manage form types',\n dataSources: 'Sources',\n manageDataSourcesTitle: 'Manage data sources',\n scopes: 'Scopes',\n manageScopesTitle: 'Manage scopes and library variables',\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 fileConfig: 'File configuration',\n fileConfigMax: 'Max number of files',\n fileConfigMin: 'Min number required',\n fileConfigAccept: 'Accepted types',\n fileConfigAcceptPlaceholder: '.pdf,.doc,.xlsx',\n fileConfigUnlimited: 'Unlimited',\n imageConfig: 'Image configuration',\n imageConfigMax: 'Max number of images',\n imageConfigMin: 'Min number required',\n imageConfigCamera: 'Allow camera',\n scopes: 'Scopes (variable library)',\n scopesHint: 'Order defines priority: the first scope wins on code conflicts.',\n noScopesAvailable: 'No scope available — create one via the API or seed.',\n moveScopeUp: 'Move up',\n moveScopeDown: 'Move down',\n removeScope: 'Remove',\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 modalTitle: (count) => `Conditions (${count})`,\n configureButton: (count) =>\n count === 0 ? 'Configure conditions' : `Configure conditions (${count})`,\n applyButton: 'Apply',\n cancelButton: 'Cancel',\n closeButton: 'Close',\n formulasSummary: 'Configured formulas',\n noConditions: 'No condition configured',\n modeVisual: 'Visual builder',\n modeManual: 'Manual input',\n manualWarning:\n 'Complex expression — the visual builder cannot represent it. Stay in manual mode to edit it.',\n manualPlaceholder: 'e.g. show(${AGE} >= 18)',\n manualHelp:\n 'Functions: show / hide / setValue / validate / require / readonly / ConditionEval. Variables: ${CODE}.',\n validationExpression: 'Validation expression',\n validationExpressionPlaceholder: 'e.g. ${FIELD} != \"\"',\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 scopeManager: {\n dialogAriaLabel: 'Scope management',\n title: 'Scope management',\n closeAriaLabel: 'Close',\n addScope: '+ Add a scope',\n newScopeName: 'Scope name',\n newScopeCodePlaceholder: 'CODE (auto)',\n manageVariables: 'Manage variables →',\n confirmDelete: 'This scope is in use. Confirm deletion?',\n deleteConfirm: 'Delete',\n deleteCancel: 'Cancel',\n noScopes: 'No scope defined yet. Add one below.',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteError: 'Cannot delete scope',\n editScopeAria: (code) => `Edit scope ${code}`,\n removeScopeAria: (code) => `Delete scope ${code}`,\n manageVariablesAria: (code) => `Manage variables in scope ${code}`,\n },\n\n variableTemplateManager: {\n dialogAriaLabel: 'Library variables',\n title: (scopeName) => `Variables — ${scopeName}`,\n closeAriaLabel: 'Close',\n addTemplate: '+ Add variable',\n code: 'Code',\n name: 'Name',\n type: 'Type',\n description: 'Description',\n placeholder: 'Help text',\n required: 'Required',\n readonly: 'Read-only',\n hidden: 'Hidden',\n options: 'Options',\n expression: 'Expression',\n dataSourceId: 'Data source',\n advancedSection: 'Advanced',\n validationRules: 'Validation rules',\n conditions: 'Conditions',\n style: 'Style',\n confirmDelete: 'Delete this library variable?',\n deleteConfirm: 'Delete',\n deleteCancel: 'Cancel',\n noTemplates: 'No variable in this scope.',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n duplicateCodeError: 'This code already exists in the scope.',\n readonlyCode: 'Code (immutable)',\n readonlyName: 'Name (immutable)',\n editTemplateAria: (code) => `Edit variable ${code}`,\n removeTemplateAria: (code) => `Delete variable ${code}`,\n backToScopes: '← Back to scopes',\n },\n\n dataSourceManager: {\n dialogAriaLabel: 'Data sources',\n title: 'Data sources',\n closeAriaLabel: 'Close',\n addButton: '+ Add a source',\n noSources: 'No source in this scope yet. Add one below.',\n noScope: 'This form has no scope — link one in the form properties.',\n scopeFilterLabel: 'Scope',\n fieldCode: 'Code',\n fieldName: 'Name',\n fieldUrl: 'URL',\n fieldMethod: 'Method',\n fieldQueryParam: 'Search param',\n fieldValueField: 'Value field',\n fieldLabelField: 'Label field',\n fieldHeaders: 'Headers (encrypted)',\n headerKeyPlaceholder: 'Key (e.g. Authorization)',\n headerValuePlaceholder: 'Value',\n addHeader: '+ Add header',\n fieldDependencies: 'Dependencies',\n dependencyParamPlaceholder: 'URL param',\n dependencyVarPlaceholder: 'Variable code',\n addDependency: '+ Add dependency',\n save: 'Save',\n cancel: 'Cancel',\n editAria: (code) => `Edit source ${code}`,\n deleteAria: (code) => `Delete source ${code}`,\n scopeBadge: (scopeCode) => `Scope: ${scopeCode}`,\n confirmDelete: (code) => `Delete source \"${code}\"?`,\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 * DataSourceConfigManager — admin CRUD for IDataSourceConfig within\n * the scope(s) linked to the current form.\n *\n * Renders a native React modal (same pattern as FormTypesDialog) with:\n * - A scope filter (visible only when the form has more than one scope)\n * - The list of `availableDataSources` filtered by selected scope\n * - An inline add/edit form for code, name, url, method, queryParam,\n * value/label fields, headers (key/value rows), and dependencies\n * (urlParam → variable code rows)\n *\n * Persistence goes through the adapter's CRUD methods; the store is\n * refreshed by mutating `availableDataSources` locally (optimistic — the\n * server is the source of truth). FormEditor's effect will re-load on\n * the next scope change.\n */\n\nimport { useMemo, useState } from 'react'\nimport type { IDataSourceConfig, LocalizedString } from '@msbci/form-core'\nimport { resolveLabel, DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\n\nexport interface DataSourceConfigManagerProps {\n open: boolean\n onClose: () => void\n}\n\ninterface DraftEntry {\n code: string\n name: string\n url: string\n method: 'GET' | 'POST'\n queryParam: string\n valueField: string\n labelField: string\n headers: Array<{ key: string; value: string }>\n dependencies: Array<{ param: string; varCode: string }>\n}\n\nfunction emptyDraft(): DraftEntry {\n return {\n code: '',\n name: '',\n url: '',\n method: 'GET',\n queryParam: 'q',\n valueField: '',\n labelField: '',\n headers: [],\n dependencies: [],\n }\n}\n\nfunction configToDraft(c: IDataSourceConfig, defaultLang: string): DraftEntry {\n return {\n code: c.code,\n name: typeof c.name === 'string' ? c.name : resolveLabel(c.name, defaultLang, defaultLang),\n url: c.url,\n method: c.method,\n queryParam: c.queryParam ?? 'q',\n valueField: c.valueField,\n labelField: c.labelField,\n headers: Object.entries(c.headersOverride ?? {}).map(([key, value]) => ({ key, value })),\n dependencies: Object.entries(c.dependencies ?? {}).map(([param, varCode]) => ({ param, varCode })),\n }\n}\n\nfunction draftToPayload(draft: DraftEntry): {\n code: string\n name: LocalizedString\n url: string\n method: 'GET' | 'POST'\n queryParam: string\n valueField: string\n labelField: string\n headersOverride?: Record<string, string>\n dependencies?: Record<string, string>\n} {\n const headersOverride: Record<string, string> = {}\n for (const { key, value } of draft.headers) {\n if (key.trim()) headersOverride[key.trim()] = value\n }\n const dependencies: Record<string, string> = {}\n for (const { param, varCode } of draft.dependencies) {\n if (param.trim() && varCode.trim()) dependencies[param.trim()] = varCode.trim()\n }\n return {\n code: draft.code.trim(),\n name: draft.name,\n url: draft.url.trim(),\n method: draft.method,\n queryParam: draft.queryParam.trim() || 'q',\n valueField: draft.valueField.trim(),\n labelField: draft.labelField.trim(),\n ...(Object.keys(headersOverride).length > 0 ? { headersOverride } : {}),\n ...(Object.keys(dependencies).length > 0 ? { dependencies } : {}),\n }\n}\n\nexport function DataSourceConfigManager({ open, onClose }: DataSourceConfigManagerProps) {\n const labels = useLabels()\n const { form, availableDataSources, availableScopes, adapter, setAvailableDataSources } =\n useEditorStore()\n\n const defaultLang =\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n const scopeIds = form.scopeIds ?? []\n const [activeScopeId, setActiveScopeId] = useState<string | undefined>(scopeIds[0])\n const [editingId, setEditingId] = useState<string | null>(null)\n const [draft, setDraft] = useState<DraftEntry>(emptyDraft())\n const [isAdding, setIsAdding] = useState(false)\n const [busy, setBusy] = useState(false)\n\n const scopesByCode = useMemo(() => {\n const map = new Map<string, string>() // scopeId → code (for badge display)\n for (const s of availableScopes) map.set(s.id, s.code)\n return map\n }, [availableScopes])\n\n const filtered = useMemo(() => {\n if (!activeScopeId) return availableDataSources\n return availableDataSources.filter((c) => c.scopeId === activeScopeId)\n }, [availableDataSources, activeScopeId])\n\n if (!open) return null\n\n const handleStartAdd = () => {\n setIsAdding(true)\n setEditingId(null)\n setDraft(emptyDraft())\n }\n\n const handleStartEdit = (config: IDataSourceConfig) => {\n setIsAdding(false)\n setEditingId(config.id)\n setDraft(configToDraft(config, defaultLang))\n // Switch the filter to the source's scope so the user keeps context.\n if (config.scopeId !== activeScopeId) setActiveScopeId(config.scopeId)\n }\n\n const handleCancelEdit = () => {\n setEditingId(null)\n setIsAdding(false)\n setDraft(emptyDraft())\n }\n\n const refreshList = (mutate: (list: IDataSourceConfig[]) => IDataSourceConfig[]) => {\n setAvailableDataSources(mutate(availableDataSources))\n }\n\n const handleSave = async () => {\n if (!adapter) return\n const targetScopeId = activeScopeId ?? scopeIds[0]\n if (!targetScopeId) return\n\n setBusy(true)\n try {\n const payload = draftToPayload(draft)\n if (editingId && adapter.updateDataSource) {\n const updated = await adapter.updateDataSource(editingId, payload)\n refreshList((list) => list.map((c) => (c.id === editingId ? updated : c)))\n } else if (!editingId && adapter.createDataSource) {\n const created = await adapter.createDataSource(targetScopeId, payload)\n refreshList((list) => [...list, created])\n }\n handleCancelEdit()\n } finally {\n setBusy(false)\n }\n }\n\n const handleDelete = async (config: IDataSourceConfig) => {\n if (!adapter?.deleteDataSource) return\n if (typeof window !== 'undefined' && !window.confirm(labels.dataSourceManager.confirmDelete(config.code))) {\n return\n }\n setBusy(true)\n try {\n await adapter.deleteDataSource(config.id)\n refreshList((list) => list.filter((c) => c.id !== config.id))\n if (editingId === config.id) handleCancelEdit()\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.dataSourceManager.dialogAriaLabel}\n data-testid=\"datasource-manager-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: '40rem',\n width: '100%',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '14px 16px',\n borderBottom: '1px solid #e2e8f0',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2 style={{ margin: 0, fontSize: '16px', fontWeight: 600, color: '#0f172a' }}>\n {labels.dataSourceManager.title}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.dataSourceManager.closeAriaLabel}\n style={{\n border: 'none',\n background: 'transparent',\n fontSize: '20px',\n cursor: 'pointer',\n color: '#64748b',\n }}\n >\n ✕\n </button>\n </div>\n\n {/* Body */}\n <div style={{ flex: 1, overflowY: 'auto', padding: '12px 16px' }}>\n {scopeIds.length === 0 && (\n <div data-testid=\"datasource-manager-no-scope\" style={emptyStateStyle}>\n {labels.dataSourceManager.noScope}\n </div>\n )}\n\n {scopeIds.length > 1 && (\n <div style={{ marginBottom: '12px' }}>\n <label style={labelStyle}>{labels.dataSourceManager.scopeFilterLabel}</label>\n <select\n data-testid=\"datasource-manager-scope-filter\"\n value={activeScopeId ?? ''}\n onChange={(e) => setActiveScopeId(e.target.value || undefined)}\n style={selectStyle}\n >\n {scopeIds.map((id) => (\n <option key={id} value={id}>\n {scopesByCode.get(id) ?? id}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {scopeIds.length > 0 && filtered.length === 0 && !isAdding && (\n <div data-testid=\"datasource-manager-empty\" style={emptyStateStyle}>\n {labels.dataSourceManager.noSources}\n </div>\n )}\n\n {/* List */}\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {filtered.map((config) => (\n <li\n key={config.id}\n data-testid={`datasource-item-${config.code}`}\n style={{\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n padding: '8px 10px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n backgroundColor: editingId === config.id ? '#f0fdf4' : '#fff',\n }}\n >\n <span style={{ fontSize: '13px', fontWeight: 600, color: '#0f172a' }}>{config.code}</span>\n <span style={{ fontSize: '11px', color: '#64748b' }}>{config.method}</span>\n <span style={{ flex: 1, fontSize: '11px', color: '#475569', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {config.url}\n </span>\n {scopesByCode.has(config.scopeId) && (\n <span style={{ fontSize: '10px', color: '#0891b2', backgroundColor: '#ecfeff', padding: '2px 6px', borderRadius: '4px' }}>\n {labels.dataSourceManager.scopeBadge(scopesByCode.get(config.scopeId)!)}\n </span>\n )}\n <button\n type=\"button\"\n data-testid={`datasource-edit-${config.code}`}\n aria-label={labels.dataSourceManager.editAria(config.code)}\n onClick={() => handleStartEdit(config)}\n disabled={busy}\n style={iconButtonStyle}\n >\n ✏\n </button>\n <button\n type=\"button\"\n data-testid={`datasource-delete-${config.code}`}\n aria-label={labels.dataSourceManager.deleteAria(config.code)}\n onClick={() => handleDelete(config)}\n disabled={busy}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n </li>\n ))}\n </ul>\n\n {/* Add CTA */}\n {scopeIds.length > 0 && !isAdding && !editingId && (\n <button\n type=\"button\"\n data-testid=\"datasource-add-button\"\n onClick={handleStartAdd}\n style={{\n marginTop: '12px',\n padding: '6px 12px',\n border: '1px solid #2563eb',\n borderRadius: '6px',\n color: '#2563eb',\n backgroundColor: '#fff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.dataSourceManager.addButton}\n </button>\n )}\n\n {/* Inline form */}\n {(isAdding || editingId) && (\n <form\n data-testid=\"datasource-form\"\n onSubmit={(e) => {\n e.preventDefault()\n void handleSave()\n }}\n style={{\n marginTop: '12px',\n padding: '12px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#f8fafc',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <FieldRow label={labels.dataSourceManager.fieldCode}>\n <input\n required\n data-testid=\"datasource-form-code\"\n value={draft.code}\n onChange={(e) => setDraft({ ...draft, code: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldName}>\n <input\n data-testid=\"datasource-form-name\"\n value={draft.name}\n onChange={(e) => setDraft({ ...draft, name: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldUrl}>\n <input\n required\n type=\"url\"\n data-testid=\"datasource-form-url\"\n value={draft.url}\n onChange={(e) => setDraft({ ...draft, url: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <div style={{ display: 'flex', gap: '8px' }}>\n <FieldRow label={labels.dataSourceManager.fieldMethod} style={{ flex: 1 }}>\n <select\n data-testid=\"datasource-form-method\"\n value={draft.method}\n onChange={(e) => setDraft({ ...draft, method: e.target.value as 'GET' | 'POST' })}\n style={selectStyle}\n >\n <option value=\"GET\">GET</option>\n <option value=\"POST\">POST</option>\n </select>\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldQueryParam} style={{ flex: 1 }}>\n <input\n data-testid=\"datasource-form-queryparam\"\n value={draft.queryParam}\n onChange={(e) => setDraft({ ...draft, queryParam: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <FieldRow label={labels.dataSourceManager.fieldValueField} style={{ flex: 1 }}>\n <input\n required\n data-testid=\"datasource-form-valuefield\"\n value={draft.valueField}\n onChange={(e) => setDraft({ ...draft, valueField: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldLabelField} style={{ flex: 1 }}>\n <input\n required\n data-testid=\"datasource-form-labelfield\"\n value={draft.labelField}\n onChange={(e) => setDraft({ ...draft, labelField: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n </div>\n\n {/* Headers */}\n <div>\n <label style={labelStyle}>{labels.dataSourceManager.fieldHeaders}</label>\n {draft.headers.map((h, idx) => (\n <div key={idx} style={{ display: 'flex', gap: '4px', marginBottom: '4px' }}>\n <input\n placeholder={labels.dataSourceManager.headerKeyPlaceholder}\n value={h.key}\n onChange={(e) => {\n const next = [...draft.headers]\n next[idx] = { ...next[idx]!, key: e.target.value }\n setDraft({ ...draft, headers: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <input\n type=\"password\"\n placeholder={labels.dataSourceManager.headerValuePlaceholder}\n value={h.value}\n onChange={(e) => {\n const next = [...draft.headers]\n next[idx] = { ...next[idx]!, value: e.target.value }\n setDraft({ ...draft, headers: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <button\n type=\"button\"\n onClick={() => setDraft({ ...draft, headers: draft.headers.filter((_, i) => i !== idx) })}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n data-testid=\"datasource-form-add-header\"\n onClick={() => setDraft({ ...draft, headers: [...draft.headers, { key: '', value: '' }] })}\n style={smallButtonStyle}\n >\n {labels.dataSourceManager.addHeader}\n </button>\n </div>\n\n {/* Dependencies */}\n <div>\n <label style={labelStyle}>{labels.dataSourceManager.fieldDependencies}</label>\n {draft.dependencies.map((d, idx) => (\n <div key={idx} style={{ display: 'flex', gap: '4px', marginBottom: '4px' }}>\n <input\n placeholder={labels.dataSourceManager.dependencyParamPlaceholder}\n value={d.param}\n onChange={(e) => {\n const next = [...draft.dependencies]\n next[idx] = { ...next[idx]!, param: e.target.value }\n setDraft({ ...draft, dependencies: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <span style={{ alignSelf: 'center', color: '#94a3b8' }}>→</span>\n <input\n placeholder={labels.dataSourceManager.dependencyVarPlaceholder}\n value={d.varCode}\n onChange={(e) => {\n const next = [...draft.dependencies]\n next[idx] = { ...next[idx]!, varCode: e.target.value }\n setDraft({ ...draft, dependencies: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <button\n type=\"button\"\n onClick={() => setDraft({ ...draft, dependencies: draft.dependencies.filter((_, i) => i !== idx) })}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n data-testid=\"datasource-form-add-dependency\"\n onClick={() => setDraft({ ...draft, dependencies: [...draft.dependencies, { param: '', varCode: '' }] })}\n style={smallButtonStyle}\n >\n {labels.dataSourceManager.addDependency}\n </button>\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"datasource-form-cancel\"\n onClick={handleCancelEdit}\n disabled={busy}\n style={smallButtonStyle}\n >\n {labels.dataSourceManager.cancel}\n </button>\n <button\n type=\"submit\"\n data-testid=\"datasource-form-save\"\n disabled={busy}\n style={{ ...smallButtonStyle, backgroundColor: '#2563eb', color: '#fff', border: 'none' }}\n >\n {labels.dataSourceManager.save}\n </button>\n </div>\n </form>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction FieldRow({\n label,\n children,\n style,\n}: {\n label: string\n children: React.ReactNode\n style?: React.CSSProperties\n}) {\n return (\n <div style={style}>\n <label style={labelStyle}>{label}</label>\n {children}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n display: 'block',\n fontSize: '11px',\n fontWeight: 500,\n color: '#475569',\n marginBottom: '2px',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n padding: '4px 6px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#0f172a',\n outline: 'none',\n backgroundColor: '#fff',\n}\n\nconst selectStyle: React.CSSProperties = {\n ...inputStyle,\n}\n\nconst iconButtonStyle: React.CSSProperties = {\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#64748b',\n padding: '2px 4px',\n}\n\nconst smallButtonStyle: React.CSSProperties = {\n padding: '4px 10px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#334155',\n backgroundColor: '#fff',\n cursor: 'pointer',\n}\n\nconst emptyStateStyle: React.CSSProperties = {\n fontSize: '12px',\n color: '#94a3b8',\n textAlign: 'center',\n padding: '16px 0',\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","/**\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","/**\n * VariableTemplateManager — admin CRUD for {@link IVariableTemplate}\n * entries within a single scope.\n *\n * Flow:\n * 1. Mount: re-fetch `adapter.loadTemplates(scopeId)` to get an\n * authoritative list (the store may only carry templates of scopes\n * attached to the current form).\n * 2. CRUD via adapter; optimistic updates on the local list, no refetch.\n *\n * Identity:\n * - `code` and `name` are immutable after creation (server enforces).\n * The edit form shows them disabled, with a \"(immuable)\" badge.\n *\n * Conditional fields:\n * - `options` editor surfaces only for select/multiselect/radio/checkbox/listradio.\n * - `expression` only for `calculated`.\n * - `dataSourceId` only for select/multiselect.\n *\n * Advanced section (collapsed by default): validationRules, conditions, style.\n * These are surfaced as JSON textareas so admins can paste configurations\n * already produced by the visual condition builder if needed.\n */\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n DEFAULT_LANG_CONFIG,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IVariableOption,\n IVariableTemplate,\n LocalizedString,\n VariableType,\n} from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { LocalizedField } from '../properties/LocalizedInput'\nimport { OptionsEditor } from '../properties/OptionsEditor'\n\nexport interface VariableTemplateManagerProps {\n open: boolean\n onClose: () => void\n scopeId: string\n scopeName: string\n}\n\nconst VARIABLE_TYPES: VariableType[] = [\n 'text', 'textarea', 'number', 'date', 'datetime', 'time',\n 'select', 'multiselect', 'checkbox', 'radio', 'listradio',\n 'file', 'image', 'photo', 'gps', 'rating',\n 'email', 'calculated', 'hidden', 'label', 'panel', 'richtext',\n]\n\nconst TYPES_WITH_OPTIONS: VariableType[] = ['select', 'multiselect', 'radio', 'checkbox', 'listradio']\nconst TYPES_WITH_DATASOURCE: VariableType[] = ['select', 'multiselect']\n\ninterface DraftEntry {\n code: string\n name: LocalizedString\n variableType: VariableType\n description: LocalizedString | undefined\n placeholder: LocalizedString | undefined\n isRequired: boolean\n isReadonly: boolean\n isHidden: boolean\n options: IVariableOption[]\n expression: string\n dataSourceId: string\n validationRulesJson: string\n conditionsJson: string\n styleJson: string\n}\n\nfunction emptyDraft(): DraftEntry {\n return {\n code: '',\n name: '',\n variableType: 'text',\n description: undefined,\n placeholder: undefined,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n options: [],\n expression: '',\n dataSourceId: '',\n validationRulesJson: '',\n conditionsJson: '',\n styleJson: '',\n }\n}\n\nfunction jsonToString(value: unknown): string {\n if (value === undefined || value === null) return ''\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n}\n\nfunction parseJsonSafe<T>(raw: string): { ok: boolean; value: T | undefined } {\n const trimmed = raw.trim()\n if (!trimmed) return { ok: true, value: undefined }\n try {\n return { ok: true, value: JSON.parse(trimmed) as T }\n } catch {\n return { ok: false, value: undefined }\n }\n}\n\nfunction templateToDraft(t: IVariableTemplate): DraftEntry {\n return {\n code: t.code,\n name: t.name,\n variableType: t.variableType,\n description: t.description,\n placeholder: t.placeholder,\n isRequired: t.isRequired ?? false,\n isReadonly: t.isReadonly ?? false,\n isHidden: t.isHidden ?? false,\n options: t.options ?? [],\n expression: t.expression ?? '',\n dataSourceId: t.dataSourceId ?? '',\n validationRulesJson: jsonToString(t.validationRules),\n conditionsJson: jsonToString(t.conditions),\n styleJson: jsonToString(t.style),\n }\n}\n\nexport function VariableTemplateManager({\n open,\n onClose,\n scopeId,\n scopeName,\n}: VariableTemplateManagerProps) {\n const labels = useLabels()\n const adapter = useEditorStore((s) => s.adapter)\n const availableDataSources = useEditorStore((s) => s.availableDataSources)\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n const [templates, setTemplates] = useState<IVariableTemplate[]>([])\n const [editingId, setEditingId] = useState<string | null>(null)\n const [isAdding, setIsAdding] = useState(false)\n const [draft, setDraft] = useState<DraftEntry>(emptyDraft())\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n const [formError, setFormError] = useState<string | null>(null)\n const [advancedOpen, setAdvancedOpen] = useState(false)\n\n // Authoritative load on mount + when scopeId changes (the dialog stays\n // mounted across scope switches via the parent ScopeManagerDialog).\n useEffect(() => {\n if (!open) return\n if (!adapter?.loadTemplates) {\n setTemplates([])\n return\n }\n let cancelled = false\n adapter.loadTemplates(scopeId)\n .then((list) => {\n if (!cancelled) setTemplates(list)\n })\n .catch(() => {\n if (!cancelled) setTemplates([])\n })\n return () => {\n cancelled = true\n }\n }, [open, scopeId, adapter])\n\n // Resolved data-source options for the [select, multiselect] dropdown.\n // We pull from the store's `availableDataSources`; the data source\n // manager is responsible for keeping it up to date.\n const dataSourceOptions = useMemo(() => {\n return availableDataSources.map((c) => ({\n id: c.code,\n label: typeof c.name === 'string' ? c.name : resolveLabel(c.name, defaultLang, defaultLang),\n }))\n }, [availableDataSources, defaultLang])\n\n const resetForm = useCallback(() => {\n setEditingId(null)\n setIsAdding(false)\n setDraft(emptyDraft())\n setFormError(null)\n setAdvancedOpen(false)\n }, [])\n\n if (!open) return null\n\n const startAdd = () => {\n setIsAdding(true)\n setEditingId(null)\n setDraft(emptyDraft())\n setFormError(null)\n setAdvancedOpen(false)\n }\n\n const startEdit = (t: IVariableTemplate) => {\n setIsAdding(false)\n setEditingId(t.id)\n setDraft(templateToDraft(t))\n setFormError(null)\n setAdvancedOpen(false)\n }\n\n const buildPayload = (): {\n code: string\n name: LocalizedString\n variableType: VariableType\n description?: LocalizedString\n placeholder?: LocalizedString\n isRequired?: boolean\n isReadonly?: boolean\n isHidden?: boolean\n options?: IVariableOption[]\n expression?: string\n dataSourceId?: string\n validationRules?: unknown\n conditions?: unknown\n style?: unknown\n } | { error: string } => {\n const code = draft.code.trim()\n if (!code) return { error: 'code' }\n\n const trimmedExpression = draft.expression.trim()\n const trimmedDataSourceId = draft.dataSourceId.trim()\n\n // Validate / parse JSON-only advanced fields up-front so the admin\n // sees the failure before the server roundtrip.\n const vr = parseJsonSafe<unknown[]>(draft.validationRulesJson)\n if (!vr.ok) return { error: 'validationRules' }\n const cd = parseJsonSafe<unknown[]>(draft.conditionsJson)\n if (!cd.ok) return { error: 'conditions' }\n const st = parseJsonSafe<unknown>(draft.styleJson)\n if (!st.ok) return { error: 'style' }\n\n return {\n code,\n name: draft.name,\n variableType: draft.variableType,\n description: draft.description,\n placeholder: draft.placeholder,\n isRequired: draft.isRequired,\n isReadonly: draft.isReadonly,\n isHidden: draft.isHidden,\n ...(TYPES_WITH_OPTIONS.includes(draft.variableType) ? { options: draft.options } : {}),\n ...(draft.variableType === 'calculated' && trimmedExpression ? { expression: trimmedExpression } : {}),\n ...(TYPES_WITH_DATASOURCE.includes(draft.variableType) && trimmedDataSourceId\n ? { dataSourceId: trimmedDataSourceId }\n : {}),\n ...(vr.value !== undefined ? { validationRules: vr.value } : {}),\n ...(cd.value !== undefined ? { conditions: cd.value } : {}),\n ...(st.value !== undefined ? { style: st.value } : {}),\n }\n }\n\n const handleSave = async () => {\n if (!adapter) return\n const result = buildPayload()\n if ('error' in result) {\n setFormError(result.error)\n return\n }\n setBusy(true)\n setFormError(null)\n try {\n if (editingId && adapter.updateTemplate) {\n // Strip immutable fields from the patch sent to the server.\n const { code: _code, name: _name, ...patch } = result\n void _code\n void _name\n const updated = await adapter.updateTemplate(editingId, patch as Parameters<NonNullable<typeof adapter.updateTemplate>>[1])\n setTemplates((list) => list.map((t) => (t.id === editingId ? updated : t)))\n resetForm()\n } else if (!editingId && adapter.createTemplate) {\n // Duplicate-code local guard — also enforced by the server (400).\n if (templates.some((t) => t.code === result.code)) {\n setFormError('duplicate-code')\n return\n }\n const created = await adapter.createTemplate(scopeId, result as Parameters<NonNullable<typeof adapter.createTemplate>>[1])\n setTemplates((list) => [...list, created])\n resetForm()\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n // Common 400 from the server when the code clashes.\n if (/already exists/i.test(message)) {\n setFormError('duplicate-code')\n } else {\n setFormError(message)\n }\n } finally {\n setBusy(false)\n }\n }\n\n const handleDelete = async () => {\n if (!confirmDeleteId || !adapter?.deleteTemplate) return\n const id = confirmDeleteId\n setBusy(true)\n try {\n await adapter.deleteTemplate(id)\n setTemplates((list) => list.filter((t) => t.id !== id))\n if (editingId === id) resetForm()\n setConfirmDeleteId(null)\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.variableTemplateManager.dialogAriaLabel}\n data-testid=\"template-manager-dialog\"\n onClick={onClose}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 60,\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: '44rem',\n width: '100%',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column',\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: '14px 16px',\n borderBottom: '1px solid #e2e8f0',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <button\n type=\"button\"\n onClick={onClose}\n data-testid=\"template-manager-back\"\n style={{\n padding: '4px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n background: '#fff',\n fontSize: '12px',\n cursor: 'pointer',\n color: '#334155',\n }}\n >\n {labels.variableTemplateManager.backToScopes}\n </button>\n <h3 style={{ flex: 1, fontSize: '16px', fontWeight: 600, margin: 0 }}>\n {labels.variableTemplateManager.title(scopeName)}\n </h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.variableTemplateManager.closeAriaLabel}\n data-testid=\"template-manager-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={{ flex: 1, overflowY: 'auto', padding: '12px 16px' }}>\n {templates.length === 0 && !isAdding && (\n <div data-testid=\"template-manager-empty\" style={{ fontSize: '13px', color: '#94a3b8', padding: '12px 0' }}>\n {labels.variableTemplateManager.noTemplates}\n </div>\n )}\n\n <ul style={{ listStyle: 'none', padding: 0, margin: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {templates.map((t) => {\n const displayName = typeof t.name === 'string'\n ? t.name\n : resolveLabel(t.name, defaultLang, defaultLang)\n const awaitingConfirm = confirmDeleteId === t.id\n return (\n <li\n key={t.id}\n data-testid={`template-row-${t.code}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n backgroundColor: editingId === t.id ? '#f0fdf4' : '#fff',\n flexWrap: 'wrap',\n }}\n >\n <span style={{ fontSize: '13px', fontWeight: 600, color: '#0f172a' }}>{t.code}</span>\n <span style={{ fontSize: '12px', color: '#475569', flex: 1 }}>{displayName}</span>\n <span style={{ fontSize: '11px', color: '#64748b', fontFamily: 'monospace' }}>{t.variableType}</span>\n <button\n type=\"button\"\n data-testid={`template-edit-${t.code}`}\n aria-label={labels.variableTemplateManager.editTemplateAria(t.code)}\n onClick={() => startEdit(t)}\n disabled={busy}\n style={iconButtonStyle}\n >\n ✏\n </button>\n <button\n type=\"button\"\n data-testid={`template-remove-${t.code}`}\n aria-label={labels.variableTemplateManager.removeTemplateAria(t.code)}\n onClick={() => setConfirmDeleteId(t.id)}\n disabled={busy}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n\n {awaitingConfirm && (\n <div\n data-testid={`template-confirm-${t.code}`}\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 }}>{labels.variableTemplateManager.confirmDelete}</span>\n <button\n type=\"button\"\n data-testid={`template-confirm-yes-${t.code}`}\n onClick={handleDelete}\n disabled={busy}\n style={{ ...iconButtonStyle, backgroundColor: '#ef4444', color: '#fff', border: 'none', padding: '4px 8px' }}\n >\n {labels.variableTemplateManager.deleteConfirm}\n </button>\n <button\n type=\"button\"\n data-testid={`template-confirm-no-${t.code}`}\n onClick={() => setConfirmDeleteId(null)}\n disabled={busy}\n style={{ ...iconButtonStyle, padding: '4px 8px' }}\n >\n {labels.variableTemplateManager.deleteCancel}\n </button>\n </div>\n )}\n </li>\n )\n })}\n </ul>\n\n {!isAdding && !editingId && (\n <button\n type=\"button\"\n data-testid=\"template-add-button\"\n onClick={startAdd}\n disabled={busy}\n style={{\n marginTop: '12px',\n padding: '6px 12px',\n border: '1px solid #2563eb',\n borderRadius: '6px',\n color: '#2563eb',\n backgroundColor: '#fff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.variableTemplateManager.addTemplate}\n </button>\n )}\n\n {(isAdding || editingId) && (\n <form\n data-testid=\"template-form\"\n onSubmit={(e) => {\n e.preventDefault()\n void handleSave()\n }}\n style={{\n marginTop: '12px',\n padding: '12px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#f8fafc',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {/* code (immutable on edit) */}\n <div>\n <label style={labelStyle}>\n {editingId ? labels.variableTemplateManager.readonlyCode : labels.variableTemplateManager.code}\n </label>\n <input\n type=\"text\"\n data-testid=\"template-form-code\"\n value={draft.code}\n onChange={(e) => setDraft({ ...draft, code: e.target.value })}\n readOnly={!!editingId}\n disabled={!!editingId || busy}\n required\n style={{ ...inputStyle, fontFamily: 'monospace' }}\n />\n {formError === 'duplicate-code' && (\n <div data-testid=\"template-error-duplicate-code\" style={errorStyle}>\n {labels.variableTemplateManager.duplicateCodeError}\n </div>\n )}\n </div>\n\n {/* name (LocalizedField, immutable on edit) */}\n {editingId ? (\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.readonlyName}</label>\n <div\n data-testid=\"template-form-name-readonly\"\n style={{ ...inputStyle, backgroundColor: '#f1f5f9', color: '#475569' }}\n >\n {typeof draft.name === 'string' ? draft.name : resolveLabel(draft.name, defaultLang, defaultLang)}\n </div>\n </div>\n ) : (\n <LocalizedField\n label={labels.variableTemplateManager.name}\n value={draft.name}\n onChange={(next) => setDraft({ ...draft, name: next })}\n testIdPrefix=\"template-form-name\"\n disabled={busy}\n />\n )}\n\n {/* variableType */}\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.type}</label>\n <select\n data-testid=\"template-form-type\"\n value={draft.variableType}\n onChange={(e) => setDraft({ ...draft, variableType: e.target.value as VariableType })}\n disabled={busy}\n style={inputStyle}\n >\n {VARIABLE_TYPES.map((vt) => (\n <option key={vt} value={vt}>{vt}</option>\n ))}\n </select>\n </div>\n\n {/* description (LocalizedField) */}\n <LocalizedField\n label={labels.variableTemplateManager.description}\n value={draft.description}\n onChange={(next) => setDraft({ ...draft, description: next })}\n testIdPrefix=\"template-form-description\"\n disabled={busy}\n />\n\n {/* placeholder (LocalizedField) */}\n <LocalizedField\n label={labels.variableTemplateManager.placeholder}\n value={draft.placeholder}\n onChange={(next) => setDraft({ ...draft, placeholder: next })}\n testIdPrefix=\"template-form-placeholder\"\n disabled={busy}\n />\n\n {/* flags */}\n <div style={{ display: 'flex', gap: '12px', flexWrap: 'wrap' }}>\n <label style={checkboxLabelStyle}>\n <input\n type=\"checkbox\"\n data-testid=\"template-form-required\"\n checked={draft.isRequired}\n onChange={(e) => setDraft({ ...draft, isRequired: e.target.checked })}\n disabled={busy}\n />\n {labels.variableTemplateManager.required}\n </label>\n <label style={checkboxLabelStyle}>\n <input\n type=\"checkbox\"\n data-testid=\"template-form-readonly\"\n checked={draft.isReadonly}\n onChange={(e) => setDraft({ ...draft, isReadonly: e.target.checked })}\n disabled={busy}\n />\n {labels.variableTemplateManager.readonly}\n </label>\n <label style={checkboxLabelStyle}>\n <input\n type=\"checkbox\"\n data-testid=\"template-form-hidden\"\n checked={draft.isHidden}\n onChange={(e) => setDraft({ ...draft, isHidden: e.target.checked })}\n disabled={busy}\n />\n {labels.variableTemplateManager.hidden}\n </label>\n </div>\n\n {/* options (conditional) */}\n {TYPES_WITH_OPTIONS.includes(draft.variableType) && (\n <div data-testid=\"template-form-options\">\n <label style={labelStyle}>{labels.variableTemplateManager.options}</label>\n <OptionsEditor\n options={draft.options}\n onChange={(next) => setDraft({ ...draft, options: next })}\n disabled={busy}\n />\n </div>\n )}\n\n {/* expression (conditional, calculated only) */}\n {draft.variableType === 'calculated' && (\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.expression}</label>\n <input\n type=\"text\"\n data-testid=\"template-form-expression\"\n value={draft.expression}\n onChange={(e) => setDraft({ ...draft, expression: e.target.value })}\n disabled={busy}\n style={{ ...inputStyle, fontFamily: 'monospace' }}\n />\n </div>\n )}\n\n {/* dataSourceId (conditional, select/multiselect) */}\n {TYPES_WITH_DATASOURCE.includes(draft.variableType) && (\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.dataSourceId}</label>\n <select\n data-testid=\"template-form-datasource\"\n value={draft.dataSourceId}\n onChange={(e) => setDraft({ ...draft, dataSourceId: e.target.value })}\n disabled={busy}\n style={inputStyle}\n >\n <option value=\"\">—</option>\n {dataSourceOptions.map((d) => (\n <option key={d.id} value={d.id}>\n {d.label} ({d.id})\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Advanced section */}\n <div style={{ borderTop: '1px solid #e2e8f0', paddingTop: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"template-form-advanced-toggle\"\n onClick={() => setAdvancedOpen((v) => !v)}\n style={{\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: '#475569',\n fontSize: '12px',\n fontWeight: 600,\n padding: 0,\n }}\n >\n {advancedOpen ? '▼' : '▶'} {labels.variableTemplateManager.advancedSection}\n </button>\n {advancedOpen && (\n <div data-testid=\"template-form-advanced\" style={{ display: 'flex', flexDirection: 'column', gap: '6px', marginTop: '6px' }}>\n <AdvancedJsonField\n label={labels.variableTemplateManager.validationRules}\n testId=\"template-form-validation-rules\"\n value={draft.validationRulesJson}\n onChange={(v) => setDraft({ ...draft, validationRulesJson: v })}\n error={formError === 'validationRules'}\n disabled={busy}\n />\n <AdvancedJsonField\n label={labels.variableTemplateManager.conditions}\n testId=\"template-form-conditions\"\n value={draft.conditionsJson}\n onChange={(v) => setDraft({ ...draft, conditionsJson: v })}\n error={formError === 'conditions'}\n disabled={busy}\n />\n <AdvancedJsonField\n label={labels.variableTemplateManager.style}\n testId=\"template-form-style\"\n value={draft.styleJson}\n onChange={(v) => setDraft({ ...draft, styleJson: v })}\n error={formError === 'style'}\n disabled={busy}\n />\n </div>\n )}\n </div>\n\n {formError && !['duplicate-code', 'validationRules', 'conditions', 'style'].includes(formError) && (\n <div data-testid=\"template-form-error\" style={errorStyle}>{formError}</div>\n )}\n\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"template-form-cancel\"\n onClick={resetForm}\n disabled={busy}\n style={smallButtonStyle}\n >\n {labels.variableTemplateManager.cancelButton}\n </button>\n <button\n type=\"submit\"\n data-testid=\"template-form-save\"\n disabled={busy || !draft.code.trim()}\n style={{ ...smallButtonStyle, backgroundColor: '#2563eb', color: '#fff', border: 'none' }}\n >\n {labels.variableTemplateManager.saveButton}\n </button>\n </div>\n </form>\n )}\n </section>\n </div>\n </div>\n )\n}\n\nfunction AdvancedJsonField({\n label,\n testId,\n value,\n onChange,\n error,\n disabled,\n}: {\n label: string\n testId: string\n value: string\n onChange: (next: string) => void\n error?: boolean\n disabled?: boolean\n}) {\n return (\n <div>\n <label style={labelStyle}>{label}</label>\n <textarea\n data-testid={testId}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n rows={3}\n style={{\n ...inputStyle,\n fontFamily: 'monospace',\n fontSize: '12px',\n resize: 'vertical',\n borderColor: error ? '#ef4444' : '#cbd5e1',\n }}\n />\n {error && (\n <div data-testid={`${testId}-error`} style={errorStyle}>JSON</div>\n )}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n display: 'block',\n fontSize: '11px',\n fontWeight: 500,\n color: '#475569',\n marginBottom: '2px',\n}\n\nconst checkboxLabelStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '12px',\n color: '#334155',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n padding: '4px 6px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#0f172a',\n outline: 'none',\n backgroundColor: '#fff',\n}\n\nconst iconButtonStyle: React.CSSProperties = {\n border: '1px solid #e2e8f0',\n background: '#fff',\n cursor: 'pointer',\n fontSize: '13px',\n color: '#64748b',\n padding: '2px 6px',\n borderRadius: '4px',\n}\n\nconst smallButtonStyle: React.CSSProperties = {\n padding: '4px 10px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#334155',\n backgroundColor: '#fff',\n cursor: 'pointer',\n}\n\nconst errorStyle: React.CSSProperties = {\n fontSize: '11px',\n color: '#b91c1c',\n marginTop: '2px',\n}\n","/**\n * ScopeManagerDialog — admin CRUD for {@link IScope} entries.\n *\n * Mirrors the `FormTypesDialog` visual pattern (native modal, inline\n * edit, delete-with-confirm) but persists through the editor adapter:\n * - `adapter.createScope(data)`\n * - `adapter.updateScope(id, data)`\n * - `adapter.deleteScope(id)` — server returns 409 if forms, templates,\n * or data sources still reference the scope; the dialog surfaces the\n * message inline in red.\n *\n * Provides a \"Gérer les variables →\" affordance per row that opens\n * `VariableTemplateManager` scoped to that scope.\n */\n\nimport { useState } from 'react'\nimport { DEFAULT_LANG_CONFIG, resolveLabel } from '@msbci/form-core'\nimport type { IScope } from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { VariableTemplateManager } from './VariableTemplateManager'\n\nexport interface ScopeManagerDialogProps {\n open: boolean\n onClose: () => void\n}\n\nexport function ScopeManagerDialog({ open, onClose }: ScopeManagerDialogProps) {\n const labels = useLabels()\n const adapter = useEditorStore((s) => s.adapter)\n const availableScopes = useEditorStore((s) => s.availableScopes)\n const setAvailableScopes = useEditorStore((s) => s.setAvailableScopes)\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\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 const [deleteErrors, setDeleteErrors] = useState<Record<string, string>>({})\n const [busy, setBusy] = useState(false)\n // When set, the VariableTemplateManager dialog is open on this scope.\n const [openTemplatesFor, setOpenTemplatesFor] = useState<{ id: string; name: string } | null>(null)\n\n if (!open) return null\n\n const refresh = (mutate: (list: IScope[]) => IScope[]) => {\n setAvailableScopes(mutate(availableScopes))\n }\n\n const handleAdd = async () => {\n if (!newName.trim() || !adapter?.createScope) return\n const code = newCode.trim() || newName.trim().toUpperCase().replace(/\\s+/g, '_')\n setBusy(true)\n try {\n const created = await adapter.createScope({\n code,\n name: newName.trim(),\n tenantId: 'default',\n })\n refresh((list) => [...list, created])\n setNewName('')\n setNewCode('')\n } finally {\n setBusy(false)\n }\n }\n\n const startEdit = (scope: IScope) => {\n const currentName = typeof scope.name === 'string'\n ? scope.name\n : resolveLabel(scope.name, defaultLang, defaultLang)\n setEditingId(scope.id)\n setEditName(currentName)\n }\n\n const cancelEdit = () => {\n setEditingId(null)\n setEditName('')\n }\n\n const commitEdit = async () => {\n if (!editingId || !adapter?.updateScope) {\n cancelEdit()\n return\n }\n const trimmed = editName.trim()\n if (!trimmed) {\n cancelEdit()\n return\n }\n const current = availableScopes.find((s) => s.id === editingId)\n // Preserve the LocalizedString shape: object payloads keep their\n // other-lang values, plain strings stay plain strings.\n const nextName = current && typeof current.name === 'object'\n ? { ...current.name, [defaultLang]: trimmed }\n : trimmed\n setBusy(true)\n try {\n const updated = await adapter.updateScope(editingId, { name: nextName })\n refresh((list) => list.map((s) => (s.id === editingId ? updated : s)))\n cancelEdit()\n } finally {\n setBusy(false)\n }\n }\n\n const askDelete = (id: string) => {\n setConfirmDeleteId(id)\n setDeleteErrors((prev) => {\n const next = { ...prev }\n delete next[id]\n return next\n })\n }\n\n const confirmDelete = async () => {\n if (!confirmDeleteId || !adapter?.deleteScope) return\n const id = confirmDeleteId\n setBusy(true)\n try {\n await adapter.deleteScope(id)\n refresh((list) => list.filter((s) => s.id !== id))\n setConfirmDeleteId(null)\n } catch (err) {\n // Surface the server message (typically a 409 with the in-use counts).\n const message = err instanceof Error ? err.message : String(err)\n setDeleteErrors((prev) => ({ ...prev, [id]: message }))\n } finally {\n setBusy(false)\n }\n }\n\n const handleManageVariables = (scope: IScope) => {\n const name = typeof scope.name === 'string'\n ? scope.name\n : resolveLabel(scope.name, defaultLang, defaultLang)\n setOpenTemplatesFor({ id: scope.id, name })\n }\n\n return (\n <>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.scopeManager.dialogAriaLabel}\n data-testid=\"scope-manager-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: '36rem',\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.scopeManager.title}</h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.scopeManager.closeAriaLabel}\n data-testid=\"scope-manager-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 {availableScopes.length === 0 && (\n <div\n data-testid=\"scope-manager-empty\"\n style={{ fontSize: '13px', color: '#94a3b8', marginBottom: '12px' }}\n >\n {labels.scopeManager.noScopes}\n </div>\n )}\n\n <ul style={{ listStyle: 'none', padding: 0, margin: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {availableScopes.map((scope) => {\n const isEditing = editingId === scope.id\n const awaitingConfirm = confirmDeleteId === scope.id\n const displayName = typeof scope.name === 'string'\n ? scope.name\n : resolveLabel(scope.name, defaultLang, defaultLang)\n return (\n <li\n key={scope.id}\n data-testid={`scope-row-${scope.code}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n backgroundColor: '#fff',\n flexWrap: 'wrap',\n }}\n >\n {isEditing ? (\n <input\n type=\"text\"\n value={editName}\n autoFocus\n data-testid={`scope-name-edit-${scope.code}`}\n onChange={(e) => setEditName(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commitEdit()\n if (e.key === 'Escape') cancelEdit()\n }}\n disabled={busy}\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={`scope-name-${scope.code}`}\n onClick={() => startEdit(scope)}\n aria-label={labels.scopeManager.editScopeAria(scope.code)}\n style={{\n flex: 1,\n fontSize: '13px',\n cursor: 'pointer',\n padding: '4px 8px',\n }}\n >\n {displayName}\n </span>\n )}\n <span style={{ fontSize: '11px', color: '#94a3b8', fontFamily: 'monospace' }}>{scope.code}</span>\n <button\n type=\"button\"\n data-testid={`scope-manage-variables-${scope.code}`}\n aria-label={labels.scopeManager.manageVariablesAria(scope.code)}\n onClick={() => handleManageVariables(scope)}\n disabled={busy}\n style={{\n padding: '4px 10px',\n border: '1px solid #2563eb',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#2563eb',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.scopeManager.manageVariables}\n </button>\n <button\n type=\"button\"\n aria-label={labels.scopeManager.removeScopeAria(scope.code)}\n data-testid={`scope-remove-${scope.code}`}\n onClick={() => askDelete(scope.id)}\n disabled={busy}\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\n {awaitingConfirm && (\n <div\n data-testid={`scope-confirm-${scope.code}`}\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 flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ flex: 1 }}>{labels.scopeManager.confirmDelete}</span>\n <button\n type=\"button\"\n data-testid={`scope-confirm-yes-${scope.code}`}\n onClick={confirmDelete}\n disabled={busy}\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.scopeManager.deleteConfirm}\n </button>\n <button\n type=\"button\"\n data-testid={`scope-confirm-no-${scope.code}`}\n onClick={() => setConfirmDeleteId(null)}\n disabled={busy}\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.scopeManager.deleteCancel}\n </button>\n </div>\n {deleteErrors[scope.id] && (\n <div\n data-testid={`scope-delete-error-${scope.code}`}\n style={{ color: '#7f1d1d', fontWeight: 500 }}\n >\n {labels.scopeManager.deleteError} — {deleteErrors[scope.id]}\n </div>\n )}\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=\"scope-new-name\"\n placeholder={labels.scopeManager.newScopeName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') void handleAdd()\n }}\n disabled={busy}\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=\"scope-new-code\"\n placeholder={labels.scopeManager.newScopeCodePlaceholder}\n onChange={(e) => setNewCode(e.target.value)}\n disabled={busy}\n style={{\n width: '140px',\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=\"scope-add\"\n onClick={handleAdd}\n disabled={busy || newName.trim() === '' || !adapter?.createScope}\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.scopeManager.addScope}\n </button>\n </section>\n </div>\n </div>\n\n {openTemplatesFor && (\n <VariableTemplateManager\n open={true}\n onClose={() => setOpenTemplatesFor(null)}\n scopeId={openTemplatesFor.id}\n scopeName={openTemplatesFor.name}\n />\n )}\n </>\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 { DataSourceConfigManager } from '../dialogs/DataSourceConfigManager'\nimport { ScopeManagerDialog } from '../dialogs/ScopeManagerDialog'\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 select,\n } = useEditorStore()\n const labels = useLabels()\n\n const [showFormTypesDialog, setShowFormTypesDialog] = useState(false)\n const [showDataSourcesDialog, setShowDataSourcesDialog] = useState(false)\n const [showScopesDialog, setShowScopesDialog] = 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 {/* Form properties (⚙) — jumps the right panel to FormProperties. */}\n <button\n type=\"button\"\n onClick={() => select({ type: 'form' })}\n title={labels.toolbar.formProperties}\n data-testid=\"toolbar-form-properties\"\n aria-label={labels.toolbar.formProperties}\n style={{\n padding: '6px 10px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '14px',\n cursor: 'pointer',\n }}\n >\n ⚙\n </button>\n\n {/* Scopes manager */}\n <button\n type=\"button\"\n onClick={() => setShowScopesDialog(true)}\n title={labels.toolbar.manageScopesTitle}\n data-testid=\"toolbar-scopes\"\n aria-label={labels.toolbar.manageScopesTitle}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.toolbar.scopes}\n </button>\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 {/* Data sources */}\n <button\n type=\"button\"\n onClick={() => setShowDataSourcesDialog(true)}\n title={labels.toolbar.manageDataSourcesTitle}\n data-testid=\"toolbar-datasources\"\n aria-label={labels.toolbar.manageDataSourcesTitle}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.toolbar.dataSources}\n </button>\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\n <DataSourceConfigManager\n open={showDataSourcesDialog}\n onClose={() => setShowDataSourcesDialog(false)}\n />\n\n <ScopeManagerDialog\n open={showScopesDialog}\n onClose={() => setShowScopesDialog(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 scopeIds={form.scopeIds}\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 scopeIds: string[] | undefined\n search: string\n defaultLang: string\n labels: ReturnType<typeof useLabels>\n}\n\nfunction VariablesDndTab({ templates, scopeIds, 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 (!scopeIds || scopeIds.length === 0) 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, select } = useEditorStore()\n const labels = useLabels()\n\n // Clicking the empty area selects the form (FormProperties panel) —\n // guard against children bubbling up so item-level clicks keep their\n // own selection logic intact.\n const handleEmptyClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) select({ type: 'form' })\n }\n\n if (form.pages.length === 0) {\n return (\n <div\n data-testid=\"canvas-empty\"\n onClick={handleEmptyClick}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#94a3b8',\n fontSize: '14px',\n cursor: 'pointer',\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\n data-testid=\"canvas-root\"\n onClick={handleEmptyClick}\n style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}\n >\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","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 IScope,\n IVariableOption,\n IConditionRule,\n IValidationRule,\n IRepeatConfig,\n LangDetectionStrategy,\n LocalizedString,\n} from '@msbci/form-core'\nimport { resolveLabel } from '@msbci/form-core'\nimport type { IEditorLabels } from '../../i18n'\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, availableScopes } = 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 <ScopesSelector\n value={form.scopeIds ?? []}\n availableScopes={availableScopes}\n onChange={(ids) => updateFormMeta({ scopeIds: ids })}\n defaultLang={langConfig.defaultLang}\n labels={labels}\n />\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 */\n// ──────────────────────────────────────────────────────────────\n// ScopesSelector — multi-scope picker with priority ordering\n// ──────────────────────────────────────────────────────────────\n\nfunction ScopesSelector({\n value,\n availableScopes,\n onChange,\n defaultLang,\n labels,\n}: {\n value: string[]\n availableScopes: IScope[]\n onChange: (ids: string[]) => void\n defaultLang: string\n labels: IEditorLabels\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 containerStyle: React.CSSProperties = {\n padding: '8px',\n backgroundColor: '#f8fafc',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginTop: '4px',\n }\n\n const selectedScopes = value\n .map((id) => availableScopes.find((s) => s.id === id) ?? availableScopes.find((s) => s.code === id))\n .filter((s): s is IScope => Boolean(s))\n const remaining = availableScopes.filter((s) => !value.includes(s.id) && !value.includes(s.code))\n\n const addScope = (id: string) => {\n if (!id) return\n onChange([...value, id])\n }\n\n const removeAt = (index: number) => {\n const next = value.slice()\n next.splice(index, 1)\n onChange(next)\n }\n\n const move = (index: number, delta: -1 | 1) => {\n const target = index + delta\n if (target < 0 || target >= value.length) return\n const next = value.slice()\n const [picked] = next.splice(index, 1)\n next.splice(target, 0, picked!)\n onChange(next)\n }\n\n return (\n <div data-testid=\"form-scopes-selector\" style={containerStyle}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.properties.scopes}\n </div>\n <p style={{ margin: 0, fontSize: '11px', color: '#94a3b8' }}>\n {labels.properties.scopesHint}\n </p>\n\n {selectedScopes.length === 0 ? (\n <div style={{ fontSize: '12px', color: '#94a3b8', fontStyle: 'italic' }}>—</div>\n ) : (\n <ol\n data-testid=\"form-scopes-selected\"\n style={{ margin: 0, padding: 0, listStyle: 'none', display: 'flex', flexDirection: 'column', gap: '4px' }}\n >\n {selectedScopes.map((scope, idx) => (\n <li\n key={scope.id}\n data-testid={`form-scope-${scope.code}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 8px',\n borderRadius: '4px',\n backgroundColor: '#fff',\n border: '1px solid #e2e8f0',\n fontSize: '12px',\n }}\n >\n <span style={{ fontSize: '10px', color: '#64748b', minWidth: '14px' }}>{idx + 1}.</span>\n <span style={{ fontFamily: 'monospace', color: '#475569' }}>{scope.code}</span>\n <span style={{ color: '#1e293b', flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {resolveLabel(scope.name, defaultLang, defaultLang)}\n </span>\n <button\n type=\"button\"\n aria-label={labels.properties.moveScopeUp}\n data-testid={`form-scope-up-${scope.code}`}\n onClick={() => move(idx, -1)}\n disabled={idx === 0}\n style={ghostBtn(idx === 0)}\n >▲</button>\n <button\n type=\"button\"\n aria-label={labels.properties.moveScopeDown}\n data-testid={`form-scope-down-${scope.code}`}\n onClick={() => move(idx, 1)}\n disabled={idx === selectedScopes.length - 1}\n style={ghostBtn(idx === selectedScopes.length - 1)}\n >▼</button>\n <button\n type=\"button\"\n aria-label={labels.properties.removeScope}\n data-testid={`form-scope-remove-${scope.code}`}\n onClick={() => removeAt(idx)}\n style={{ ...ghostBtn(false), color: '#ef4444' }}\n >×</button>\n </li>\n ))}\n </ol>\n )}\n\n {remaining.length > 0 ? (\n <select\n value=\"\"\n data-testid=\"form-scopes-add\"\n onChange={(e) => {\n const id = e.target.value\n if (id) addScope(id)\n e.target.value = ''\n }}\n style={selectStyleScopes}\n >\n <option value=\"\">+ {labels.properties.scopes}…</option>\n {remaining.map((s) => (\n <option key={s.id} value={s.id}>\n {s.code} — {resolveLabel(s.name, defaultLang, defaultLang)}\n </option>\n ))}\n </select>\n ) : availableScopes.length === 0 ? (\n <div style={{ fontSize: '11px', color: '#94a3b8', fontStyle: 'italic' }} data-testid=\"form-scopes-empty\">\n {labels.properties.noScopesAvailable}\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction ghostBtn(disabled: boolean): React.CSSProperties {\n return {\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: disabled ? '#cbd5e1' : '#64748b',\n fontSize: '10px',\n padding: '2px 6px',\n borderRadius: '4px',\n cursor: disabled ? 'default' : 'pointer',\n }\n}\n\nconst selectStyleScopes: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n}\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 * ConditionsModal — full-screen modal that hosts the ConditionBuilder\n * plus a manual-input mode with lightweight syntax highlighting.\n *\n * Design rules:\n * - Open / close only via the [✕] button or [Cancel] / [Apply].\n * The backdrop is non-clickable on purpose (no accidental loss of\n * in-flight edits).\n * - The modal owns a draft state. [Apply] commits, [Cancel] discards.\n * - A toggle switches between the visual builder (re-uses the\n * existing ConditionBuilder) and a manual textarea + syntax-coloured\n * mirror. Both modes produce the same canonical `expression` string.\n * - Focus trap implemented inline (no external dep) — Tab / Shift+Tab\n * loop inside the dialog, Escape closes (treated as Cancel).\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport type { IConditionRule } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\nimport {\n ConditionBuilder,\n type RosterConditionContext,\n} from './ConditionBuilder'\n\nexport interface ConditionsModalProps {\n open: boolean\n /** Triggered by ✕, [Cancel] or Escape. Apply uses onApply + onClose. */\n onClose: () => void\n conditions: IConditionRule[]\n /** Called only when [Apply] is pressed with the final list. */\n onApply: (conditions: IConditionRule[]) => void\n availableVariables: Array<{ code: string; name: string }>\n rosterContext?: RosterConditionContext\n}\n\ntype EditorMode = 'visual' | 'manual'\n\nexport function ConditionsModal({\n open,\n onClose,\n conditions,\n onApply,\n availableVariables,\n rosterContext,\n}: ConditionsModalProps) {\n const labels = useLabels()\n const dialogRef = useRef<HTMLDivElement>(null)\n const previouslyFocused = useRef<HTMLElement | null>(null)\n\n // Draft conditions — re-seeded each time the modal opens so a Cancel\n // truly cancels (no mutation leaks back to the parent).\n const [draft, setDraft] = useState<IConditionRule[]>(conditions)\n const [mode, setMode] = useState<EditorMode>('visual')\n\n useEffect(() => {\n if (open) {\n setDraft(conditions)\n setMode('visual')\n }\n }, [open, conditions])\n\n // Focus trap + initial focus + Escape handling.\n useEffect(() => {\n if (!open) return\n previouslyFocused.current = document.activeElement as HTMLElement | null\n // Move focus into the dialog on next tick (after render).\n const id = setTimeout(() => {\n const first = dialogRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n first?.focus()\n }, 0)\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation()\n onClose()\n return\n }\n if (event.key !== 'Tab' || !dialogRef.current) return\n const focusables = Array.from(\n dialogRef.current.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((el) => el.offsetParent !== null)\n if (focusables.length === 0) return\n const first = focusables[0]!\n const last = focusables[focusables.length - 1]!\n const active = document.activeElement as HTMLElement | null\n if (event.shiftKey && active === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && active === last) {\n event.preventDefault()\n first.focus()\n }\n }\n window.addEventListener('keydown', handleKey)\n return () => {\n clearTimeout(id)\n window.removeEventListener('keydown', handleKey)\n previouslyFocused.current?.focus?.()\n }\n }, [open, onClose])\n\n const handleApply = useCallback(() => {\n onApply(draft)\n onClose()\n }, [draft, onApply, onClose])\n\n if (!open) return null\n\n return (\n <div\n data-testid=\"conditions-modal-overlay\"\n // Overlay is intentionally NOT clickable — only ✕ / Cancel / Apply close.\n aria-hidden=\"false\"\n style={{\n position: 'fixed', inset: 0, zIndex: 1000,\n backgroundColor: 'rgba(15, 23, 42, 0.55)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n padding: '24px',\n }}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"conditions-modal-title\"\n data-testid=\"conditions-modal\"\n style={{\n backgroundColor: '#fff',\n borderRadius: '12px',\n boxShadow: '0 24px 48px rgba(0,0,0,0.25)',\n width: '100%', maxWidth: '720px',\n maxHeight: 'calc(100vh - 48px)',\n display: 'flex', flexDirection: 'column',\n overflow: 'hidden',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* ── Header ── */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '14px 20px', borderBottom: '1px solid #e2e8f0' }}>\n <h2 id=\"conditions-modal-title\" style={{ margin: 0, fontSize: '16px', fontWeight: 600, color: '#0f172a' }}>\n {labels.conditionBuilder.modalTitle(draft.length)}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n data-testid=\"conditions-modal-close\"\n aria-label={labels.conditionBuilder.closeButton}\n style={{\n border: 'none', background: 'none', cursor: 'pointer',\n fontSize: '20px', color: '#64748b', padding: '4px 8px',\n borderRadius: '6px',\n }}\n >\n ✕\n </button>\n </div>\n\n {/* ── Mode toggle ── */}\n <div style={{ display: 'flex', gap: '4px', padding: '12px 20px 0', borderBottom: '1px solid #f1f5f9' }}>\n <ModeButton\n active={mode === 'visual'}\n label={labels.conditionBuilder.modeVisual}\n testId=\"conditions-modal-mode-visual\"\n onClick={() => setMode('visual')}\n />\n <ModeButton\n active={mode === 'manual'}\n label={labels.conditionBuilder.modeManual}\n testId=\"conditions-modal-mode-manual\"\n onClick={() => setMode('manual')}\n />\n </div>\n\n {/* ── Body (scrollable) ── */}\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px 20px' }}>\n {mode === 'visual' ? (\n <ConditionBuilder\n conditions={draft}\n onChange={setDraft}\n availableVariables={availableVariables}\n rosterContext={rosterContext}\n />\n ) : (\n <ManualEditorList\n conditions={draft}\n onChange={setDraft}\n />\n )}\n\n {/* ── Configured formulas summary ── */}\n <FormulasSummary conditions={draft} title={labels.conditionBuilder.formulasSummary} empty={labels.conditionBuilder.noConditions} />\n </div>\n\n {/* ── Footer ── */}\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', padding: '12px 20px', borderTop: '1px solid #e2e8f0' }}>\n <button\n type=\"button\"\n onClick={onClose}\n data-testid=\"conditions-modal-cancel\"\n style={{\n padding: '8px 16px', border: '1px solid #cbd5e1',\n borderRadius: '6px', backgroundColor: '#fff', color: '#334155',\n fontSize: '13px', fontWeight: 500, cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.cancelButton}\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n data-testid=\"conditions-modal-apply\"\n style={{\n padding: '8px 16px', border: 'none',\n borderRadius: '6px', backgroundColor: '#2563eb', color: '#fff',\n fontSize: '13px', fontWeight: 600, cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.applyButton}\n </button>\n </div>\n </div>\n </div>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// Mode toggle button\n// ──────────────────────────────────────────────────────────────\n\nfunction ModeButton({\n active,\n label,\n testId,\n onClick,\n}: {\n active: boolean\n label: string\n testId: string\n onClick: () => void\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n data-testid={testId}\n aria-pressed={active}\n style={{\n padding: '8px 14px',\n border: 'none',\n backgroundColor: 'transparent',\n color: active ? '#2563eb' : '#64748b',\n fontWeight: active ? 600 : 500,\n fontSize: '13px',\n cursor: 'pointer',\n borderBottomWidth: '2px',\n borderBottomStyle: 'solid',\n borderBottomColor: active ? '#2563eb' : 'transparent',\n marginBottom: '-1px',\n }}\n >\n {label}\n </button>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// Manual editor — one HighlightedTextarea per condition\n// ──────────────────────────────────────────────────────────────\n\nfunction ManualEditorList({\n conditions,\n onChange,\n}: {\n conditions: IConditionRule[]\n onChange: (next: IConditionRule[]) => void\n}) {\n const labels = useLabels()\n\n if (conditions.length === 0) {\n return (\n <div style={{ padding: '12px', color: '#94a3b8', fontSize: '13px', textAlign: 'center', fontStyle: 'italic' }}>\n {labels.conditionBuilder.noConditions}\n </div>\n )\n }\n\n const update = (id: string, expression: string) => {\n onChange(conditions.map((c) => (c.id === id ? { ...c, expression } : c)))\n }\n\n // Warn when an expression looks complex enough that going back to the\n // visual builder would lose information (the legacy parser is a stub).\n const looksComplex = (expr: string) =>\n expr.includes('ConditionEval(') ||\n expr.includes('||') ||\n /show\\(|hide\\(|setValue\\(/.test(expr) === false ||\n expr.split('&&').length > 2\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>\n <p style={{ margin: 0, fontSize: '11px', color: '#64748b' }}>\n {labels.conditionBuilder.manualHelp}\n </p>\n\n {conditions.map((c, idx) => (\n <div key={c.id} style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <label style={{ fontSize: '11px', fontWeight: 600, color: '#64748b' }}>\n #{idx + 1} — {labels.conditionBuilder.actions[c.action] ?? c.action}\n </label>\n <HighlightedTextarea\n value={c.expression}\n onChange={(next) => update(c.id, next)}\n placeholder={labels.conditionBuilder.manualPlaceholder}\n testId={`conditions-modal-manual-${c.id}`}\n />\n {looksComplex(c.expression) && (\n <p\n data-testid={`conditions-modal-manual-warning-${c.id}`}\n style={{\n margin: 0, fontSize: '11px', color: '#92400e',\n backgroundColor: '#fffbeb', border: '1px solid #fde68a',\n padding: '6px 8px', borderRadius: '4px',\n }}\n >\n ⚠ {labels.conditionBuilder.manualWarning}\n </p>\n )}\n </div>\n ))}\n </div>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// HighlightedTextarea — textarea + coloured mirror div\n// ──────────────────────────────────────────────────────────────\n\nconst SYNTAX_COLORS = {\n function: '#2563eb', // blue\n variable: '#ea580c', // orange\n operator: '#9333ea', // purple\n string: '#16a34a', // green\n number: '#0891b2', // cyan\n plain: 'inherit',\n identifier: 'inherit',\n} as const\n\nconst FUNCS = new Set([\n 'show', 'hide', 'setValue', 'validate', 'require', 'readonly',\n 'ConditionEval', 'jump', 'contains', 'startsWith', 'endsWith',\n 'isEmpty', 'isNotEmpty', 'not_contains', 'in', 'between', 'regex',\n])\n\ntype Token = { type: keyof typeof SYNTAX_COLORS; text: string }\n\n/**\n * Lightweight tokenizer for ConditionEval expressions — no parser, just\n * enough to classify spans for syntax colouring.\n */\nfunction tokenize(expr: string): Token[] {\n const tokens: Token[] = []\n let i = 0\n while (i < expr.length) {\n const c = expr[i]!\n\n // Quoted string\n if (c === '\"' || c === \"'\") {\n let end = i + 1\n while (end < expr.length && expr[end] !== c) {\n if (expr[end] === '\\\\') end++\n end++\n }\n tokens.push({ type: 'string', text: expr.slice(i, Math.min(end + 1, expr.length)) })\n i = end + 1\n continue\n }\n\n // ${VARIABLE}\n if (c === '$' && expr[i + 1] === '{') {\n let end = i + 2\n while (end < expr.length && expr[end] !== '}') end++\n tokens.push({ type: 'variable', text: expr.slice(i, Math.min(end + 1, expr.length)) })\n i = end + 1\n continue\n }\n\n // Identifier / function\n if (/[a-zA-Z_]/.test(c)) {\n let end = i\n while (end < expr.length && /[a-zA-Z0-9_]/.test(expr[end]!)) end++\n const ident = expr.slice(i, end)\n tokens.push({ type: FUNCS.has(ident) ? 'function' : 'identifier', text: ident })\n i = end\n continue\n }\n\n // Number\n if (/\\d/.test(c)) {\n let end = i\n while (end < expr.length && /[\\d.]/.test(expr[end]!)) end++\n tokens.push({ type: 'number', text: expr.slice(i, end) })\n i = end\n continue\n }\n\n // Operators (multichar first)\n if ('=!<>&|'.includes(c)) {\n const two = expr.slice(i, i + 2)\n if (['==', '!=', '<=', '>=', '&&', '||'].includes(two)) {\n tokens.push({ type: 'operator', text: two })\n i += 2\n continue\n }\n tokens.push({ type: 'operator', text: c })\n i++\n continue\n }\n\n tokens.push({ type: 'plain', text: c })\n i++\n }\n return tokens\n}\n\nfunction HighlightedTextarea({\n value,\n onChange,\n placeholder,\n testId,\n}: {\n value: string\n onChange: (next: string) => void\n placeholder?: string\n testId?: string\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const mirrorRef = useRef<HTMLDivElement>(null)\n const tokens = useMemo(() => tokenize(value), [value])\n\n // Keep the mirror in sync with the textarea's scroll position.\n const handleScroll = () => {\n if (!textareaRef.current || !mirrorRef.current) return\n mirrorRef.current.scrollTop = textareaRef.current.scrollTop\n mirrorRef.current.scrollLeft = textareaRef.current.scrollLeft\n }\n\n const sharedStyle: React.CSSProperties = {\n position: 'absolute',\n top: 0, left: 0,\n width: '100%', height: '100%',\n margin: 0,\n padding: '8px 10px',\n border: 'none',\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '12.5px',\n lineHeight: '20px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n boxSizing: 'border-box',\n }\n\n return (\n <div\n style={{\n position: 'relative',\n minHeight: '60px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#f8fafc',\n overflow: 'hidden',\n }}\n >\n {/* Coloured mirror — read-only, behind the textarea */}\n <div\n ref={mirrorRef}\n aria-hidden=\"true\"\n style={{\n ...sharedStyle,\n color: '#0f172a',\n overflow: 'auto',\n pointerEvents: 'none',\n }}\n >\n {tokens.length === 0 ? (\n <span style={{ color: '#94a3b8' }}>{placeholder}</span>\n ) : (\n <>\n {tokens.map((t, idx) => (\n <span key={idx} style={{ color: SYNTAX_COLORS[t.type] }}>\n {t.text}\n </span>\n ))}\n {/* Trailing newline placeholder so caret never lands outside the mirror */}\n <span>{''}</span>\n </>\n )}\n </div>\n\n {/* Transparent textarea — captures input, scroll & caret */}\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onScroll={handleScroll}\n placeholder={placeholder}\n data-testid={testId}\n spellCheck={false}\n style={{\n ...sharedStyle,\n color: 'transparent',\n caretColor: '#0f172a',\n backgroundColor: 'transparent',\n resize: 'vertical',\n outline: 'none',\n // Match the mirror's overflow so scrolls align.\n overflow: 'auto',\n }}\n />\n </div>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// FormulasSummary — read-only recap of every configured expression\n// ──────────────────────────────────────────────────────────────\n\nfunction FormulasSummary({\n conditions,\n title,\n empty,\n}: {\n conditions: IConditionRule[]\n title: string\n empty: string\n}) {\n return (\n <div style={{ marginTop: '16px', borderTop: '1px solid #e2e8f0', paddingTop: '12px' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {title}\n </h3>\n {conditions.length === 0 ? (\n <p style={{ margin: 0, fontSize: '12px', color: '#94a3b8', fontStyle: 'italic' }}>{empty}</p>\n ) : (\n <ul\n data-testid=\"conditions-modal-summary\"\n style={{ margin: 0, padding: 0, listStyle: 'none', display: 'flex', flexDirection: 'column', gap: '4px' }}\n >\n {conditions.map((c) => (\n <li\n key={c.id}\n style={{\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '11.5px',\n color: '#0f172a',\n backgroundColor: '#f1f5f9',\n padding: '4px 8px',\n borderRadius: '4px',\n wordBreak: 'break-all',\n }}\n >\n {c.expression || '∅'}\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\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 { useMemo, useState } from 'react'\nimport type { IDataSourceConnector } from '@msbci/form-core'\nimport { resolveLabel, DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\n\n/**\n * Lightweight shape used inside the selector — only `id` and `name` are\n * needed for the dropdown. Both `IDataSourceConnector` (legacy, manual\n * injection) and `IDataSourceConfig` (admin-managed, dynamic) collapse\n * onto this shape so the selector treats them uniformly.\n */\ninterface SelectorEntry {\n id: string\n name: string\n}\n\nexport interface DataSourceSelectorProps {\n /** Currently selected connector ID */\n dataSourceId?: string\n /** Current dependency mapping: { depKey: variableCode } */\n dependencies?: Record<string, string>\n /**\n * Legacy connectors injected by the host code. Merged with the\n * admin-managed configs from the store (the store wins on `id` clash —\n * the editor surfaces what admins actually configured).\n */\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 availableDataSources = useEditorStore((s) => s.availableDataSources)\n const form = useEditorStore((s) => s.form)\n const defaultLang =\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n // Merge dynamic configs + legacy connectors. Configs win on duplicates\n // because admins managed them explicitly via the editor.\n const entries = useMemo<SelectorEntry[]>(() => {\n const map = new Map<string, SelectorEntry>()\n for (const c of availableConnectors) map.set(c.id, { id: c.id, name: c.name })\n for (const cfg of availableDataSources) {\n const name = typeof cfg.name === 'string'\n ? cfg.name\n : resolveLabel(cfg.name, defaultLang, defaultLang)\n map.set(cfg.code, { id: cfg.code, name })\n }\n return Array.from(map.values())\n }, [availableConnectors, availableDataSources, defaultLang])\n\n const selectedConnector = entries.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 {entries.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","import { useMemo, useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { ConditionsModal } from './ConditionsModal'\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 IFileConfig,\n IImageConfig,\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 const [conditionsModalOpen, setConditionsModalOpen] = useState(false)\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 {/* File upload configuration (v1.3.3+) */}\n {variable.type === 'file' && (\n <FileConfigSection\n value={variable.fileConfig}\n onChange={(next) => update({ fileConfig: next })}\n labels={{\n title: labels.properties.fileConfig,\n max: labels.properties.fileConfigMax,\n min: labels.properties.fileConfigMin,\n accept: labels.properties.fileConfigAccept,\n acceptPlaceholder: labels.properties.fileConfigAcceptPlaceholder,\n unlimited: labels.properties.fileConfigUnlimited,\n }}\n />\n )}\n\n {/* Image upload configuration (v1.3.3+) */}\n {variable.type === 'image' && (\n <ImageConfigSection\n value={variable.imageConfig}\n onChange={(next) => update({ imageConfig: next })}\n labels={{\n title: labels.properties.imageConfig,\n max: labels.properties.imageConfigMax,\n min: labels.properties.imageConfigMin,\n camera: labels.properties.imageConfigCamera,\n unlimited: labels.properties.fileConfigUnlimited,\n }}\n />\n )}\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 <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <label style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.conditionBuilder.conditionsCount((variable.conditions ?? []).length)}\n </label>\n <button\n type=\"button\"\n data-testid=\"conditions-modal-open\"\n onClick={() => setConditionsModalOpen(true)}\n style={{\n padding: '8px 14px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#fff',\n color: '#1e293b',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n ⚙ {labels.conditionBuilder.configureButton((variable.conditions ?? []).length)}\n </button>\n {(variable.conditions ?? []).length > 0 && (\n <ul\n data-testid=\"conditions-preview\"\n style={{\n margin: 0,\n padding: 0,\n listStyle: 'none',\n display: 'flex',\n flexDirection: 'column',\n gap: '3px',\n }}\n >\n {(variable.conditions ?? []).map((c) => (\n <li\n key={c.id}\n style={{\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '11.5px',\n color: '#0f172a',\n backgroundColor: '#f1f5f9',\n padding: '4px 8px',\n borderRadius: '4px',\n wordBreak: 'break-all',\n }}\n >\n {c.expression || '∅'}\n </li>\n ))}\n </ul>\n )}\n </div>\n </FieldWithReset>\n\n <ConditionsModal\n open={conditionsModalOpen}\n onClose={() => setConditionsModalOpen(false)}\n conditions={variable.conditions ?? []}\n onApply={(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 </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\n// ─── File / Image upload config sections (v1.3.3+) ───────────────────\n\nconst FILE_MAX_OPTIONS = [1, 2, 3, 5, 10] as const\nconst FILE_MIN_OPTIONS = [0, 1, 2, 3] as const\n\nfunction FileConfigSection({\n value,\n onChange,\n labels,\n}: {\n value: IFileConfig | undefined\n onChange: (next: IFileConfig | undefined) => void\n labels: {\n title: string\n max: string\n min: string\n accept: string\n acceptPlaceholder: string\n unlimited: string\n }\n}) {\n const current: IFileConfig = value ?? {}\n // Encoded as the string \"unlimited\" in the <select> for clarity.\n const maxSelectValue = current.maxFiles === undefined\n ? 'unlimited'\n : String(current.maxFiles)\n\n const patch = (next: IFileConfig) => {\n // Drop empty objects so the payload stays clean.\n const cleaned: IFileConfig = {}\n if (next.maxFiles !== undefined) cleaned.maxFiles = next.maxFiles\n if (next.minFiles !== undefined && next.minFiles > 0) cleaned.minFiles = next.minFiles\n if (next.accept) cleaned.accept = next.accept\n onChange(Object.keys(cleaned).length > 0 ? cleaned : undefined)\n }\n\n return (\n <div data-testid=\"file-config-section\" style={uploadSectionStyle}>\n <div style={uploadSectionTitleStyle}>{labels.title}</div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.max}</label>\n <select\n data-testid=\"file-config-max\"\n value={maxSelectValue}\n onChange={(e) => {\n const raw = e.target.value\n patch({\n ...current,\n maxFiles: raw === 'unlimited' ? undefined : Number(raw),\n })\n }}\n style={uploadInputStyle}\n >\n {FILE_MAX_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n <option value=\"unlimited\">{labels.unlimited}</option>\n </select>\n </div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.min}</label>\n <select\n data-testid=\"file-config-min\"\n value={String(current.minFiles ?? 0)}\n onChange={(e) => patch({ ...current, minFiles: Number(e.target.value) })}\n style={uploadInputStyle}\n >\n {FILE_MIN_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n </select>\n </div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.accept}</label>\n <input\n data-testid=\"file-config-accept\"\n type=\"text\"\n value={current.accept ?? ''}\n onChange={(e) => patch({ ...current, accept: e.target.value || undefined })}\n placeholder={labels.acceptPlaceholder}\n style={{ ...uploadInputStyle, fontFamily: 'monospace' }}\n />\n </div>\n </div>\n )\n}\n\nfunction ImageConfigSection({\n value,\n onChange,\n labels,\n}: {\n value: IImageConfig | undefined\n onChange: (next: IImageConfig | undefined) => void\n labels: {\n title: string\n max: string\n min: string\n camera: string\n unlimited: string\n }\n}) {\n const current: IImageConfig = value ?? {}\n const maxSelectValue = current.maxImages === undefined\n ? 'unlimited'\n : String(current.maxImages)\n\n const patch = (next: IImageConfig) => {\n const cleaned: IImageConfig = {}\n if (next.maxImages !== undefined) cleaned.maxImages = next.maxImages\n if (next.minImages !== undefined && next.minImages > 0) cleaned.minImages = next.minImages\n if (next.allowCamera) cleaned.allowCamera = true\n onChange(Object.keys(cleaned).length > 0 ? cleaned : undefined)\n }\n\n return (\n <div data-testid=\"image-config-section\" style={uploadSectionStyle}>\n <div style={uploadSectionTitleStyle}>{labels.title}</div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.max}</label>\n <select\n data-testid=\"image-config-max\"\n value={maxSelectValue}\n onChange={(e) => {\n const raw = e.target.value\n patch({\n ...current,\n maxImages: raw === 'unlimited' ? undefined : Number(raw),\n })\n }}\n style={uploadInputStyle}\n >\n {FILE_MAX_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n <option value=\"unlimited\">{labels.unlimited}</option>\n </select>\n </div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.min}</label>\n <select\n data-testid=\"image-config-min\"\n value={String(current.minImages ?? 0)}\n onChange={(e) => patch({ ...current, minImages: Number(e.target.value) })}\n style={uploadInputStyle}\n >\n {FILE_MIN_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n </select>\n </div>\n\n <label\n data-testid=\"image-config-camera-label\"\n style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}\n >\n <input\n type=\"checkbox\"\n data-testid=\"image-config-camera\"\n checked={!!current.allowCamera}\n onChange={(e) => patch({ ...current, allowCamera: e.target.checked })}\n />\n {labels.camera}\n </label>\n </div>\n )\n}\n\nconst uploadSectionStyle: React.CSSProperties = {\n padding: '8px',\n backgroundColor: '#f0f9ff',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n border: '1px solid #bae6fd',\n}\n\nconst uploadSectionTitleStyle: React.CSSProperties = {\n fontSize: '11px',\n fontWeight: 600,\n color: '#0369a1',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n}\n\nconst uploadFieldLabelStyle: React.CSSProperties = {\n display: 'block',\n fontSize: '12px',\n fontWeight: 500,\n color: '#0c4a6e',\n marginBottom: '2px',\n}\n\nconst uploadInputStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #bae6fd',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#0f172a',\n outline: 'none',\n backgroundColor: '#fff',\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 { IDataSourceConfig, IFormDefinition, IDataSourceConnector, IVariableTemplate } 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 {\n form,\n view,\n setForm,\n setAdapter,\n load,\n setAvailableTemplates,\n setAvailableScopes,\n setAvailableDataSources,\n } = 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 // Stable key for the scope list so the effect below only fires when\n // the linked scopes actually change (and not on every form mutation).\n const scopeIdsKey = (form.scopeIds ?? []).join('|')\n\n // Reload the variable-template library whenever the linked scopes\n // change. We call `loadTemplates(id)` in parallel for each scope and\n // merge the results, with earlier scopes taking priority on `code`\n // conflicts (de-duplication by `code`).\n useEffect(() => {\n const scopeIds = form.scopeIds ?? []\n if (scopeIds.length === 0 || !adapter?.loadTemplates) {\n setAvailableTemplates([])\n return\n }\n const load = adapter.loadTemplates\n let cancelled = false\n Promise.all(\n scopeIds.map((id) =>\n load(id).catch(() => [] as IVariableTemplate[]),\n ),\n )\n .then((batches) => {\n if (cancelled) return\n const seen = new Set<string>()\n const merged: IVariableTemplate[] = []\n for (const batch of batches) {\n for (const tpl of batch) {\n if (seen.has(tpl.code)) continue\n seen.add(tpl.code)\n merged.push(tpl)\n }\n }\n setAvailableTemplates(merged)\n })\n .catch(() => {\n if (!cancelled) setAvailableTemplates([])\n })\n return () => {\n cancelled = true\n }\n }, [scopeIdsKey, adapter, setAvailableTemplates]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Load the global scope library once per adapter swap (used by\n // FormProperties to populate the multi-scope picker).\n useEffect(() => {\n if (!adapter?.loadScopes) {\n setAvailableScopes([])\n return\n }\n let cancelled = false\n adapter\n .loadScopes()\n .then((scopes) => {\n if (!cancelled) setAvailableScopes(scopes)\n })\n .catch(() => {\n if (!cancelled) setAvailableScopes([])\n })\n return () => {\n cancelled = true\n }\n }, [adapter, setAvailableScopes])\n\n // Reload the data-source list whenever the linked scopes change.\n // Same pattern as templates: Promise.all per scope, dedup by `code`,\n // first scope wins. The DataSourceConfigManager surfaces `scopeId`\n // so users still see which scope each entry belongs to.\n useEffect(() => {\n const scopeIds = form.scopeIds ?? []\n if (scopeIds.length === 0 || !adapter?.loadDataSources) {\n setAvailableDataSources([])\n return\n }\n const loadDs = adapter.loadDataSources\n let cancelled = false\n Promise.all(\n scopeIds.map((id) =>\n loadDs(id).catch(() => [] as IDataSourceConfig[]),\n ),\n )\n .then((batches) => {\n if (cancelled) return\n const seen = new Set<string>()\n const merged: IDataSourceConfig[] = []\n for (const batch of batches) {\n for (const cfg of batch) {\n if (seen.has(cfg.code)) continue\n seen.add(cfg.code)\n merged.push(cfg)\n }\n }\n setAvailableDataSources(merged)\n })\n .catch(() => {\n if (!cancelled) setAvailableDataSources([])\n })\n return () => {\n cancelled = true\n }\n }, [scopeIdsKey, adapter, setAvailableDataSources]) // 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 ?? 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 scopeIds={form.scopeIds}\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 scopeIds: string[] | undefined\n search: string\n onAdd: (template: IVariableTemplate) => void\n defaultLang: string\n labels: ReturnType<typeof useLabels>\n}\n\nfunction VariablesTab({ templates, scopeIds, 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 (!scopeIds || scopeIds.length === 0) 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, select } = useEditorStore()\n const labels = useLabels()\n\n // Clicking the empty area between pages selects the form so the right\n // panel jumps back to FormProperties. We guard with target===current\n // so a click that bubbles up from a child (page header, item) does\n // NOT clear that child's selection.\n const handleEmptyClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) select({ type: 'form' })\n }\n\n if (form.pages.length === 0) {\n return (\n <div\n data-testid=\"canvas-empty\"\n onClick={handleEmptyClick}\n style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px', cursor: 'pointer' }}\n >\n {labels.canvas.emptyStateNoPage}\n </div>\n )\n }\n\n return (\n <div\n data-testid=\"canvas-root\"\n onClick={handleEmptyClick}\n style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}\n >\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"]}
|
|
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/dialogs/DataSourceConfigManager.tsx","../src/components/properties/LocalizedInput.tsx","../src/components/properties/OptionsEditor.tsx","../src/components/dialogs/VariableTemplateManager.tsx","../src/components/dialogs/ScopeManagerDialog.tsx","../src/components/toolbar/EditorToolbar.tsx","../src/components/toolbox/Toolbox.tsx","../src/components/canvas/Canvas.tsx","../src/components/DndManager.tsx","../src/components/properties/FormProperties.tsx","../src/components/properties/PageProperties.tsx","../src/components/properties/ConditionBuilder.tsx","../src/components/properties/ConditionsModal.tsx","../src/components/properties/DataSourceSelector.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","v","isPageVariable","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","scopes","configs","adapter","formId","serializeForm","json","deserializeForm","frLabels","fields","rosters","vars","typeLabel","pages","variables","options","lang","count","rules","scopeName","scopeCode","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","emptyDraft","configToDraft","c","defaultLang","resolveLabel","param","varCode","draftToPayload","draft","headersOverride","dependencies","DataSourceConfigManager","availableDataSources","availableScopes","setAvailableDataSources","DEFAULT_LANG_CONFIG","scopeIds","activeScopeId","setActiveScopeId","setDraft","isAdding","setIsAdding","busy","setBusy","scopesByCode","useMemo","map","filtered","handleStartAdd","handleStartEdit","config","handleCancelEdit","refreshList","mutate","handleSave","targetScopeId","payload","updated","list","created","handleDelete","emptyStateStyle","labelStyle","selectStyle","iconButtonStyle","FieldRow","inputStyle","h","_","i","smallButtonStyle","d","label","style","flattenLocalized","keepLang","fallbackLang","exact","fb","inputBase","tabBase","valueFor","LocalizedInput","onChange","availableLangs","placeholder","multiline","testIdPrefix","disabled","langs","isMulti","activeLang","setActiveLang","handleChange","isActive","LocalizedField","langConfig","slugifyValue","asString","pickLabelString","OptionsEditor","updateOption","opt","handleLabelChange","nextLabel","currentValue","prevPrimary","nextPrimary","handleValueChange","addOption","removeOption","labelBlock","valueInputBase","okBorder","errorBorder","primary","valueStr","labelInvalid","valueInvalid","VARIABLE_TYPES","TYPES_WITH_OPTIONS","TYPES_WITH_DATASOURCE","jsonToString","parseJsonSafe","raw","trimmed","templateToDraft","VariableTemplateManager","scopeId","setTemplates","formError","setFormError","advancedOpen","setAdvancedOpen","useEffect","cancelled","dataSourceOptions","resetForm","useCallback","startAdd","buildPayload","trimmedExpression","trimmedDataSourceId","vr","cd","st","_code","_name","err","message","displayName","errorStyle","vt","checkboxLabelStyle","AdvancedJsonField","testId","error","ScopeManagerDialog","setAvailableScopes","deleteErrors","setDeleteErrors","openTemplatesFor","setOpenTemplatesFor","refresh","scope","cancelEdit","nextName","prev","handleManageVariables","Fragment","EditorToolbar","onSave","onExport","onImport","updateFormMeta","setView","isDirty","isSaving","canUndo","canRedo","undo","redo","save","addPage","select","showFormTypesDialog","setShowFormTypesDialog","showDataSourcesDialog","setShowDataSourcesDialog","showScopesDialog","setShowScopesDialog","handleAddPage","nextOrder","viewButtons","ToolbarButton","btn","onClick","title","Toolbox","tab","setTab","search","setSearch","availableTemplates","filteredGroups","group","ToolboxTabs","ToolboxItem","VariablesDndTab","baseTab","activeTab","data","attributes","listeners","setNodeRef","isDragging","useDraggable","emptyState","text","needle","matches","codeMatch","nameMatch","resolveLocalized","ToolboxTemplateItem","useCanvasResolve","Canvas","handleEmptyClick","pageSortIds","SortableContext","verticalListSortingStrategy","CanvasPage","resolveCanvas","isSelected","transition","isOver","useSortable","variableCount","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","SUPPORTED_LANGS","FormProperties","totalVariables","sum","rs","r","PropertyField","ScopesSelector","ids","LangConfigSection","containerStyle","selectedScopes","remaining","addScope","removeAt","move","delta","picked","ghostBtn","selectStyleScopes","setForm","confirmRemoveLang","setConfirmRemoveLang","sectionLabel","applyLangConfig","addLang","requestRemoveLang","performRemoveLang","nextLangs","l","nextDefault","nextForm","stripLangFromForm","nextLangConfig","cancelRemove","isEnabled","isDefault","isOnlyOne","removeLang","flattenToPlain","copy","transformOption","transformValidation","rule","transformCondition","transformVariable","transformRoster","transformRepeatConfig","cfg","transformItem","transformPage","readOnly","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","ConditionErrorMessageEditor","operatorToSymbol","op","parts","varRef","sym","val","joined","expression","ConditionsModal","onApply","dialogRef","useRef","previouslyFocused","mode","setMode","handleKey","focusables","el","first","last","handleApply","ModeButton","ManualEditorList","FormulasSummary","update","looksComplex","HighlightedTextarea","SYNTAX_COLORS","FUNCS","tokenize","tokens","end","ident","two","textareaRef","mirrorRef","handleScroll","sharedStyle","empty","DataSourceSelector","dataSourceId","availableConnectors","onConnectorChange","onDependenciesChange","newDepKey","setNewDepKey","entries","selectedConnector","depEntries","handleAddDependency","handleRemoveDependency","handleDepVarChange","OVERRIDE_FIELDS","variableToOverrideKey","field","VariableProperties","updateVariable","setVariableOverride","resetVariableOverride","conditionsModalOpen","setConditionsModalOpen","variableTypes","isLinked","instanceUpdates","hasInstance","k","overrideKey","isOverridden","handleReset","n","allVariables","LinkedTemplateBanner","ReadOnlyLocalizedField","FieldWithReset","FileConfigSection","ImageConfigSection","CheckboxProperty","deps","templateCodeLabel","templateNameLabel","bannerTitle","onReset","resetLabel","inline","button","checked","FILE_MAX_OPTIONS","FILE_MIN_OPTIONS","maxSelectValue","cleaned","uploadSectionStyle","uploadSectionTitleStyle","uploadFieldLabelStyle","uploadInputStyle","RosterProperties","updateRoster","rosterTypeOptions","PropertiesPanel","content","FormEditor","theme","dataSources","initialForm","PreviewComponent","ToolboxComponent","CanvasComponent","Wrapper","setAdapter","load","setAvailableTemplates","resolvedLabels","scopeIdsKey","batches","seen","merged","batch","tpl","loadDs","onChangeRef","isInitialRef","ActualToolbox","ActualCanvas","wrapperWarnedRef","OuterWrapper","React","ToolboxSimple","addRoster","addVariableFromTemplate","GROUPS","handleAddTemplate","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 availableScopes: [],\n availableDataSources: [],\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 setAvailableScopes: (scopes) => {\n set({ availableScopes: scopes })\n },\n\n setAvailableDataSources: (configs) => {\n set({ availableDataSources: configs })\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 formProperties: 'Propriétés du formulaire',\n types: 'Types',\n manageFormTypesTitle: 'Gérer les types de formulaire',\n dataSources: 'Sources',\n manageDataSourcesTitle: 'Gérer les sources de données',\n scopes: 'Scopes',\n manageScopesTitle: 'Gérer les scopes et les variables du référentiel',\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 listradio: 'Liste radio',\n date: 'Date',\n datetime: 'Date et heure',\n time: 'Heure',\n file: 'Fichier',\n image: 'Image',\n photo: 'Photo',\n gps: 'GPS',\n rating: 'Note (étoiles)',\n calculated: 'Calculé',\n hidden: 'Masqué',\n label: 'Étiquette',\n panel: 'Panneau',\n richtext: 'Texte enrichi',\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 fileConfig: 'Configuration fichier',\n fileConfigMax: 'Nombre max de fichiers',\n fileConfigMin: 'Nombre min obligatoire',\n fileConfigAccept: 'Types acceptés',\n fileConfigAcceptPlaceholder: '.pdf,.doc,.xlsx',\n fileConfigUnlimited: 'Illimité',\n imageConfig: 'Configuration image',\n imageConfigMax: 'Nombre max d’images',\n imageConfigMin: 'Nombre min obligatoire',\n imageConfigCamera: 'Autoriser la caméra',\n scopes: 'Scopes (référentiel de variables)',\n scopesHint: 'L’ordre définit la priorité : le premier scope gagne en cas de conflit sur un code.',\n noScopesAvailable: 'Aucun scope disponible — configurez-en un via l’API ou le seed.',\n moveScopeUp: 'Monter',\n moveScopeDown: 'Descendre',\n removeScope: 'Retirer',\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 modalTitle: (count) => `Conditions (${count})`,\n configureButton: (count) =>\n count === 0\n ? 'Configurer les conditions'\n : `Configurer les conditions (${count})`,\n applyButton: 'Appliquer',\n cancelButton: 'Annuler',\n closeButton: 'Fermer',\n formulasSummary: 'Formules configurées',\n noConditions: 'Aucune condition configurée',\n modeVisual: 'Constructeur visuel',\n modeManual: 'Saisie manuelle',\n manualWarning:\n 'Expression complexe — le constructeur visuel ne peut pas la représenter. Restez en mode manuel pour la modifier.',\n manualPlaceholder: 'Ex : show(${AGE} >= 18)',\n manualHelp:\n 'Fonctions : show / hide / setValue / validate / require / readonly / ConditionEval. Variables : ${CODE}.',\n validationExpression: 'Expression de validation',\n validationExpressionPlaceholder: 'Ex : ${CHAMP} != \"\"',\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 scopeManager: {\n dialogAriaLabel: 'Gestion des scopes',\n title: 'Gestion des scopes',\n closeAriaLabel: 'Fermer',\n addScope: '+ Ajouter un scope',\n newScopeName: 'Nom du scope',\n newScopeCodePlaceholder: 'CODE (auto)',\n manageVariables: 'Gérer les variables →',\n confirmDelete: 'Ce scope contient des éléments. Confirmer la suppression ?',\n deleteConfirm: 'Supprimer',\n deleteCancel: 'Annuler',\n noScopes: 'Aucun scope défini. Ajoutez-en un ci-dessous.',\n saveButton: 'Enregistrer',\n cancelButton: 'Annuler',\n deleteError: 'Impossible de supprimer le scope',\n editScopeAria: (code) => `Modifier le scope ${code}`,\n removeScopeAria: (code) => `Supprimer le scope ${code}`,\n manageVariablesAria: (code) => `Gérer les variables du scope ${code}`,\n },\n\n variableTemplateManager: {\n dialogAriaLabel: 'Variables du référentiel',\n title: (scopeName) => `Variables — ${scopeName}`,\n closeAriaLabel: 'Fermer',\n addTemplate: '+ Ajouter une variable',\n code: 'Code',\n name: 'Nom',\n type: 'Type',\n description: 'Description',\n placeholder: 'Texte d’aide',\n required: 'Obligatoire',\n readonly: 'Lecture seule',\n hidden: 'Masquée',\n options: 'Options',\n expression: 'Expression',\n dataSourceId: 'Source de données',\n advancedSection: 'Avancé',\n validationRules: 'Règles de validation',\n conditions: 'Conditions',\n style: 'Style',\n confirmDelete: 'Supprimer cette variable du référentiel ?',\n deleteConfirm: 'Supprimer',\n deleteCancel: 'Annuler',\n noTemplates: 'Aucune variable dans ce scope.',\n saveButton: 'Enregistrer',\n cancelButton: 'Annuler',\n duplicateCodeError: 'Ce code existe déjà dans ce scope.',\n readonlyCode: 'Code (immuable)',\n readonlyName: 'Nom (immuable)',\n editTemplateAria: (code) => `Modifier la variable ${code}`,\n removeTemplateAria: (code) => `Supprimer la variable ${code}`,\n backToScopes: '← Retour aux scopes',\n },\n\n dataSourceManager: {\n dialogAriaLabel: 'Sources de données',\n title: 'Sources de données',\n closeAriaLabel: 'Fermer',\n addButton: '+ Ajouter une source',\n noSources: 'Aucune source dans ce scope. Ajoutez-en une ci-dessous.',\n noScope: 'Le formulaire n’a aucun scope — ajoutez-en un dans les propriétés du formulaire.',\n scopeFilterLabel: 'Scope',\n fieldCode: 'Code',\n fieldName: 'Nom',\n fieldUrl: 'URL',\n fieldMethod: 'Méthode',\n fieldQueryParam: 'Paramètre de recherche',\n fieldValueField: 'Champ valeur',\n fieldLabelField: 'Champ libellé',\n fieldHeaders: 'Headers (chiffrés)',\n headerKeyPlaceholder: 'Clé (ex : Authorization)',\n headerValuePlaceholder: 'Valeur',\n addHeader: '+ Ajouter un header',\n fieldDependencies: 'Dépendances',\n dependencyParamPlaceholder: 'Paramètre URL',\n dependencyVarPlaceholder: 'Code variable',\n addDependency: '+ Ajouter une dépendance',\n save: 'Enregistrer',\n cancel: 'Annuler',\n editAria: (code) => `Modifier la source ${code}`,\n deleteAria: (code) => `Supprimer la source ${code}`,\n scopeBadge: (scopeCode) => `Scope : ${scopeCode}`,\n confirmDelete: (code) => `Supprimer la source \"${code}\" ?`,\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 formProperties: 'Form properties',\n types: 'Types',\n manageFormTypesTitle: 'Manage form types',\n dataSources: 'Sources',\n manageDataSourcesTitle: 'Manage data sources',\n scopes: 'Scopes',\n manageScopesTitle: 'Manage scopes and library variables',\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 listradio: 'List Radio',\n date: 'Date',\n datetime: 'DateTime',\n time: 'Time',\n file: 'File',\n image: 'Image',\n photo: 'Photo',\n gps: 'GPS',\n rating: 'Rating (stars)',\n calculated: 'Calculated',\n hidden: 'Hidden',\n label: 'Label',\n panel: 'Panel',\n richtext: 'Rich Text',\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 fileConfig: 'File configuration',\n fileConfigMax: 'Max number of files',\n fileConfigMin: 'Min number required',\n fileConfigAccept: 'Accepted types',\n fileConfigAcceptPlaceholder: '.pdf,.doc,.xlsx',\n fileConfigUnlimited: 'Unlimited',\n imageConfig: 'Image configuration',\n imageConfigMax: 'Max number of images',\n imageConfigMin: 'Min number required',\n imageConfigCamera: 'Allow camera',\n scopes: 'Scopes (variable library)',\n scopesHint: 'Order defines priority: the first scope wins on code conflicts.',\n noScopesAvailable: 'No scope available — create one via the API or seed.',\n moveScopeUp: 'Move up',\n moveScopeDown: 'Move down',\n removeScope: 'Remove',\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 modalTitle: (count) => `Conditions (${count})`,\n configureButton: (count) =>\n count === 0 ? 'Configure conditions' : `Configure conditions (${count})`,\n applyButton: 'Apply',\n cancelButton: 'Cancel',\n closeButton: 'Close',\n formulasSummary: 'Configured formulas',\n noConditions: 'No condition configured',\n modeVisual: 'Visual builder',\n modeManual: 'Manual input',\n manualWarning:\n 'Complex expression — the visual builder cannot represent it. Stay in manual mode to edit it.',\n manualPlaceholder: 'e.g. show(${AGE} >= 18)',\n manualHelp:\n 'Functions: show / hide / setValue / validate / require / readonly / ConditionEval. Variables: ${CODE}.',\n validationExpression: 'Validation expression',\n validationExpressionPlaceholder: 'e.g. ${FIELD} != \"\"',\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 scopeManager: {\n dialogAriaLabel: 'Scope management',\n title: 'Scope management',\n closeAriaLabel: 'Close',\n addScope: '+ Add a scope',\n newScopeName: 'Scope name',\n newScopeCodePlaceholder: 'CODE (auto)',\n manageVariables: 'Manage variables →',\n confirmDelete: 'This scope is in use. Confirm deletion?',\n deleteConfirm: 'Delete',\n deleteCancel: 'Cancel',\n noScopes: 'No scope defined yet. Add one below.',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteError: 'Cannot delete scope',\n editScopeAria: (code) => `Edit scope ${code}`,\n removeScopeAria: (code) => `Delete scope ${code}`,\n manageVariablesAria: (code) => `Manage variables in scope ${code}`,\n },\n\n variableTemplateManager: {\n dialogAriaLabel: 'Library variables',\n title: (scopeName) => `Variables — ${scopeName}`,\n closeAriaLabel: 'Close',\n addTemplate: '+ Add variable',\n code: 'Code',\n name: 'Name',\n type: 'Type',\n description: 'Description',\n placeholder: 'Help text',\n required: 'Required',\n readonly: 'Read-only',\n hidden: 'Hidden',\n options: 'Options',\n expression: 'Expression',\n dataSourceId: 'Data source',\n advancedSection: 'Advanced',\n validationRules: 'Validation rules',\n conditions: 'Conditions',\n style: 'Style',\n confirmDelete: 'Delete this library variable?',\n deleteConfirm: 'Delete',\n deleteCancel: 'Cancel',\n noTemplates: 'No variable in this scope.',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n duplicateCodeError: 'This code already exists in the scope.',\n readonlyCode: 'Code (immutable)',\n readonlyName: 'Name (immutable)',\n editTemplateAria: (code) => `Edit variable ${code}`,\n removeTemplateAria: (code) => `Delete variable ${code}`,\n backToScopes: '← Back to scopes',\n },\n\n dataSourceManager: {\n dialogAriaLabel: 'Data sources',\n title: 'Data sources',\n closeAriaLabel: 'Close',\n addButton: '+ Add a source',\n noSources: 'No source in this scope yet. Add one below.',\n noScope: 'This form has no scope — link one in the form properties.',\n scopeFilterLabel: 'Scope',\n fieldCode: 'Code',\n fieldName: 'Name',\n fieldUrl: 'URL',\n fieldMethod: 'Method',\n fieldQueryParam: 'Search param',\n fieldValueField: 'Value field',\n fieldLabelField: 'Label field',\n fieldHeaders: 'Headers (encrypted)',\n headerKeyPlaceholder: 'Key (e.g. Authorization)',\n headerValuePlaceholder: 'Value',\n addHeader: '+ Add header',\n fieldDependencies: 'Dependencies',\n dependencyParamPlaceholder: 'URL param',\n dependencyVarPlaceholder: 'Variable code',\n addDependency: '+ Add dependency',\n save: 'Save',\n cancel: 'Cancel',\n editAria: (code) => `Edit source ${code}`,\n deleteAria: (code) => `Delete source ${code}`,\n scopeBadge: (scopeCode) => `Scope: ${scopeCode}`,\n confirmDelete: (code) => `Delete source \"${code}\"?`,\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 * DataSourceConfigManager — admin CRUD for IDataSourceConfig within\n * the scope(s) linked to the current form.\n *\n * Renders a native React modal (same pattern as FormTypesDialog) with:\n * - A scope filter (visible only when the form has more than one scope)\n * - The list of `availableDataSources` filtered by selected scope\n * - An inline add/edit form for code, name, url, method, queryParam,\n * value/label fields, headers (key/value rows), and dependencies\n * (urlParam → variable code rows)\n *\n * Persistence goes through the adapter's CRUD methods; the store is\n * refreshed by mutating `availableDataSources` locally (optimistic — the\n * server is the source of truth). FormEditor's effect will re-load on\n * the next scope change.\n */\n\nimport { useMemo, useState } from 'react'\nimport type { IDataSourceConfig, LocalizedString } from '@msbci/form-core'\nimport { resolveLabel, DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\n\nexport interface DataSourceConfigManagerProps {\n open: boolean\n onClose: () => void\n}\n\ninterface DraftEntry {\n code: string\n name: string\n url: string\n method: 'GET' | 'POST'\n queryParam: string\n valueField: string\n labelField: string\n headers: Array<{ key: string; value: string }>\n dependencies: Array<{ param: string; varCode: string }>\n}\n\nfunction emptyDraft(): DraftEntry {\n return {\n code: '',\n name: '',\n url: '',\n method: 'GET',\n queryParam: 'q',\n valueField: '',\n labelField: '',\n headers: [],\n dependencies: [],\n }\n}\n\nfunction configToDraft(c: IDataSourceConfig, defaultLang: string): DraftEntry {\n return {\n code: c.code,\n name: typeof c.name === 'string' ? c.name : resolveLabel(c.name, defaultLang, defaultLang),\n url: c.url,\n method: c.method,\n queryParam: c.queryParam ?? 'q',\n valueField: c.valueField,\n labelField: c.labelField,\n headers: Object.entries(c.headersOverride ?? {}).map(([key, value]) => ({ key, value })),\n dependencies: Object.entries(c.dependencies ?? {}).map(([param, varCode]) => ({ param, varCode })),\n }\n}\n\nfunction draftToPayload(draft: DraftEntry): {\n code: string\n name: LocalizedString\n url: string\n method: 'GET' | 'POST'\n queryParam: string\n valueField: string\n labelField: string\n headersOverride?: Record<string, string>\n dependencies?: Record<string, string>\n} {\n const headersOverride: Record<string, string> = {}\n for (const { key, value } of draft.headers) {\n if (key.trim()) headersOverride[key.trim()] = value\n }\n const dependencies: Record<string, string> = {}\n for (const { param, varCode } of draft.dependencies) {\n if (param.trim() && varCode.trim()) dependencies[param.trim()] = varCode.trim()\n }\n return {\n code: draft.code.trim(),\n name: draft.name,\n url: draft.url.trim(),\n method: draft.method,\n queryParam: draft.queryParam.trim() || 'q',\n valueField: draft.valueField.trim(),\n labelField: draft.labelField.trim(),\n ...(Object.keys(headersOverride).length > 0 ? { headersOverride } : {}),\n ...(Object.keys(dependencies).length > 0 ? { dependencies } : {}),\n }\n}\n\nexport function DataSourceConfigManager({ open, onClose }: DataSourceConfigManagerProps) {\n const labels = useLabels()\n const { form, availableDataSources, availableScopes, adapter, setAvailableDataSources } =\n useEditorStore()\n\n const defaultLang =\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n const scopeIds = form.scopeIds ?? []\n const [activeScopeId, setActiveScopeId] = useState<string | undefined>(scopeIds[0])\n const [editingId, setEditingId] = useState<string | null>(null)\n const [draft, setDraft] = useState<DraftEntry>(emptyDraft())\n const [isAdding, setIsAdding] = useState(false)\n const [busy, setBusy] = useState(false)\n\n const scopesByCode = useMemo(() => {\n const map = new Map<string, string>() // scopeId → code (for badge display)\n for (const s of availableScopes) map.set(s.id, s.code)\n return map\n }, [availableScopes])\n\n const filtered = useMemo(() => {\n if (!activeScopeId) return availableDataSources\n return availableDataSources.filter((c) => c.scopeId === activeScopeId)\n }, [availableDataSources, activeScopeId])\n\n if (!open) return null\n\n const handleStartAdd = () => {\n setIsAdding(true)\n setEditingId(null)\n setDraft(emptyDraft())\n }\n\n const handleStartEdit = (config: IDataSourceConfig) => {\n setIsAdding(false)\n setEditingId(config.id)\n setDraft(configToDraft(config, defaultLang))\n // Switch the filter to the source's scope so the user keeps context.\n if (config.scopeId !== activeScopeId) setActiveScopeId(config.scopeId)\n }\n\n const handleCancelEdit = () => {\n setEditingId(null)\n setIsAdding(false)\n setDraft(emptyDraft())\n }\n\n const refreshList = (mutate: (list: IDataSourceConfig[]) => IDataSourceConfig[]) => {\n setAvailableDataSources(mutate(availableDataSources))\n }\n\n const handleSave = async () => {\n if (!adapter) return\n const targetScopeId = activeScopeId ?? scopeIds[0]\n if (!targetScopeId) return\n\n setBusy(true)\n try {\n const payload = draftToPayload(draft)\n if (editingId && adapter.updateDataSource) {\n const updated = await adapter.updateDataSource(editingId, payload)\n refreshList((list) => list.map((c) => (c.id === editingId ? updated : c)))\n } else if (!editingId && adapter.createDataSource) {\n const created = await adapter.createDataSource(targetScopeId, payload)\n refreshList((list) => [...list, created])\n }\n handleCancelEdit()\n } finally {\n setBusy(false)\n }\n }\n\n const handleDelete = async (config: IDataSourceConfig) => {\n if (!adapter?.deleteDataSource) return\n if (typeof window !== 'undefined' && !window.confirm(labels.dataSourceManager.confirmDelete(config.code))) {\n return\n }\n setBusy(true)\n try {\n await adapter.deleteDataSource(config.id)\n refreshList((list) => list.filter((c) => c.id !== config.id))\n if (editingId === config.id) handleCancelEdit()\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.dataSourceManager.dialogAriaLabel}\n data-testid=\"datasource-manager-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: '40rem',\n width: '100%',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '14px 16px',\n borderBottom: '1px solid #e2e8f0',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2 style={{ margin: 0, fontSize: '16px', fontWeight: 600, color: '#0f172a' }}>\n {labels.dataSourceManager.title}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.dataSourceManager.closeAriaLabel}\n style={{\n border: 'none',\n background: 'transparent',\n fontSize: '20px',\n cursor: 'pointer',\n color: '#64748b',\n }}\n >\n ✕\n </button>\n </div>\n\n {/* Body */}\n <div style={{ flex: 1, overflowY: 'auto', padding: '12px 16px' }}>\n {scopeIds.length === 0 && (\n <div data-testid=\"datasource-manager-no-scope\" style={emptyStateStyle}>\n {labels.dataSourceManager.noScope}\n </div>\n )}\n\n {scopeIds.length > 1 && (\n <div style={{ marginBottom: '12px' }}>\n <label style={labelStyle}>{labels.dataSourceManager.scopeFilterLabel}</label>\n <select\n data-testid=\"datasource-manager-scope-filter\"\n value={activeScopeId ?? ''}\n onChange={(e) => setActiveScopeId(e.target.value || undefined)}\n style={selectStyle}\n >\n {scopeIds.map((id) => (\n <option key={id} value={id}>\n {scopesByCode.get(id) ?? id}\n </option>\n ))}\n </select>\n </div>\n )}\n\n {scopeIds.length > 0 && filtered.length === 0 && !isAdding && (\n <div data-testid=\"datasource-manager-empty\" style={emptyStateStyle}>\n {labels.dataSourceManager.noSources}\n </div>\n )}\n\n {/* List */}\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {filtered.map((config) => (\n <li\n key={config.id}\n data-testid={`datasource-item-${config.code}`}\n style={{\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n padding: '8px 10px',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n backgroundColor: editingId === config.id ? '#f0fdf4' : '#fff',\n }}\n >\n <span style={{ fontSize: '13px', fontWeight: 600, color: '#0f172a' }}>{config.code}</span>\n <span style={{ fontSize: '11px', color: '#64748b' }}>{config.method}</span>\n <span style={{ flex: 1, fontSize: '11px', color: '#475569', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {config.url}\n </span>\n {scopesByCode.has(config.scopeId) && (\n <span style={{ fontSize: '10px', color: '#0891b2', backgroundColor: '#ecfeff', padding: '2px 6px', borderRadius: '4px' }}>\n {labels.dataSourceManager.scopeBadge(scopesByCode.get(config.scopeId)!)}\n </span>\n )}\n <button\n type=\"button\"\n data-testid={`datasource-edit-${config.code}`}\n aria-label={labels.dataSourceManager.editAria(config.code)}\n onClick={() => handleStartEdit(config)}\n disabled={busy}\n style={iconButtonStyle}\n >\n ✏\n </button>\n <button\n type=\"button\"\n data-testid={`datasource-delete-${config.code}`}\n aria-label={labels.dataSourceManager.deleteAria(config.code)}\n onClick={() => handleDelete(config)}\n disabled={busy}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n </li>\n ))}\n </ul>\n\n {/* Add CTA */}\n {scopeIds.length > 0 && !isAdding && !editingId && (\n <button\n type=\"button\"\n data-testid=\"datasource-add-button\"\n onClick={handleStartAdd}\n style={{\n marginTop: '12px',\n padding: '6px 12px',\n border: '1px solid #2563eb',\n borderRadius: '6px',\n color: '#2563eb',\n backgroundColor: '#fff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.dataSourceManager.addButton}\n </button>\n )}\n\n {/* Inline form */}\n {(isAdding || editingId) && (\n <form\n data-testid=\"datasource-form\"\n onSubmit={(e) => {\n e.preventDefault()\n void handleSave()\n }}\n style={{\n marginTop: '12px',\n padding: '12px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#f8fafc',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <FieldRow label={labels.dataSourceManager.fieldCode}>\n <input\n required\n data-testid=\"datasource-form-code\"\n value={draft.code}\n onChange={(e) => setDraft({ ...draft, code: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldName}>\n <input\n data-testid=\"datasource-form-name\"\n value={draft.name}\n onChange={(e) => setDraft({ ...draft, name: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldUrl}>\n <input\n required\n type=\"url\"\n data-testid=\"datasource-form-url\"\n value={draft.url}\n onChange={(e) => setDraft({ ...draft, url: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <div style={{ display: 'flex', gap: '8px' }}>\n <FieldRow label={labels.dataSourceManager.fieldMethod} style={{ flex: 1 }}>\n <select\n data-testid=\"datasource-form-method\"\n value={draft.method}\n onChange={(e) => setDraft({ ...draft, method: e.target.value as 'GET' | 'POST' })}\n style={selectStyle}\n >\n <option value=\"GET\">GET</option>\n <option value=\"POST\">POST</option>\n </select>\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldQueryParam} style={{ flex: 1 }}>\n <input\n data-testid=\"datasource-form-queryparam\"\n value={draft.queryParam}\n onChange={(e) => setDraft({ ...draft, queryParam: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <FieldRow label={labels.dataSourceManager.fieldValueField} style={{ flex: 1 }}>\n <input\n required\n data-testid=\"datasource-form-valuefield\"\n value={draft.valueField}\n onChange={(e) => setDraft({ ...draft, valueField: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n <FieldRow label={labels.dataSourceManager.fieldLabelField} style={{ flex: 1 }}>\n <input\n required\n data-testid=\"datasource-form-labelfield\"\n value={draft.labelField}\n onChange={(e) => setDraft({ ...draft, labelField: e.target.value })}\n style={inputStyle}\n />\n </FieldRow>\n </div>\n\n {/* Headers */}\n <div>\n <label style={labelStyle}>{labels.dataSourceManager.fieldHeaders}</label>\n {draft.headers.map((h, idx) => (\n <div key={idx} style={{ display: 'flex', gap: '4px', marginBottom: '4px' }}>\n <input\n placeholder={labels.dataSourceManager.headerKeyPlaceholder}\n value={h.key}\n onChange={(e) => {\n const next = [...draft.headers]\n next[idx] = { ...next[idx]!, key: e.target.value }\n setDraft({ ...draft, headers: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <input\n type=\"password\"\n placeholder={labels.dataSourceManager.headerValuePlaceholder}\n value={h.value}\n onChange={(e) => {\n const next = [...draft.headers]\n next[idx] = { ...next[idx]!, value: e.target.value }\n setDraft({ ...draft, headers: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <button\n type=\"button\"\n onClick={() => setDraft({ ...draft, headers: draft.headers.filter((_, i) => i !== idx) })}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n data-testid=\"datasource-form-add-header\"\n onClick={() => setDraft({ ...draft, headers: [...draft.headers, { key: '', value: '' }] })}\n style={smallButtonStyle}\n >\n {labels.dataSourceManager.addHeader}\n </button>\n </div>\n\n {/* Dependencies */}\n <div>\n <label style={labelStyle}>{labels.dataSourceManager.fieldDependencies}</label>\n {draft.dependencies.map((d, idx) => (\n <div key={idx} style={{ display: 'flex', gap: '4px', marginBottom: '4px' }}>\n <input\n placeholder={labels.dataSourceManager.dependencyParamPlaceholder}\n value={d.param}\n onChange={(e) => {\n const next = [...draft.dependencies]\n next[idx] = { ...next[idx]!, param: e.target.value }\n setDraft({ ...draft, dependencies: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <span style={{ alignSelf: 'center', color: '#94a3b8' }}>→</span>\n <input\n placeholder={labels.dataSourceManager.dependencyVarPlaceholder}\n value={d.varCode}\n onChange={(e) => {\n const next = [...draft.dependencies]\n next[idx] = { ...next[idx]!, varCode: e.target.value }\n setDraft({ ...draft, dependencies: next })\n }}\n style={{ ...inputStyle, flex: 1 }}\n />\n <button\n type=\"button\"\n onClick={() => setDraft({ ...draft, dependencies: draft.dependencies.filter((_, i) => i !== idx) })}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n </div>\n ))}\n <button\n type=\"button\"\n data-testid=\"datasource-form-add-dependency\"\n onClick={() => setDraft({ ...draft, dependencies: [...draft.dependencies, { param: '', varCode: '' }] })}\n style={smallButtonStyle}\n >\n {labels.dataSourceManager.addDependency}\n </button>\n </div>\n\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"datasource-form-cancel\"\n onClick={handleCancelEdit}\n disabled={busy}\n style={smallButtonStyle}\n >\n {labels.dataSourceManager.cancel}\n </button>\n <button\n type=\"submit\"\n data-testid=\"datasource-form-save\"\n disabled={busy}\n style={{ ...smallButtonStyle, backgroundColor: '#2563eb', color: '#fff', border: 'none' }}\n >\n {labels.dataSourceManager.save}\n </button>\n </div>\n </form>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction FieldRow({\n label,\n children,\n style,\n}: {\n label: string\n children: React.ReactNode\n style?: React.CSSProperties\n}) {\n return (\n <div style={style}>\n <label style={labelStyle}>{label}</label>\n {children}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n display: 'block',\n fontSize: '11px',\n fontWeight: 500,\n color: '#475569',\n marginBottom: '2px',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n padding: '4px 6px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#0f172a',\n outline: 'none',\n backgroundColor: '#fff',\n}\n\nconst selectStyle: React.CSSProperties = {\n ...inputStyle,\n}\n\nconst iconButtonStyle: React.CSSProperties = {\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#64748b',\n padding: '2px 4px',\n}\n\nconst smallButtonStyle: React.CSSProperties = {\n padding: '4px 10px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#334155',\n backgroundColor: '#fff',\n cursor: 'pointer',\n}\n\nconst emptyStateStyle: React.CSSProperties = {\n fontSize: '12px',\n color: '#94a3b8',\n textAlign: 'center',\n padding: '16px 0',\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","/**\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","/**\n * VariableTemplateManager — admin CRUD for {@link IVariableTemplate}\n * entries within a single scope.\n *\n * Flow:\n * 1. Mount: re-fetch `adapter.loadTemplates(scopeId)` to get an\n * authoritative list (the store may only carry templates of scopes\n * attached to the current form).\n * 2. CRUD via adapter; optimistic updates on the local list, no refetch.\n *\n * Identity:\n * - `code` and `name` are immutable after creation (server enforces).\n * The edit form shows them disabled, with a \"(immuable)\" badge.\n *\n * Conditional fields:\n * - `options` editor surfaces only for select/multiselect/radio/checkbox/listradio.\n * - `expression` only for `calculated`.\n * - `dataSourceId` only for select/multiselect.\n *\n * Advanced section (collapsed by default): validationRules, conditions, style.\n * These are surfaced as JSON textareas so admins can paste configurations\n * already produced by the visual condition builder if needed.\n */\n\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport {\n DEFAULT_LANG_CONFIG,\n resolveLabel,\n} from '@msbci/form-core'\nimport type {\n IVariableOption,\n IVariableTemplate,\n LocalizedString,\n VariableType,\n} from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { LocalizedField } from '../properties/LocalizedInput'\nimport { OptionsEditor } from '../properties/OptionsEditor'\n\nexport interface VariableTemplateManagerProps {\n open: boolean\n onClose: () => void\n scopeId: string\n scopeName: string\n}\n\nconst VARIABLE_TYPES: VariableType[] = [\n 'text', 'textarea', 'number', 'date', 'datetime', 'time',\n 'select', 'multiselect', 'checkbox', 'radio', 'listradio',\n 'file', 'image', 'photo', 'gps', 'rating',\n 'email', 'calculated', 'hidden', 'label', 'panel', 'richtext',\n]\n\nconst TYPES_WITH_OPTIONS: VariableType[] = ['select', 'multiselect', 'radio', 'checkbox', 'listradio']\nconst TYPES_WITH_DATASOURCE: VariableType[] = ['select', 'multiselect']\n\ninterface DraftEntry {\n code: string\n name: LocalizedString\n variableType: VariableType\n description: LocalizedString | undefined\n placeholder: LocalizedString | undefined\n isRequired: boolean\n isReadonly: boolean\n isHidden: boolean\n options: IVariableOption[]\n expression: string\n dataSourceId: string\n validationRulesJson: string\n conditionsJson: string\n styleJson: string\n}\n\nfunction emptyDraft(): DraftEntry {\n return {\n code: '',\n name: '',\n variableType: 'text',\n description: undefined,\n placeholder: undefined,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n options: [],\n expression: '',\n dataSourceId: '',\n validationRulesJson: '',\n conditionsJson: '',\n styleJson: '',\n }\n}\n\nfunction jsonToString(value: unknown): string {\n if (value === undefined || value === null) return ''\n try {\n return JSON.stringify(value, null, 2)\n } catch {\n return ''\n }\n}\n\nfunction parseJsonSafe<T>(raw: string): { ok: boolean; value: T | undefined } {\n const trimmed = raw.trim()\n if (!trimmed) return { ok: true, value: undefined }\n try {\n return { ok: true, value: JSON.parse(trimmed) as T }\n } catch {\n return { ok: false, value: undefined }\n }\n}\n\nfunction templateToDraft(t: IVariableTemplate): DraftEntry {\n return {\n code: t.code,\n name: t.name,\n variableType: t.variableType,\n description: t.description,\n placeholder: t.placeholder,\n isRequired: t.isRequired ?? false,\n isReadonly: t.isReadonly ?? false,\n isHidden: t.isHidden ?? false,\n options: t.options ?? [],\n expression: t.expression ?? '',\n dataSourceId: t.dataSourceId ?? '',\n validationRulesJson: jsonToString(t.validationRules),\n conditionsJson: jsonToString(t.conditions),\n styleJson: jsonToString(t.style),\n }\n}\n\nexport function VariableTemplateManager({\n open,\n onClose,\n scopeId,\n scopeName,\n}: VariableTemplateManagerProps) {\n const labels = useLabels()\n const adapter = useEditorStore((s) => s.adapter)\n const availableDataSources = useEditorStore((s) => s.availableDataSources)\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n const [templates, setTemplates] = useState<IVariableTemplate[]>([])\n const [editingId, setEditingId] = useState<string | null>(null)\n const [isAdding, setIsAdding] = useState(false)\n const [draft, setDraft] = useState<DraftEntry>(emptyDraft())\n const [confirmDeleteId, setConfirmDeleteId] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n const [formError, setFormError] = useState<string | null>(null)\n const [advancedOpen, setAdvancedOpen] = useState(false)\n\n // Authoritative load on mount + when scopeId changes (the dialog stays\n // mounted across scope switches via the parent ScopeManagerDialog).\n useEffect(() => {\n if (!open) return\n if (!adapter?.loadTemplates) {\n setTemplates([])\n return\n }\n let cancelled = false\n adapter.loadTemplates(scopeId)\n .then((list) => {\n if (!cancelled) setTemplates(list)\n })\n .catch(() => {\n if (!cancelled) setTemplates([])\n })\n return () => {\n cancelled = true\n }\n }, [open, scopeId, adapter])\n\n // Resolved data-source options for the [select, multiselect] dropdown.\n // We pull from the store's `availableDataSources`; the data source\n // manager is responsible for keeping it up to date.\n const dataSourceOptions = useMemo(() => {\n return availableDataSources.map((c) => ({\n id: c.code,\n label: typeof c.name === 'string' ? c.name : resolveLabel(c.name, defaultLang, defaultLang),\n }))\n }, [availableDataSources, defaultLang])\n\n const resetForm = useCallback(() => {\n setEditingId(null)\n setIsAdding(false)\n setDraft(emptyDraft())\n setFormError(null)\n setAdvancedOpen(false)\n }, [])\n\n if (!open) return null\n\n const startAdd = () => {\n setIsAdding(true)\n setEditingId(null)\n setDraft(emptyDraft())\n setFormError(null)\n setAdvancedOpen(false)\n }\n\n const startEdit = (t: IVariableTemplate) => {\n setIsAdding(false)\n setEditingId(t.id)\n setDraft(templateToDraft(t))\n setFormError(null)\n setAdvancedOpen(false)\n }\n\n const buildPayload = (): {\n code: string\n name: LocalizedString\n variableType: VariableType\n description?: LocalizedString\n placeholder?: LocalizedString\n isRequired?: boolean\n isReadonly?: boolean\n isHidden?: boolean\n options?: IVariableOption[]\n expression?: string\n dataSourceId?: string\n validationRules?: unknown\n conditions?: unknown\n style?: unknown\n } | { error: string } => {\n const code = draft.code.trim()\n if (!code) return { error: 'code' }\n\n const trimmedExpression = draft.expression.trim()\n const trimmedDataSourceId = draft.dataSourceId.trim()\n\n // Validate / parse JSON-only advanced fields up-front so the admin\n // sees the failure before the server roundtrip.\n const vr = parseJsonSafe<unknown[]>(draft.validationRulesJson)\n if (!vr.ok) return { error: 'validationRules' }\n const cd = parseJsonSafe<unknown[]>(draft.conditionsJson)\n if (!cd.ok) return { error: 'conditions' }\n const st = parseJsonSafe<unknown>(draft.styleJson)\n if (!st.ok) return { error: 'style' }\n\n return {\n code,\n name: draft.name,\n variableType: draft.variableType,\n description: draft.description,\n placeholder: draft.placeholder,\n isRequired: draft.isRequired,\n isReadonly: draft.isReadonly,\n isHidden: draft.isHidden,\n ...(TYPES_WITH_OPTIONS.includes(draft.variableType) ? { options: draft.options } : {}),\n ...(draft.variableType === 'calculated' && trimmedExpression ? { expression: trimmedExpression } : {}),\n ...(TYPES_WITH_DATASOURCE.includes(draft.variableType) && trimmedDataSourceId\n ? { dataSourceId: trimmedDataSourceId }\n : {}),\n ...(vr.value !== undefined ? { validationRules: vr.value } : {}),\n ...(cd.value !== undefined ? { conditions: cd.value } : {}),\n ...(st.value !== undefined ? { style: st.value } : {}),\n }\n }\n\n const handleSave = async () => {\n if (!adapter) return\n const result = buildPayload()\n if ('error' in result) {\n setFormError(result.error)\n return\n }\n setBusy(true)\n setFormError(null)\n try {\n if (editingId && adapter.updateTemplate) {\n // Strip immutable fields from the patch sent to the server.\n const { code: _code, name: _name, ...patch } = result\n void _code\n void _name\n const updated = await adapter.updateTemplate(editingId, patch as Parameters<NonNullable<typeof adapter.updateTemplate>>[1])\n setTemplates((list) => list.map((t) => (t.id === editingId ? updated : t)))\n resetForm()\n } else if (!editingId && adapter.createTemplate) {\n // Duplicate-code local guard — also enforced by the server (400).\n if (templates.some((t) => t.code === result.code)) {\n setFormError('duplicate-code')\n return\n }\n const created = await adapter.createTemplate(scopeId, result as Parameters<NonNullable<typeof adapter.createTemplate>>[1])\n setTemplates((list) => [...list, created])\n resetForm()\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n // Common 400 from the server when the code clashes.\n if (/already exists/i.test(message)) {\n setFormError('duplicate-code')\n } else {\n setFormError(message)\n }\n } finally {\n setBusy(false)\n }\n }\n\n const handleDelete = async () => {\n if (!confirmDeleteId || !adapter?.deleteTemplate) return\n const id = confirmDeleteId\n setBusy(true)\n try {\n await adapter.deleteTemplate(id)\n setTemplates((list) => list.filter((t) => t.id !== id))\n if (editingId === id) resetForm()\n setConfirmDeleteId(null)\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.variableTemplateManager.dialogAriaLabel}\n data-testid=\"template-manager-dialog\"\n onClick={onClose}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 60,\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: '44rem',\n width: '100%',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column',\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: '14px 16px',\n borderBottom: '1px solid #e2e8f0',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <button\n type=\"button\"\n onClick={onClose}\n data-testid=\"template-manager-back\"\n style={{\n padding: '4px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n background: '#fff',\n fontSize: '12px',\n cursor: 'pointer',\n color: '#334155',\n }}\n >\n {labels.variableTemplateManager.backToScopes}\n </button>\n <h3 style={{ flex: 1, fontSize: '16px', fontWeight: 600, margin: 0 }}>\n {labels.variableTemplateManager.title(scopeName)}\n </h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.variableTemplateManager.closeAriaLabel}\n data-testid=\"template-manager-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={{ flex: 1, overflowY: 'auto', padding: '12px 16px' }}>\n {templates.length === 0 && !isAdding && (\n <div data-testid=\"template-manager-empty\" style={{ fontSize: '13px', color: '#94a3b8', padding: '12px 0' }}>\n {labels.variableTemplateManager.noTemplates}\n </div>\n )}\n\n <ul style={{ listStyle: 'none', padding: 0, margin: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {templates.map((t) => {\n const displayName = typeof t.name === 'string'\n ? t.name\n : resolveLabel(t.name, defaultLang, defaultLang)\n const awaitingConfirm = confirmDeleteId === t.id\n return (\n <li\n key={t.id}\n data-testid={`template-row-${t.code}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n backgroundColor: editingId === t.id ? '#f0fdf4' : '#fff',\n flexWrap: 'wrap',\n }}\n >\n <span style={{ fontSize: '13px', fontWeight: 600, color: '#0f172a' }}>{t.code}</span>\n <span style={{ fontSize: '12px', color: '#475569', flex: 1 }}>{displayName}</span>\n <span style={{ fontSize: '11px', color: '#64748b', fontFamily: 'monospace' }}>{t.variableType}</span>\n <button\n type=\"button\"\n data-testid={`template-edit-${t.code}`}\n aria-label={labels.variableTemplateManager.editTemplateAria(t.code)}\n onClick={() => startEdit(t)}\n disabled={busy}\n style={iconButtonStyle}\n >\n ✏\n </button>\n <button\n type=\"button\"\n data-testid={`template-remove-${t.code}`}\n aria-label={labels.variableTemplateManager.removeTemplateAria(t.code)}\n onClick={() => setConfirmDeleteId(t.id)}\n disabled={busy}\n style={{ ...iconButtonStyle, color: '#ef4444' }}\n >\n ×\n </button>\n\n {awaitingConfirm && (\n <div\n data-testid={`template-confirm-${t.code}`}\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 }}>{labels.variableTemplateManager.confirmDelete}</span>\n <button\n type=\"button\"\n data-testid={`template-confirm-yes-${t.code}`}\n onClick={handleDelete}\n disabled={busy}\n style={{ ...iconButtonStyle, backgroundColor: '#ef4444', color: '#fff', border: 'none', padding: '4px 8px' }}\n >\n {labels.variableTemplateManager.deleteConfirm}\n </button>\n <button\n type=\"button\"\n data-testid={`template-confirm-no-${t.code}`}\n onClick={() => setConfirmDeleteId(null)}\n disabled={busy}\n style={{ ...iconButtonStyle, padding: '4px 8px' }}\n >\n {labels.variableTemplateManager.deleteCancel}\n </button>\n </div>\n )}\n </li>\n )\n })}\n </ul>\n\n {!isAdding && !editingId && (\n <button\n type=\"button\"\n data-testid=\"template-add-button\"\n onClick={startAdd}\n disabled={busy}\n style={{\n marginTop: '12px',\n padding: '6px 12px',\n border: '1px solid #2563eb',\n borderRadius: '6px',\n color: '#2563eb',\n backgroundColor: '#fff',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.variableTemplateManager.addTemplate}\n </button>\n )}\n\n {(isAdding || editingId) && (\n <form\n data-testid=\"template-form\"\n onSubmit={(e) => {\n e.preventDefault()\n void handleSave()\n }}\n style={{\n marginTop: '12px',\n padding: '12px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#f8fafc',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {/* code (immutable on edit) */}\n <div>\n <label style={labelStyle}>\n {editingId ? labels.variableTemplateManager.readonlyCode : labels.variableTemplateManager.code}\n </label>\n <input\n type=\"text\"\n data-testid=\"template-form-code\"\n value={draft.code}\n onChange={(e) => setDraft({ ...draft, code: e.target.value })}\n readOnly={!!editingId}\n disabled={!!editingId || busy}\n required\n style={{ ...inputStyle, fontFamily: 'monospace' }}\n />\n {formError === 'duplicate-code' && (\n <div data-testid=\"template-error-duplicate-code\" style={errorStyle}>\n {labels.variableTemplateManager.duplicateCodeError}\n </div>\n )}\n </div>\n\n {/* name (LocalizedField, immutable on edit) */}\n {editingId ? (\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.readonlyName}</label>\n <div\n data-testid=\"template-form-name-readonly\"\n style={{ ...inputStyle, backgroundColor: '#f1f5f9', color: '#475569' }}\n >\n {typeof draft.name === 'string' ? draft.name : resolveLabel(draft.name, defaultLang, defaultLang)}\n </div>\n </div>\n ) : (\n <LocalizedField\n label={labels.variableTemplateManager.name}\n value={draft.name}\n onChange={(next) => setDraft({ ...draft, name: next })}\n testIdPrefix=\"template-form-name\"\n disabled={busy}\n />\n )}\n\n {/* variableType */}\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.type}</label>\n <select\n data-testid=\"template-form-type\"\n value={draft.variableType}\n onChange={(e) => setDraft({ ...draft, variableType: e.target.value as VariableType })}\n disabled={busy}\n style={inputStyle}\n >\n {VARIABLE_TYPES.map((vt) => (\n <option key={vt} value={vt}>{vt}</option>\n ))}\n </select>\n </div>\n\n {/* description (LocalizedField) */}\n <LocalizedField\n label={labels.variableTemplateManager.description}\n value={draft.description}\n onChange={(next) => setDraft({ ...draft, description: next })}\n testIdPrefix=\"template-form-description\"\n disabled={busy}\n />\n\n {/* placeholder (LocalizedField) */}\n <LocalizedField\n label={labels.variableTemplateManager.placeholder}\n value={draft.placeholder}\n onChange={(next) => setDraft({ ...draft, placeholder: next })}\n testIdPrefix=\"template-form-placeholder\"\n disabled={busy}\n />\n\n {/* flags */}\n <div style={{ display: 'flex', gap: '12px', flexWrap: 'wrap' }}>\n <label style={checkboxLabelStyle}>\n <input\n type=\"checkbox\"\n data-testid=\"template-form-required\"\n checked={draft.isRequired}\n onChange={(e) => setDraft({ ...draft, isRequired: e.target.checked })}\n disabled={busy}\n />\n {labels.variableTemplateManager.required}\n </label>\n <label style={checkboxLabelStyle}>\n <input\n type=\"checkbox\"\n data-testid=\"template-form-readonly\"\n checked={draft.isReadonly}\n onChange={(e) => setDraft({ ...draft, isReadonly: e.target.checked })}\n disabled={busy}\n />\n {labels.variableTemplateManager.readonly}\n </label>\n <label style={checkboxLabelStyle}>\n <input\n type=\"checkbox\"\n data-testid=\"template-form-hidden\"\n checked={draft.isHidden}\n onChange={(e) => setDraft({ ...draft, isHidden: e.target.checked })}\n disabled={busy}\n />\n {labels.variableTemplateManager.hidden}\n </label>\n </div>\n\n {/* options (conditional) */}\n {TYPES_WITH_OPTIONS.includes(draft.variableType) && (\n <div data-testid=\"template-form-options\">\n <label style={labelStyle}>{labels.variableTemplateManager.options}</label>\n <OptionsEditor\n options={draft.options}\n onChange={(next) => setDraft({ ...draft, options: next })}\n disabled={busy}\n />\n </div>\n )}\n\n {/* expression (conditional, calculated only) */}\n {draft.variableType === 'calculated' && (\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.expression}</label>\n <input\n type=\"text\"\n data-testid=\"template-form-expression\"\n value={draft.expression}\n onChange={(e) => setDraft({ ...draft, expression: e.target.value })}\n disabled={busy}\n style={{ ...inputStyle, fontFamily: 'monospace' }}\n />\n </div>\n )}\n\n {/* dataSourceId (conditional, select/multiselect) */}\n {TYPES_WITH_DATASOURCE.includes(draft.variableType) && (\n <div>\n <label style={labelStyle}>{labels.variableTemplateManager.dataSourceId}</label>\n <select\n data-testid=\"template-form-datasource\"\n value={draft.dataSourceId}\n onChange={(e) => setDraft({ ...draft, dataSourceId: e.target.value })}\n disabled={busy}\n style={inputStyle}\n >\n <option value=\"\">—</option>\n {dataSourceOptions.map((d) => (\n <option key={d.id} value={d.id}>\n {d.label} ({d.id})\n </option>\n ))}\n </select>\n </div>\n )}\n\n {/* Advanced section */}\n <div style={{ borderTop: '1px solid #e2e8f0', paddingTop: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"template-form-advanced-toggle\"\n onClick={() => setAdvancedOpen((v) => !v)}\n style={{\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n color: '#475569',\n fontSize: '12px',\n fontWeight: 600,\n padding: 0,\n }}\n >\n {advancedOpen ? '▼' : '▶'} {labels.variableTemplateManager.advancedSection}\n </button>\n {advancedOpen && (\n <div data-testid=\"template-form-advanced\" style={{ display: 'flex', flexDirection: 'column', gap: '6px', marginTop: '6px' }}>\n <AdvancedJsonField\n label={labels.variableTemplateManager.validationRules}\n testId=\"template-form-validation-rules\"\n value={draft.validationRulesJson}\n onChange={(v) => setDraft({ ...draft, validationRulesJson: v })}\n error={formError === 'validationRules'}\n disabled={busy}\n />\n <AdvancedJsonField\n label={labels.variableTemplateManager.conditions}\n testId=\"template-form-conditions\"\n value={draft.conditionsJson}\n onChange={(v) => setDraft({ ...draft, conditionsJson: v })}\n error={formError === 'conditions'}\n disabled={busy}\n />\n <AdvancedJsonField\n label={labels.variableTemplateManager.style}\n testId=\"template-form-style\"\n value={draft.styleJson}\n onChange={(v) => setDraft({ ...draft, styleJson: v })}\n error={formError === 'style'}\n disabled={busy}\n />\n </div>\n )}\n </div>\n\n {formError && !['duplicate-code', 'validationRules', 'conditions', 'style'].includes(formError) && (\n <div data-testid=\"template-form-error\" style={errorStyle}>{formError}</div>\n )}\n\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', marginTop: '8px' }}>\n <button\n type=\"button\"\n data-testid=\"template-form-cancel\"\n onClick={resetForm}\n disabled={busy}\n style={smallButtonStyle}\n >\n {labels.variableTemplateManager.cancelButton}\n </button>\n <button\n type=\"submit\"\n data-testid=\"template-form-save\"\n disabled={busy || !draft.code.trim()}\n style={{ ...smallButtonStyle, backgroundColor: '#2563eb', color: '#fff', border: 'none' }}\n >\n {labels.variableTemplateManager.saveButton}\n </button>\n </div>\n </form>\n )}\n </section>\n </div>\n </div>\n )\n}\n\nfunction AdvancedJsonField({\n label,\n testId,\n value,\n onChange,\n error,\n disabled,\n}: {\n label: string\n testId: string\n value: string\n onChange: (next: string) => void\n error?: boolean\n disabled?: boolean\n}) {\n return (\n <div>\n <label style={labelStyle}>{label}</label>\n <textarea\n data-testid={testId}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n rows={3}\n style={{\n ...inputStyle,\n fontFamily: 'monospace',\n fontSize: '12px',\n resize: 'vertical',\n borderColor: error ? '#ef4444' : '#cbd5e1',\n }}\n />\n {error && (\n <div data-testid={`${testId}-error`} style={errorStyle}>JSON</div>\n )}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n display: 'block',\n fontSize: '11px',\n fontWeight: 500,\n color: '#475569',\n marginBottom: '2px',\n}\n\nconst checkboxLabelStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '12px',\n color: '#334155',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%',\n boxSizing: 'border-box',\n padding: '4px 6px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#0f172a',\n outline: 'none',\n backgroundColor: '#fff',\n}\n\nconst iconButtonStyle: React.CSSProperties = {\n border: '1px solid #e2e8f0',\n background: '#fff',\n cursor: 'pointer',\n fontSize: '13px',\n color: '#64748b',\n padding: '2px 6px',\n borderRadius: '4px',\n}\n\nconst smallButtonStyle: React.CSSProperties = {\n padding: '4px 10px',\n border: '1px solid #cbd5e1',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#334155',\n backgroundColor: '#fff',\n cursor: 'pointer',\n}\n\nconst errorStyle: React.CSSProperties = {\n fontSize: '11px',\n color: '#b91c1c',\n marginTop: '2px',\n}\n","/**\n * ScopeManagerDialog — admin CRUD for {@link IScope} entries.\n *\n * Mirrors the `FormTypesDialog` visual pattern (native modal, inline\n * edit, delete-with-confirm) but persists through the editor adapter:\n * - `adapter.createScope(data)`\n * - `adapter.updateScope(id, data)`\n * - `adapter.deleteScope(id)` — server returns 409 if forms, templates,\n * or data sources still reference the scope; the dialog surfaces the\n * message inline in red.\n *\n * Provides a \"Gérer les variables →\" affordance per row that opens\n * `VariableTemplateManager` scoped to that scope.\n */\n\nimport { useState } from 'react'\nimport { DEFAULT_LANG_CONFIG, resolveLabel } from '@msbci/form-core'\nimport type { IScope } from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\nimport { VariableTemplateManager } from './VariableTemplateManager'\n\nexport interface ScopeManagerDialogProps {\n open: boolean\n onClose: () => void\n}\n\nexport function ScopeManagerDialog({ open, onClose }: ScopeManagerDialogProps) {\n const labels = useLabels()\n const adapter = useEditorStore((s) => s.adapter)\n const availableScopes = useEditorStore((s) => s.availableScopes)\n const setAvailableScopes = useEditorStore((s) => s.setAvailableScopes)\n const form = useEditorStore((s) => s.form)\n const defaultLang = form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\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 const [deleteErrors, setDeleteErrors] = useState<Record<string, string>>({})\n const [busy, setBusy] = useState(false)\n // When set, the VariableTemplateManager dialog is open on this scope.\n const [openTemplatesFor, setOpenTemplatesFor] = useState<{ id: string; name: string } | null>(null)\n\n if (!open) return null\n\n const refresh = (mutate: (list: IScope[]) => IScope[]) => {\n setAvailableScopes(mutate(availableScopes))\n }\n\n const handleAdd = async () => {\n if (!newName.trim() || !adapter?.createScope) return\n const code = newCode.trim() || newName.trim().toUpperCase().replace(/\\s+/g, '_')\n setBusy(true)\n try {\n const created = await adapter.createScope({\n code,\n name: newName.trim(),\n tenantId: 'default',\n })\n refresh((list) => [...list, created])\n setNewName('')\n setNewCode('')\n } finally {\n setBusy(false)\n }\n }\n\n const startEdit = (scope: IScope) => {\n const currentName = typeof scope.name === 'string'\n ? scope.name\n : resolveLabel(scope.name, defaultLang, defaultLang)\n setEditingId(scope.id)\n setEditName(currentName)\n }\n\n const cancelEdit = () => {\n setEditingId(null)\n setEditName('')\n }\n\n const commitEdit = async () => {\n if (!editingId || !adapter?.updateScope) {\n cancelEdit()\n return\n }\n const trimmed = editName.trim()\n if (!trimmed) {\n cancelEdit()\n return\n }\n const current = availableScopes.find((s) => s.id === editingId)\n // Preserve the LocalizedString shape: object payloads keep their\n // other-lang values, plain strings stay plain strings.\n const nextName = current && typeof current.name === 'object'\n ? { ...current.name, [defaultLang]: trimmed }\n : trimmed\n setBusy(true)\n try {\n const updated = await adapter.updateScope(editingId, { name: nextName })\n refresh((list) => list.map((s) => (s.id === editingId ? updated : s)))\n cancelEdit()\n } finally {\n setBusy(false)\n }\n }\n\n const askDelete = (id: string) => {\n setConfirmDeleteId(id)\n setDeleteErrors((prev) => {\n const next = { ...prev }\n delete next[id]\n return next\n })\n }\n\n const confirmDelete = async () => {\n if (!confirmDeleteId || !adapter?.deleteScope) return\n const id = confirmDeleteId\n setBusy(true)\n try {\n await adapter.deleteScope(id)\n refresh((list) => list.filter((s) => s.id !== id))\n setConfirmDeleteId(null)\n } catch (err) {\n // Surface the server message (typically a 409 with the in-use counts).\n const message = err instanceof Error ? err.message : String(err)\n setDeleteErrors((prev) => ({ ...prev, [id]: message }))\n } finally {\n setBusy(false)\n }\n }\n\n const handleManageVariables = (scope: IScope) => {\n const name = typeof scope.name === 'string'\n ? scope.name\n : resolveLabel(scope.name, defaultLang, defaultLang)\n setOpenTemplatesFor({ id: scope.id, name })\n }\n\n return (\n <>\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={labels.scopeManager.dialogAriaLabel}\n data-testid=\"scope-manager-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: '36rem',\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.scopeManager.title}</h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label={labels.scopeManager.closeAriaLabel}\n data-testid=\"scope-manager-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 {availableScopes.length === 0 && (\n <div\n data-testid=\"scope-manager-empty\"\n style={{ fontSize: '13px', color: '#94a3b8', marginBottom: '12px' }}\n >\n {labels.scopeManager.noScopes}\n </div>\n )}\n\n <ul style={{ listStyle: 'none', padding: 0, margin: 0, display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {availableScopes.map((scope) => {\n const isEditing = editingId === scope.id\n const awaitingConfirm = confirmDeleteId === scope.id\n const displayName = typeof scope.name === 'string'\n ? scope.name\n : resolveLabel(scope.name, defaultLang, defaultLang)\n return (\n <li\n key={scope.id}\n data-testid={`scope-row-${scope.code}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px',\n border: '1px solid #e2e8f0',\n borderRadius: '6px',\n backgroundColor: '#fff',\n flexWrap: 'wrap',\n }}\n >\n {isEditing ? (\n <input\n type=\"text\"\n value={editName}\n autoFocus\n data-testid={`scope-name-edit-${scope.code}`}\n onChange={(e) => setEditName(e.target.value)}\n onBlur={commitEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter') commitEdit()\n if (e.key === 'Escape') cancelEdit()\n }}\n disabled={busy}\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={`scope-name-${scope.code}`}\n onClick={() => startEdit(scope)}\n aria-label={labels.scopeManager.editScopeAria(scope.code)}\n style={{\n flex: 1,\n fontSize: '13px',\n cursor: 'pointer',\n padding: '4px 8px',\n }}\n >\n {displayName}\n </span>\n )}\n <span style={{ fontSize: '11px', color: '#94a3b8', fontFamily: 'monospace' }}>{scope.code}</span>\n <button\n type=\"button\"\n data-testid={`scope-manage-variables-${scope.code}`}\n aria-label={labels.scopeManager.manageVariablesAria(scope.code)}\n onClick={() => handleManageVariables(scope)}\n disabled={busy}\n style={{\n padding: '4px 10px',\n border: '1px solid #2563eb',\n borderRadius: '4px',\n backgroundColor: '#fff',\n color: '#2563eb',\n fontSize: '12px',\n cursor: 'pointer',\n }}\n >\n {labels.scopeManager.manageVariables}\n </button>\n <button\n type=\"button\"\n aria-label={labels.scopeManager.removeScopeAria(scope.code)}\n data-testid={`scope-remove-${scope.code}`}\n onClick={() => askDelete(scope.id)}\n disabled={busy}\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\n {awaitingConfirm && (\n <div\n data-testid={`scope-confirm-${scope.code}`}\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 flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ flex: 1 }}>{labels.scopeManager.confirmDelete}</span>\n <button\n type=\"button\"\n data-testid={`scope-confirm-yes-${scope.code}`}\n onClick={confirmDelete}\n disabled={busy}\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.scopeManager.deleteConfirm}\n </button>\n <button\n type=\"button\"\n data-testid={`scope-confirm-no-${scope.code}`}\n onClick={() => setConfirmDeleteId(null)}\n disabled={busy}\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.scopeManager.deleteCancel}\n </button>\n </div>\n {deleteErrors[scope.id] && (\n <div\n data-testid={`scope-delete-error-${scope.code}`}\n style={{ color: '#7f1d1d', fontWeight: 500 }}\n >\n {labels.scopeManager.deleteError} — {deleteErrors[scope.id]}\n </div>\n )}\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=\"scope-new-name\"\n placeholder={labels.scopeManager.newScopeName}\n onChange={(e) => setNewName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') void handleAdd()\n }}\n disabled={busy}\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=\"scope-new-code\"\n placeholder={labels.scopeManager.newScopeCodePlaceholder}\n onChange={(e) => setNewCode(e.target.value)}\n disabled={busy}\n style={{\n width: '140px',\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=\"scope-add\"\n onClick={handleAdd}\n disabled={busy || newName.trim() === '' || !adapter?.createScope}\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.scopeManager.addScope}\n </button>\n </section>\n </div>\n </div>\n\n {openTemplatesFor && (\n <VariableTemplateManager\n open={true}\n onClose={() => setOpenTemplatesFor(null)}\n scopeId={openTemplatesFor.id}\n scopeName={openTemplatesFor.name}\n />\n )}\n </>\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 { DataSourceConfigManager } from '../dialogs/DataSourceConfigManager'\nimport { ScopeManagerDialog } from '../dialogs/ScopeManagerDialog'\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 select,\n } = useEditorStore()\n const labels = useLabels()\n\n const [showFormTypesDialog, setShowFormTypesDialog] = useState(false)\n const [showDataSourcesDialog, setShowDataSourcesDialog] = useState(false)\n const [showScopesDialog, setShowScopesDialog] = 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 {/* Form properties (⚙) — jumps the right panel to FormProperties. */}\n <button\n type=\"button\"\n onClick={() => select({ type: 'form' })}\n title={labels.toolbar.formProperties}\n data-testid=\"toolbar-form-properties\"\n aria-label={labels.toolbar.formProperties}\n style={{\n padding: '6px 10px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '14px',\n cursor: 'pointer',\n }}\n >\n ⚙\n </button>\n\n {/* Scopes manager */}\n <button\n type=\"button\"\n onClick={() => setShowScopesDialog(true)}\n title={labels.toolbar.manageScopesTitle}\n data-testid=\"toolbar-scopes\"\n aria-label={labels.toolbar.manageScopesTitle}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.toolbar.scopes}\n </button>\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 {/* Data sources */}\n <button\n type=\"button\"\n onClick={() => setShowDataSourcesDialog(true)}\n title={labels.toolbar.manageDataSourcesTitle}\n data-testid=\"toolbar-datasources\"\n aria-label={labels.toolbar.manageDataSourcesTitle}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n {labels.toolbar.dataSources}\n </button>\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\n <DataSourceConfigManager\n open={showDataSourcesDialog}\n onClose={() => setShowDataSourcesDialog(false)}\n />\n\n <ScopeManagerDialog\n open={showScopesDialog}\n onClose={() => setShowScopesDialog(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.groupMedia,\n 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 },\n {\n label: labels.toolbox.groupAdvanced,\n items: [\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 scopeIds={form.scopeIds}\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 scopeIds: string[] | undefined\n search: string\n defaultLang: string\n labels: ReturnType<typeof useLabels>\n}\n\nfunction VariablesDndTab({ templates, scopeIds, 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 (!scopeIds || scopeIds.length === 0) 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, select } = useEditorStore()\n const labels = useLabels()\n\n // Clicking the empty area selects the form (FormProperties panel) —\n // guard against children bubbling up so item-level clicks keep their\n // own selection logic intact.\n const handleEmptyClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) select({ type: 'form' })\n }\n\n if (form.pages.length === 0) {\n return (\n <div\n data-testid=\"canvas-empty\"\n onClick={handleEmptyClick}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#94a3b8',\n fontSize: '14px',\n cursor: 'pointer',\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\n data-testid=\"canvas-root\"\n onClick={handleEmptyClick}\n style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}\n >\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","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 IScope,\n IVariableOption,\n IConditionRule,\n IValidationRule,\n IRepeatConfig,\n LangDetectionStrategy,\n LocalizedString,\n} from '@msbci/form-core'\nimport { resolveLabel } from '@msbci/form-core'\nimport type { IEditorLabels } from '../../i18n'\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, availableScopes } = 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 <ScopesSelector\n value={form.scopeIds ?? []}\n availableScopes={availableScopes}\n onChange={(ids) => updateFormMeta({ scopeIds: ids })}\n defaultLang={langConfig.defaultLang}\n labels={labels}\n />\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 */\n// ──────────────────────────────────────────────────────────────\n// ScopesSelector — multi-scope picker with priority ordering\n// ──────────────────────────────────────────────────────────────\n\nfunction ScopesSelector({\n value,\n availableScopes,\n onChange,\n defaultLang,\n labels,\n}: {\n value: string[]\n availableScopes: IScope[]\n onChange: (ids: string[]) => void\n defaultLang: string\n labels: IEditorLabels\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 containerStyle: React.CSSProperties = {\n padding: '8px',\n backgroundColor: '#f8fafc',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n marginTop: '4px',\n }\n\n const selectedScopes = value\n .map((id) => availableScopes.find((s) => s.id === id) ?? availableScopes.find((s) => s.code === id))\n .filter((s): s is IScope => Boolean(s))\n const remaining = availableScopes.filter((s) => !value.includes(s.id) && !value.includes(s.code))\n\n const addScope = (id: string) => {\n if (!id) return\n onChange([...value, id])\n }\n\n const removeAt = (index: number) => {\n const next = value.slice()\n next.splice(index, 1)\n onChange(next)\n }\n\n const move = (index: number, delta: -1 | 1) => {\n const target = index + delta\n if (target < 0 || target >= value.length) return\n const next = value.slice()\n const [picked] = next.splice(index, 1)\n next.splice(target, 0, picked!)\n onChange(next)\n }\n\n return (\n <div data-testid=\"form-scopes-selector\" style={containerStyle}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.properties.scopes}\n </div>\n <p style={{ margin: 0, fontSize: '11px', color: '#94a3b8' }}>\n {labels.properties.scopesHint}\n </p>\n\n {selectedScopes.length === 0 ? (\n <div style={{ fontSize: '12px', color: '#94a3b8', fontStyle: 'italic' }}>—</div>\n ) : (\n <ol\n data-testid=\"form-scopes-selected\"\n style={{ margin: 0, padding: 0, listStyle: 'none', display: 'flex', flexDirection: 'column', gap: '4px' }}\n >\n {selectedScopes.map((scope, idx) => (\n <li\n key={scope.id}\n data-testid={`form-scope-${scope.code}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 8px',\n borderRadius: '4px',\n backgroundColor: '#fff',\n border: '1px solid #e2e8f0',\n fontSize: '12px',\n }}\n >\n <span style={{ fontSize: '10px', color: '#64748b', minWidth: '14px' }}>{idx + 1}.</span>\n <span style={{ fontFamily: 'monospace', color: '#475569' }}>{scope.code}</span>\n <span style={{ color: '#1e293b', flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {resolveLabel(scope.name, defaultLang, defaultLang)}\n </span>\n <button\n type=\"button\"\n aria-label={labels.properties.moveScopeUp}\n data-testid={`form-scope-up-${scope.code}`}\n onClick={() => move(idx, -1)}\n disabled={idx === 0}\n style={ghostBtn(idx === 0)}\n >▲</button>\n <button\n type=\"button\"\n aria-label={labels.properties.moveScopeDown}\n data-testid={`form-scope-down-${scope.code}`}\n onClick={() => move(idx, 1)}\n disabled={idx === selectedScopes.length - 1}\n style={ghostBtn(idx === selectedScopes.length - 1)}\n >▼</button>\n <button\n type=\"button\"\n aria-label={labels.properties.removeScope}\n data-testid={`form-scope-remove-${scope.code}`}\n onClick={() => removeAt(idx)}\n style={{ ...ghostBtn(false), color: '#ef4444' }}\n >×</button>\n </li>\n ))}\n </ol>\n )}\n\n {remaining.length > 0 ? (\n <select\n value=\"\"\n data-testid=\"form-scopes-add\"\n onChange={(e) => {\n const id = e.target.value\n if (id) addScope(id)\n e.target.value = ''\n }}\n style={selectStyleScopes}\n >\n <option value=\"\">+ {labels.properties.scopes}…</option>\n {remaining.map((s) => (\n <option key={s.id} value={s.id}>\n {s.code} — {resolveLabel(s.name, defaultLang, defaultLang)}\n </option>\n ))}\n </select>\n ) : availableScopes.length === 0 ? (\n <div style={{ fontSize: '11px', color: '#94a3b8', fontStyle: 'italic' }} data-testid=\"form-scopes-empty\">\n {labels.properties.noScopesAvailable}\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction ghostBtn(disabled: boolean): React.CSSProperties {\n return {\n border: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n color: disabled ? '#cbd5e1' : '#64748b',\n fontSize: '10px',\n padding: '2px 6px',\n borderRadius: '4px',\n cursor: disabled ? 'default' : 'pointer',\n }\n}\n\nconst selectStyleScopes: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '12px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n}\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 * ConditionsModal — full-screen modal that hosts the ConditionBuilder\n * plus a manual-input mode with lightweight syntax highlighting.\n *\n * Design rules:\n * - Open / close only via the [✕] button or [Cancel] / [Apply].\n * The backdrop is non-clickable on purpose (no accidental loss of\n * in-flight edits).\n * - The modal owns a draft state. [Apply] commits, [Cancel] discards.\n * - A toggle switches between the visual builder (re-uses the\n * existing ConditionBuilder) and a manual textarea + syntax-coloured\n * mirror. Both modes produce the same canonical `expression` string.\n * - Focus trap implemented inline (no external dep) — Tab / Shift+Tab\n * loop inside the dialog, Escape closes (treated as Cancel).\n */\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport type { IConditionRule } from '@msbci/form-core'\nimport { useLabels } from '../../i18n'\nimport {\n ConditionBuilder,\n type RosterConditionContext,\n} from './ConditionBuilder'\n\nexport interface ConditionsModalProps {\n open: boolean\n /** Triggered by ✕, [Cancel] or Escape. Apply uses onApply + onClose. */\n onClose: () => void\n conditions: IConditionRule[]\n /** Called only when [Apply] is pressed with the final list. */\n onApply: (conditions: IConditionRule[]) => void\n availableVariables: Array<{ code: string; name: string }>\n rosterContext?: RosterConditionContext\n}\n\ntype EditorMode = 'visual' | 'manual'\n\nexport function ConditionsModal({\n open,\n onClose,\n conditions,\n onApply,\n availableVariables,\n rosterContext,\n}: ConditionsModalProps) {\n const labels = useLabels()\n const dialogRef = useRef<HTMLDivElement>(null)\n const previouslyFocused = useRef<HTMLElement | null>(null)\n\n // Draft conditions — re-seeded each time the modal opens so a Cancel\n // truly cancels (no mutation leaks back to the parent).\n const [draft, setDraft] = useState<IConditionRule[]>(conditions)\n const [mode, setMode] = useState<EditorMode>('visual')\n\n useEffect(() => {\n if (open) {\n setDraft(conditions)\n setMode('visual')\n }\n }, [open, conditions])\n\n // Focus trap + initial focus + Escape handling.\n useEffect(() => {\n if (!open) return\n previouslyFocused.current = document.activeElement as HTMLElement | null\n // Move focus into the dialog on next tick (after render).\n const id = setTimeout(() => {\n const first = dialogRef.current?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n first?.focus()\n }, 0)\n const handleKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.stopPropagation()\n onClose()\n return\n }\n if (event.key !== 'Tab' || !dialogRef.current) return\n const focusables = Array.from(\n dialogRef.current.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter((el) => el.offsetParent !== null)\n if (focusables.length === 0) return\n const first = focusables[0]!\n const last = focusables[focusables.length - 1]!\n const active = document.activeElement as HTMLElement | null\n if (event.shiftKey && active === first) {\n event.preventDefault()\n last.focus()\n } else if (!event.shiftKey && active === last) {\n event.preventDefault()\n first.focus()\n }\n }\n window.addEventListener('keydown', handleKey)\n return () => {\n clearTimeout(id)\n window.removeEventListener('keydown', handleKey)\n previouslyFocused.current?.focus?.()\n }\n }, [open, onClose])\n\n const handleApply = useCallback(() => {\n onApply(draft)\n onClose()\n }, [draft, onApply, onClose])\n\n if (!open) return null\n\n return (\n <div\n data-testid=\"conditions-modal-overlay\"\n // Overlay is intentionally NOT clickable — only ✕ / Cancel / Apply close.\n aria-hidden=\"false\"\n style={{\n position: 'fixed', inset: 0, zIndex: 1000,\n backgroundColor: 'rgba(15, 23, 42, 0.55)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n padding: '24px',\n }}\n >\n <div\n ref={dialogRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"conditions-modal-title\"\n data-testid=\"conditions-modal\"\n style={{\n backgroundColor: '#fff',\n borderRadius: '12px',\n boxShadow: '0 24px 48px rgba(0,0,0,0.25)',\n width: '100%', maxWidth: '720px',\n maxHeight: 'calc(100vh - 48px)',\n display: 'flex', flexDirection: 'column',\n overflow: 'hidden',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n {/* ── Header ── */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', padding: '14px 20px', borderBottom: '1px solid #e2e8f0' }}>\n <h2 id=\"conditions-modal-title\" style={{ margin: 0, fontSize: '16px', fontWeight: 600, color: '#0f172a' }}>\n {labels.conditionBuilder.modalTitle(draft.length)}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n data-testid=\"conditions-modal-close\"\n aria-label={labels.conditionBuilder.closeButton}\n style={{\n border: 'none', background: 'none', cursor: 'pointer',\n fontSize: '20px', color: '#64748b', padding: '4px 8px',\n borderRadius: '6px',\n }}\n >\n ✕\n </button>\n </div>\n\n {/* ── Mode toggle ── */}\n <div style={{ display: 'flex', gap: '4px', padding: '12px 20px 0', borderBottom: '1px solid #f1f5f9' }}>\n <ModeButton\n active={mode === 'visual'}\n label={labels.conditionBuilder.modeVisual}\n testId=\"conditions-modal-mode-visual\"\n onClick={() => setMode('visual')}\n />\n <ModeButton\n active={mode === 'manual'}\n label={labels.conditionBuilder.modeManual}\n testId=\"conditions-modal-mode-manual\"\n onClick={() => setMode('manual')}\n />\n </div>\n\n {/* ── Body (scrollable) ── */}\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px 20px' }}>\n {mode === 'visual' ? (\n <ConditionBuilder\n conditions={draft}\n onChange={setDraft}\n availableVariables={availableVariables}\n rosterContext={rosterContext}\n />\n ) : (\n <ManualEditorList\n conditions={draft}\n onChange={setDraft}\n />\n )}\n\n {/* ── Configured formulas summary ── */}\n <FormulasSummary conditions={draft} title={labels.conditionBuilder.formulasSummary} empty={labels.conditionBuilder.noConditions} />\n </div>\n\n {/* ── Footer ── */}\n <div style={{ display: 'flex', justifyContent: 'flex-end', gap: '8px', padding: '12px 20px', borderTop: '1px solid #e2e8f0' }}>\n <button\n type=\"button\"\n onClick={onClose}\n data-testid=\"conditions-modal-cancel\"\n style={{\n padding: '8px 16px', border: '1px solid #cbd5e1',\n borderRadius: '6px', backgroundColor: '#fff', color: '#334155',\n fontSize: '13px', fontWeight: 500, cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.cancelButton}\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n data-testid=\"conditions-modal-apply\"\n style={{\n padding: '8px 16px', border: 'none',\n borderRadius: '6px', backgroundColor: '#2563eb', color: '#fff',\n fontSize: '13px', fontWeight: 600, cursor: 'pointer',\n }}\n >\n {labels.conditionBuilder.applyButton}\n </button>\n </div>\n </div>\n </div>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// Mode toggle button\n// ──────────────────────────────────────────────────────────────\n\nfunction ModeButton({\n active,\n label,\n testId,\n onClick,\n}: {\n active: boolean\n label: string\n testId: string\n onClick: () => void\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n data-testid={testId}\n aria-pressed={active}\n style={{\n padding: '8px 14px',\n border: 'none',\n backgroundColor: 'transparent',\n color: active ? '#2563eb' : '#64748b',\n fontWeight: active ? 600 : 500,\n fontSize: '13px',\n cursor: 'pointer',\n borderBottomWidth: '2px',\n borderBottomStyle: 'solid',\n borderBottomColor: active ? '#2563eb' : 'transparent',\n marginBottom: '-1px',\n }}\n >\n {label}\n </button>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// Manual editor — one HighlightedTextarea per condition\n// ──────────────────────────────────────────────────────────────\n\nfunction ManualEditorList({\n conditions,\n onChange,\n}: {\n conditions: IConditionRule[]\n onChange: (next: IConditionRule[]) => void\n}) {\n const labels = useLabels()\n\n if (conditions.length === 0) {\n return (\n <div style={{ padding: '12px', color: '#94a3b8', fontSize: '13px', textAlign: 'center', fontStyle: 'italic' }}>\n {labels.conditionBuilder.noConditions}\n </div>\n )\n }\n\n const update = (id: string, expression: string) => {\n onChange(conditions.map((c) => (c.id === id ? { ...c, expression } : c)))\n }\n\n // Warn when an expression looks complex enough that going back to the\n // visual builder would lose information (the legacy parser is a stub).\n const looksComplex = (expr: string) =>\n expr.includes('ConditionEval(') ||\n expr.includes('||') ||\n /show\\(|hide\\(|setValue\\(/.test(expr) === false ||\n expr.split('&&').length > 2\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '14px' }}>\n <p style={{ margin: 0, fontSize: '11px', color: '#64748b' }}>\n {labels.conditionBuilder.manualHelp}\n </p>\n\n {conditions.map((c, idx) => (\n <div key={c.id} style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <label style={{ fontSize: '11px', fontWeight: 600, color: '#64748b' }}>\n #{idx + 1} — {labels.conditionBuilder.actions[c.action] ?? c.action}\n </label>\n <HighlightedTextarea\n value={c.expression}\n onChange={(next) => update(c.id, next)}\n placeholder={labels.conditionBuilder.manualPlaceholder}\n testId={`conditions-modal-manual-${c.id}`}\n />\n {looksComplex(c.expression) && (\n <p\n data-testid={`conditions-modal-manual-warning-${c.id}`}\n style={{\n margin: 0, fontSize: '11px', color: '#92400e',\n backgroundColor: '#fffbeb', border: '1px solid #fde68a',\n padding: '6px 8px', borderRadius: '4px',\n }}\n >\n ⚠ {labels.conditionBuilder.manualWarning}\n </p>\n )}\n </div>\n ))}\n </div>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// HighlightedTextarea — textarea + coloured mirror div\n// ──────────────────────────────────────────────────────────────\n\nconst SYNTAX_COLORS = {\n function: '#2563eb', // blue\n variable: '#ea580c', // orange\n operator: '#9333ea', // purple\n string: '#16a34a', // green\n number: '#0891b2', // cyan\n plain: 'inherit',\n identifier: 'inherit',\n} as const\n\nconst FUNCS = new Set([\n 'show', 'hide', 'setValue', 'validate', 'require', 'readonly',\n 'ConditionEval', 'jump', 'contains', 'startsWith', 'endsWith',\n 'isEmpty', 'isNotEmpty', 'not_contains', 'in', 'between', 'regex',\n])\n\ntype Token = { type: keyof typeof SYNTAX_COLORS; text: string }\n\n/**\n * Lightweight tokenizer for ConditionEval expressions — no parser, just\n * enough to classify spans for syntax colouring.\n */\nfunction tokenize(expr: string): Token[] {\n const tokens: Token[] = []\n let i = 0\n while (i < expr.length) {\n const c = expr[i]!\n\n // Quoted string\n if (c === '\"' || c === \"'\") {\n let end = i + 1\n while (end < expr.length && expr[end] !== c) {\n if (expr[end] === '\\\\') end++\n end++\n }\n tokens.push({ type: 'string', text: expr.slice(i, Math.min(end + 1, expr.length)) })\n i = end + 1\n continue\n }\n\n // ${VARIABLE}\n if (c === '$' && expr[i + 1] === '{') {\n let end = i + 2\n while (end < expr.length && expr[end] !== '}') end++\n tokens.push({ type: 'variable', text: expr.slice(i, Math.min(end + 1, expr.length)) })\n i = end + 1\n continue\n }\n\n // Identifier / function\n if (/[a-zA-Z_]/.test(c)) {\n let end = i\n while (end < expr.length && /[a-zA-Z0-9_]/.test(expr[end]!)) end++\n const ident = expr.slice(i, end)\n tokens.push({ type: FUNCS.has(ident) ? 'function' : 'identifier', text: ident })\n i = end\n continue\n }\n\n // Number\n if (/\\d/.test(c)) {\n let end = i\n while (end < expr.length && /[\\d.]/.test(expr[end]!)) end++\n tokens.push({ type: 'number', text: expr.slice(i, end) })\n i = end\n continue\n }\n\n // Operators (multichar first)\n if ('=!<>&|'.includes(c)) {\n const two = expr.slice(i, i + 2)\n if (['==', '!=', '<=', '>=', '&&', '||'].includes(two)) {\n tokens.push({ type: 'operator', text: two })\n i += 2\n continue\n }\n tokens.push({ type: 'operator', text: c })\n i++\n continue\n }\n\n tokens.push({ type: 'plain', text: c })\n i++\n }\n return tokens\n}\n\nfunction HighlightedTextarea({\n value,\n onChange,\n placeholder,\n testId,\n}: {\n value: string\n onChange: (next: string) => void\n placeholder?: string\n testId?: string\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const mirrorRef = useRef<HTMLDivElement>(null)\n const tokens = useMemo(() => tokenize(value), [value])\n\n // Keep the mirror in sync with the textarea's scroll position.\n const handleScroll = () => {\n if (!textareaRef.current || !mirrorRef.current) return\n mirrorRef.current.scrollTop = textareaRef.current.scrollTop\n mirrorRef.current.scrollLeft = textareaRef.current.scrollLeft\n }\n\n const sharedStyle: React.CSSProperties = {\n position: 'absolute',\n top: 0, left: 0,\n width: '100%', height: '100%',\n margin: 0,\n padding: '8px 10px',\n border: 'none',\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '12.5px',\n lineHeight: '20px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n boxSizing: 'border-box',\n }\n\n return (\n <div\n style={{\n position: 'relative',\n minHeight: '60px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#f8fafc',\n overflow: 'hidden',\n }}\n >\n {/* Coloured mirror — read-only, behind the textarea */}\n <div\n ref={mirrorRef}\n aria-hidden=\"true\"\n style={{\n ...sharedStyle,\n color: '#0f172a',\n overflow: 'auto',\n pointerEvents: 'none',\n }}\n >\n {tokens.length === 0 ? (\n <span style={{ color: '#94a3b8' }}>{placeholder}</span>\n ) : (\n <>\n {tokens.map((t, idx) => (\n <span key={idx} style={{ color: SYNTAX_COLORS[t.type] }}>\n {t.text}\n </span>\n ))}\n {/* Trailing newline placeholder so caret never lands outside the mirror */}\n <span>{''}</span>\n </>\n )}\n </div>\n\n {/* Transparent textarea — captures input, scroll & caret */}\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onScroll={handleScroll}\n placeholder={placeholder}\n data-testid={testId}\n spellCheck={false}\n style={{\n ...sharedStyle,\n color: 'transparent',\n caretColor: '#0f172a',\n backgroundColor: 'transparent',\n resize: 'vertical',\n outline: 'none',\n // Match the mirror's overflow so scrolls align.\n overflow: 'auto',\n }}\n />\n </div>\n )\n}\n\n// ──────────────────────────────────────────────────────────────\n// FormulasSummary — read-only recap of every configured expression\n// ──────────────────────────────────────────────────────────────\n\nfunction FormulasSummary({\n conditions,\n title,\n empty,\n}: {\n conditions: IConditionRule[]\n title: string\n empty: string\n}) {\n return (\n <div style={{ marginTop: '16px', borderTop: '1px solid #e2e8f0', paddingTop: '12px' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {title}\n </h3>\n {conditions.length === 0 ? (\n <p style={{ margin: 0, fontSize: '12px', color: '#94a3b8', fontStyle: 'italic' }}>{empty}</p>\n ) : (\n <ul\n data-testid=\"conditions-modal-summary\"\n style={{ margin: 0, padding: 0, listStyle: 'none', display: 'flex', flexDirection: 'column', gap: '4px' }}\n >\n {conditions.map((c) => (\n <li\n key={c.id}\n style={{\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '11.5px',\n color: '#0f172a',\n backgroundColor: '#f1f5f9',\n padding: '4px 8px',\n borderRadius: '4px',\n wordBreak: 'break-all',\n }}\n >\n {c.expression || '∅'}\n </li>\n ))}\n </ul>\n )}\n </div>\n )\n}\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 { useMemo, useState } from 'react'\nimport type { IDataSourceConnector } from '@msbci/form-core'\nimport { resolveLabel, DEFAULT_LANG_CONFIG } from '@msbci/form-core'\nimport { useEditorStore } from '../../store/editor-store'\nimport { useLabels } from '../../i18n'\n\n/**\n * Lightweight shape used inside the selector — only `id` and `name` are\n * needed for the dropdown. Both `IDataSourceConnector` (legacy, manual\n * injection) and `IDataSourceConfig` (admin-managed, dynamic) collapse\n * onto this shape so the selector treats them uniformly.\n */\ninterface SelectorEntry {\n id: string\n name: string\n}\n\nexport interface DataSourceSelectorProps {\n /** Currently selected connector ID */\n dataSourceId?: string\n /** Current dependency mapping: { depKey: variableCode } */\n dependencies?: Record<string, string>\n /**\n * Legacy connectors injected by the host code. Merged with the\n * admin-managed configs from the store (the store wins on `id` clash —\n * the editor surfaces what admins actually configured).\n */\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 availableDataSources = useEditorStore((s) => s.availableDataSources)\n const form = useEditorStore((s) => s.form)\n const defaultLang =\n form.langConfig?.defaultLang ?? DEFAULT_LANG_CONFIG.defaultLang\n\n // Merge dynamic configs + legacy connectors. Configs win on duplicates\n // because admins managed them explicitly via the editor.\n const entries = useMemo<SelectorEntry[]>(() => {\n const map = new Map<string, SelectorEntry>()\n for (const c of availableConnectors) map.set(c.id, { id: c.id, name: c.name })\n for (const cfg of availableDataSources) {\n const name = typeof cfg.name === 'string'\n ? cfg.name\n : resolveLabel(cfg.name, defaultLang, defaultLang)\n map.set(cfg.code, { id: cfg.code, name })\n }\n return Array.from(map.values())\n }, [availableConnectors, availableDataSources, defaultLang])\n\n const selectedConnector = entries.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 {entries.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","import { useMemo, useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { LocalizedField } from './LocalizedInput'\nimport { ConditionsModal } from './ConditionsModal'\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 IFileConfig,\n IImageConfig,\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 const [conditionsModalOpen, setConditionsModalOpen] = useState(false)\n\n const variableTypes = useMemo<Array<{ value: VariableType; label: string }>>(\n () => [\n // Texte\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: 'email', label: labels.toolbox.types.email },\n // Sélection\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: 'listradio', label: labels.toolbox.types.listradio },\n // Date & Heure\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 // Médias\n { value: 'file', label: labels.toolbox.types.file },\n { value: 'image', label: labels.toolbox.types.image },\n { value: 'photo', label: labels.toolbox.types.photo },\n { value: 'gps', label: labels.toolbox.types.gps },\n // Avancé\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 { value: 'panel', label: labels.toolbox.types.panel },\n { value: 'richtext', label: labels.toolbox.types.richtext },\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 {/* File upload configuration (v1.3.3+) */}\n {variable.type === 'file' && (\n <FileConfigSection\n value={variable.fileConfig}\n onChange={(next) => update({ fileConfig: next })}\n labels={{\n title: labels.properties.fileConfig,\n max: labels.properties.fileConfigMax,\n min: labels.properties.fileConfigMin,\n accept: labels.properties.fileConfigAccept,\n acceptPlaceholder: labels.properties.fileConfigAcceptPlaceholder,\n unlimited: labels.properties.fileConfigUnlimited,\n }}\n />\n )}\n\n {/* Image upload configuration (v1.3.3+) */}\n {variable.type === 'image' && (\n <ImageConfigSection\n value={variable.imageConfig}\n onChange={(next) => update({ imageConfig: next })}\n labels={{\n title: labels.properties.imageConfig,\n max: labels.properties.imageConfigMax,\n min: labels.properties.imageConfigMin,\n camera: labels.properties.imageConfigCamera,\n unlimited: labels.properties.fileConfigUnlimited,\n }}\n />\n )}\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 <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <label style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n {labels.conditionBuilder.conditionsCount((variable.conditions ?? []).length)}\n </label>\n <button\n type=\"button\"\n data-testid=\"conditions-modal-open\"\n onClick={() => setConditionsModalOpen(true)}\n style={{\n padding: '8px 14px',\n border: '1px solid #cbd5e1',\n borderRadius: '6px',\n backgroundColor: '#fff',\n color: '#1e293b',\n fontSize: '13px',\n fontWeight: 500,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n ⚙ {labels.conditionBuilder.configureButton((variable.conditions ?? []).length)}\n </button>\n {(variable.conditions ?? []).length > 0 && (\n <ul\n data-testid=\"conditions-preview\"\n style={{\n margin: 0,\n padding: 0,\n listStyle: 'none',\n display: 'flex',\n flexDirection: 'column',\n gap: '3px',\n }}\n >\n {(variable.conditions ?? []).map((c) => (\n <li\n key={c.id}\n style={{\n fontFamily: 'ui-monospace, \"SF Mono\", Menlo, Consolas, monospace',\n fontSize: '11.5px',\n color: '#0f172a',\n backgroundColor: '#f1f5f9',\n padding: '4px 8px',\n borderRadius: '4px',\n wordBreak: 'break-all',\n }}\n >\n {c.expression || '∅'}\n </li>\n ))}\n </ul>\n )}\n </div>\n </FieldWithReset>\n\n <ConditionsModal\n open={conditionsModalOpen}\n onClose={() => setConditionsModalOpen(false)}\n conditions={variable.conditions ?? []}\n onApply={(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 </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\n// ─── File / Image upload config sections (v1.3.3+) ───────────────────\n\nconst FILE_MAX_OPTIONS = [1, 2, 3, 5, 10] as const\nconst FILE_MIN_OPTIONS = [0, 1, 2, 3] as const\n\nfunction FileConfigSection({\n value,\n onChange,\n labels,\n}: {\n value: IFileConfig | undefined\n onChange: (next: IFileConfig | undefined) => void\n labels: {\n title: string\n max: string\n min: string\n accept: string\n acceptPlaceholder: string\n unlimited: string\n }\n}) {\n const current: IFileConfig = value ?? {}\n // Encoded as the string \"unlimited\" in the <select> for clarity.\n const maxSelectValue = current.maxFiles === undefined\n ? 'unlimited'\n : String(current.maxFiles)\n\n const patch = (next: IFileConfig) => {\n // Drop empty objects so the payload stays clean.\n const cleaned: IFileConfig = {}\n if (next.maxFiles !== undefined) cleaned.maxFiles = next.maxFiles\n if (next.minFiles !== undefined && next.minFiles > 0) cleaned.minFiles = next.minFiles\n if (next.accept) cleaned.accept = next.accept\n onChange(Object.keys(cleaned).length > 0 ? cleaned : undefined)\n }\n\n return (\n <div data-testid=\"file-config-section\" style={uploadSectionStyle}>\n <div style={uploadSectionTitleStyle}>{labels.title}</div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.max}</label>\n <select\n data-testid=\"file-config-max\"\n value={maxSelectValue}\n onChange={(e) => {\n const raw = e.target.value\n patch({\n ...current,\n maxFiles: raw === 'unlimited' ? undefined : Number(raw),\n })\n }}\n style={uploadInputStyle}\n >\n {FILE_MAX_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n <option value=\"unlimited\">{labels.unlimited}</option>\n </select>\n </div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.min}</label>\n <select\n data-testid=\"file-config-min\"\n value={String(current.minFiles ?? 0)}\n onChange={(e) => patch({ ...current, minFiles: Number(e.target.value) })}\n style={uploadInputStyle}\n >\n {FILE_MIN_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n </select>\n </div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.accept}</label>\n <input\n data-testid=\"file-config-accept\"\n type=\"text\"\n value={current.accept ?? ''}\n onChange={(e) => patch({ ...current, accept: e.target.value || undefined })}\n placeholder={labels.acceptPlaceholder}\n style={{ ...uploadInputStyle, fontFamily: 'monospace' }}\n />\n </div>\n </div>\n )\n}\n\nfunction ImageConfigSection({\n value,\n onChange,\n labels,\n}: {\n value: IImageConfig | undefined\n onChange: (next: IImageConfig | undefined) => void\n labels: {\n title: string\n max: string\n min: string\n camera: string\n unlimited: string\n }\n}) {\n const current: IImageConfig = value ?? {}\n const maxSelectValue = current.maxImages === undefined\n ? 'unlimited'\n : String(current.maxImages)\n\n const patch = (next: IImageConfig) => {\n const cleaned: IImageConfig = {}\n if (next.maxImages !== undefined) cleaned.maxImages = next.maxImages\n if (next.minImages !== undefined && next.minImages > 0) cleaned.minImages = next.minImages\n if (next.allowCamera) cleaned.allowCamera = true\n onChange(Object.keys(cleaned).length > 0 ? cleaned : undefined)\n }\n\n return (\n <div data-testid=\"image-config-section\" style={uploadSectionStyle}>\n <div style={uploadSectionTitleStyle}>{labels.title}</div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.max}</label>\n <select\n data-testid=\"image-config-max\"\n value={maxSelectValue}\n onChange={(e) => {\n const raw = e.target.value\n patch({\n ...current,\n maxImages: raw === 'unlimited' ? undefined : Number(raw),\n })\n }}\n style={uploadInputStyle}\n >\n {FILE_MAX_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n <option value=\"unlimited\">{labels.unlimited}</option>\n </select>\n </div>\n\n <div>\n <label style={uploadFieldLabelStyle}>{labels.min}</label>\n <select\n data-testid=\"image-config-min\"\n value={String(current.minImages ?? 0)}\n onChange={(e) => patch({ ...current, minImages: Number(e.target.value) })}\n style={uploadInputStyle}\n >\n {FILE_MIN_OPTIONS.map((n) => (\n <option key={n} value={String(n)}>{n}</option>\n ))}\n </select>\n </div>\n\n <label\n data-testid=\"image-config-camera-label\"\n style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}\n >\n <input\n type=\"checkbox\"\n data-testid=\"image-config-camera\"\n checked={!!current.allowCamera}\n onChange={(e) => patch({ ...current, allowCamera: e.target.checked })}\n />\n {labels.camera}\n </label>\n </div>\n )\n}\n\nconst uploadSectionStyle: React.CSSProperties = {\n padding: '8px',\n backgroundColor: '#f0f9ff',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n border: '1px solid #bae6fd',\n}\n\nconst uploadSectionTitleStyle: React.CSSProperties = {\n fontSize: '11px',\n fontWeight: 600,\n color: '#0369a1',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n}\n\nconst uploadFieldLabelStyle: React.CSSProperties = {\n display: 'block',\n fontSize: '12px',\n fontWeight: 500,\n color: '#0c4a6e',\n marginBottom: '2px',\n}\n\nconst uploadInputStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #bae6fd',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#0f172a',\n outline: 'none',\n backgroundColor: '#fff',\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 { IDataSourceConfig, IFormDefinition, IDataSourceConnector, IVariableTemplate } 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 {\n form,\n view,\n setForm,\n setAdapter,\n load,\n setAvailableTemplates,\n setAvailableScopes,\n setAvailableDataSources,\n } = 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 // Stable key for the scope list so the effect below only fires when\n // the linked scopes actually change (and not on every form mutation).\n const scopeIdsKey = (form.scopeIds ?? []).join('|')\n\n // Reload the variable-template library whenever the linked scopes\n // change. We call `loadTemplates(id)` in parallel for each scope and\n // merge the results, with earlier scopes taking priority on `code`\n // conflicts (de-duplication by `code`).\n useEffect(() => {\n const scopeIds = form.scopeIds ?? []\n if (scopeIds.length === 0 || !adapter?.loadTemplates) {\n setAvailableTemplates([])\n return\n }\n const load = adapter.loadTemplates\n let cancelled = false\n Promise.all(\n scopeIds.map((id) =>\n load(id).catch(() => [] as IVariableTemplate[]),\n ),\n )\n .then((batches) => {\n if (cancelled) return\n const seen = new Set<string>()\n const merged: IVariableTemplate[] = []\n for (const batch of batches) {\n for (const tpl of batch) {\n if (seen.has(tpl.code)) continue\n seen.add(tpl.code)\n merged.push(tpl)\n }\n }\n setAvailableTemplates(merged)\n })\n .catch(() => {\n if (!cancelled) setAvailableTemplates([])\n })\n return () => {\n cancelled = true\n }\n }, [scopeIdsKey, adapter, setAvailableTemplates]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Load the global scope library once per adapter swap (used by\n // FormProperties to populate the multi-scope picker).\n useEffect(() => {\n if (!adapter?.loadScopes) {\n setAvailableScopes([])\n return\n }\n let cancelled = false\n adapter\n .loadScopes()\n .then((scopes) => {\n if (!cancelled) setAvailableScopes(scopes)\n })\n .catch(() => {\n if (!cancelled) setAvailableScopes([])\n })\n return () => {\n cancelled = true\n }\n }, [adapter, setAvailableScopes])\n\n // Reload the data-source list whenever the linked scopes change.\n // Same pattern as templates: Promise.all per scope, dedup by `code`,\n // first scope wins. The DataSourceConfigManager surfaces `scopeId`\n // so users still see which scope each entry belongs to.\n useEffect(() => {\n const scopeIds = form.scopeIds ?? []\n if (scopeIds.length === 0 || !adapter?.loadDataSources) {\n setAvailableDataSources([])\n return\n }\n const loadDs = adapter.loadDataSources\n let cancelled = false\n Promise.all(\n scopeIds.map((id) =>\n loadDs(id).catch(() => [] as IDataSourceConfig[]),\n ),\n )\n .then((batches) => {\n if (cancelled) return\n const seen = new Set<string>()\n const merged: IDataSourceConfig[] = []\n for (const batch of batches) {\n for (const cfg of batch) {\n if (seen.has(cfg.code)) continue\n seen.add(cfg.code)\n merged.push(cfg)\n }\n }\n setAvailableDataSources(merged)\n })\n .catch(() => {\n if (!cancelled) setAvailableDataSources([])\n })\n return () => {\n cancelled = true\n }\n }, [scopeIdsKey, adapter, setAvailableDataSources]) // 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 ?? 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 scopeIds={form.scopeIds}\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 scopeIds: string[] | undefined\n search: string\n onAdd: (template: IVariableTemplate) => void\n defaultLang: string\n labels: ReturnType<typeof useLabels>\n}\n\nfunction VariablesTab({ templates, scopeIds, 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 (!scopeIds || scopeIds.length === 0) 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, select } = useEditorStore()\n const labels = useLabels()\n\n // Clicking the empty area between pages selects the form so the right\n // panel jumps back to FormProperties. We guard with target===current\n // so a click that bubbles up from a child (page header, item) does\n // NOT clear that child's selection.\n const handleEmptyClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) select({ type: 'form' })\n }\n\n if (form.pages.length === 0) {\n return (\n <div\n data-testid=\"canvas-empty\"\n onClick={handleEmptyClick}\n style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px', cursor: 'pointer' }}\n >\n {labels.canvas.emptyStateNoPage}\n </div>\n )\n }\n\n return (\n <div\n data-testid=\"canvas-root\"\n onClick={handleEmptyClick}\n style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}\n >\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"]}
|