@msbci/form-editor 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store/editor-store.ts","../src/components/dialogs/FormTypesDialog.tsx","../src/components/toolbar/EditorToolbar.tsx","../src/components/toolbox/ToolboxSimple.tsx","../src/components/canvas/CanvasSimple.tsx","../src/components/properties/FormProperties.tsx","../src/components/properties/PageProperties.tsx","../src/components/properties/ConditionBuilder.tsx","../src/components/properties/DataSourceSelector.tsx","../src/components/properties/OptionsEditor.tsx","../src/components/properties/VariableProperties.tsx","../src/components/properties/RosterProperties.tsx","../src/components/properties/PropertiesPanel.tsx","../src/components/FormEditor.tsx"],"names":["MAX_HISTORY","emptyForm","useEditorStore","create","set","get","pushHistory","description","state","entry","deepClone","history","mutateForm","mutator","newForm","form","updates","page","pageCode","p","orderedCodes","pageMap","reordered","code","index","roster","rosterCode","r","variable","variableCode","v","fromPageCode","toPageCode","newOrder","fromRosterCode","toRosterCode","movedVariable","pagesAfterRemove","pagesAfterInsert","vars","a","b","selection","view","historyIndex","nextIndex","type","newType","generateId","id","patch","t","_drop","rest","s","adapter","formId","serializeForm","json","deserializeForm","FormTypesDialog","open","onClose","formTypes","addFormType","updateFormType","removeFormType","newName","setNewName","useState","newCode","setNewCode","editingId","setEditingId","editName","setEditName","confirmDeleteId","setConfirmDeleteId","handleAdd","startEdit","currentName","commitEdit","askDelete","confirmDelete","jsx","jsxs","e","isEditing","inUse","awaitingConfirm","EditorToolbar","onSave","onExport","onImport","updateFormMeta","setView","isDirty","isSaving","canUndo","canRedo","undo","redo","save","addPage","showFormTypesDialog","setShowFormTypesDialog","handleSave","handleAddPage","nextOrder","viewButtons","ToolbarButton","btn","onClick","label","primary","disabled","title","GROUPS","ToolboxSimple","search","setSearch","addVariable","filtered","g","i","group","item","groupIntoRows","variables","sorted","rows","CanvasSimple","PageBlock","select","removePage","addRoster","isSelected","handleAddRoster","row","rowIdx","VarRow","RosterBlock","removeVariable","removeRoster","handleAddVarToRoster","FormProperties","PropertyField","sum","rs","value","onChange","multiline","inputStyle","PageProperties","updatePage","OPERATORS","ACTIONS","NO_VALUE_OPERATORS","ConditionBuilder","conditions","availableVariables","expandedId","setExpandedId","newCondition","handleRemove","c","handleUpdate","condition","ConditionRuleEditor","isExpanded","onToggle","onUpdate","onRemove","setGroup","parseExpressionToGroup","syncExpression","action","expr","groupToExpression","handleActionChange","handleAddRule","newRule","newGroup","handleRemoveRule","ruleId","handleRuleChange","handleLogicChange","logic","actionLabel","selectStyle","pillStyle","rule","o","Fragment","operatorToSymbol","op","parts","varRef","sym","val","joined","expression","DataSourceSelector","dataSourceId","dependencies","availableConnectors","onConnectorChange","onDependenciesChange","newDepKey","setNewDepKey","selectedConnector","depEntries","handleAddDependency","handleRemoveDependency","key","next","handleDepVarChange","labelStyle","varCode","slugifyValue","asString","OptionsEditor","options","updateOption","opt","handleLabelChange","current","handleValueChange","addOption","removeOption","_","labelBlock","inputBase","okBorder","errorBorder","labelStr","valueStr","labelInvalid","valueInvalid","VARIABLE_TYPES","VariableProperties","updateVariable","update","allVariables","CheckboxProperty","n","deps","checked","ROSTER_TYPES","RosterProperties","updateRoster","PropertiesPanel","content","FormEditor","theme","dataSources","initialForm","PreviewComponent","ToolboxComponent","CanvasComponent","Wrapper","setForm","setAdapter","load","useEffect","onChangeRef","useRef","isInitialRef","ActualToolbox","ActualCanvas","ActualWrapper","React"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Editor store — Zustand store managing the complete editor state.\n *\n * All form mutations go through this store, which:\n * 1. Applies the change to the form definition\n * 2. Pushes a history entry (for undo/redo)\n * 3. Marks the form as dirty\n */\n\nimport { create } from 'zustand'\nimport { serializeForm, deserializeForm, generateId } from '@msbci/form-core'\nimport type { IFormDefinition, IFormPage, IFormRoster, IFormVariable, IFormType } from '@msbci/form-core'\nimport type { EditorStore, EditorSelection, EditorView, HistoryEntry, IEditorAdapter } from './types'\nimport { deepClone } from '@msbci/form-core'\n\nconst MAX_HISTORY = 50\n\nfunction emptyForm(): IFormDefinition {\n return {\n id: '',\n code: '',\n name: 'New Form',\n version: '1.0.0',\n isPublished: false,\n pages: [],\n }\n}\n\nexport const useEditorStore = create<EditorStore>((set, get) => {\n /** Push current form state to history before a mutation */\n function pushHistory(description: string) {\n const state = get()\n const entry: HistoryEntry = {\n form: deepClone(state.form),\n description,\n timestamp: Date.now(),\n }\n\n // Truncate forward history if we're not at the end\n const history = state.history.slice(0, state.historyIndex + 1)\n history.push(entry)\n\n // Limit history size\n if (history.length > MAX_HISTORY) {\n history.shift()\n }\n\n set({ history, historyIndex: history.length - 1 })\n }\n\n /** Apply a form mutation with history tracking */\n function mutateForm(description: string, mutator: (form: IFormDefinition) => IFormDefinition) {\n pushHistory(description)\n const state = get()\n const newForm = mutator(deepClone(state.form))\n set({ form: newForm, isDirty: true })\n }\n\n return {\n // Initial state\n form: emptyForm(),\n formTypes: [],\n selection: { type: 'form' },\n view: 'canvas',\n isDirty: false,\n isSaving: false,\n history: [],\n historyIndex: -1,\n adapter: null,\n\n // --- Form CRUD ---\n\n setForm: (form) => {\n set({ form: deepClone(form), isDirty: false, history: [], historyIndex: -1, selection: { type: 'form' } })\n },\n\n updateFormMeta: (updates) => {\n mutateForm('Update form metadata', (form) => ({ ...form, ...updates }))\n },\n\n // --- Page operations ---\n\n addPage: (page) => {\n mutateForm(`Add page \"${page.name}\"`, (form) => ({\n ...form,\n pages: [...form.pages, page],\n }))\n },\n\n updatePage: (pageCode, updates) => {\n mutateForm(`Update page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => (p.code === pageCode ? { ...p, ...updates } : p)),\n }))\n },\n\n removePage: (pageCode) => {\n mutateForm(`Remove page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.filter((p) => p.code !== pageCode),\n }))\n const state = get()\n if (state.selection.type === 'page' && state.selection.pageCode === pageCode) {\n set({ selection: { type: 'form' } })\n }\n },\n\n reorderPages: (orderedCodes) => {\n mutateForm('Reorder pages', (form) => {\n const pageMap = new Map(form.pages.map((p) => [p.code, p]))\n const reordered = orderedCodes\n .map((code, index) => {\n const page = pageMap.get(code)\n return page ? { ...page, order: index } : undefined\n })\n .filter((p): p is IFormPage => p !== undefined)\n return { ...form, pages: reordered }\n })\n },\n\n // --- Roster operations ---\n\n addRoster: (pageCode, roster) => {\n mutateForm(`Add roster \"${roster.name}\" to page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode ? { ...p, rosters: [...p.rosters, roster] } : p,\n ),\n }))\n },\n\n updateRoster: (pageCode, rosterCode, updates) => {\n mutateForm(`Update roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode\n ? {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode ? { ...r, ...updates } : r,\n ),\n }\n : p,\n ),\n }))\n },\n\n removeRoster: (pageCode, rosterCode) => {\n mutateForm(`Remove roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode\n ? { ...p, rosters: p.rosters.filter((r) => r.code !== rosterCode) }\n : p,\n ),\n }))\n },\n\n // --- Variable operations ---\n\n addVariable: (pageCode, variable, rosterCode) => {\n mutateForm(`Add variable \"${variable.name}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? { ...r, variables: [...r.variables, variable] }\n : r,\n ),\n }\n }\n return { ...p, variables: [...p.variables, variable] }\n }),\n }))\n },\n\n updateVariable: (pageCode, variableCode, updates, rosterCode) => {\n mutateForm(`Update variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? {\n ...r,\n variables: r.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n : r,\n ),\n }\n }\n return {\n ...p,\n variables: p.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n }),\n }))\n },\n\n removeVariable: (pageCode, variableCode, rosterCode) => {\n mutateForm(`Remove variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? { ...r, variables: r.variables.filter((v) => v.code !== variableCode) }\n : r,\n ),\n }\n }\n return { ...p, variables: p.variables.filter((v) => v.code !== variableCode) }\n }),\n }))\n },\n\n moveVariable: (fromPageCode, toPageCode, variableCode, newOrder, fromRosterCode, toRosterCode) => {\n mutateForm(`Move variable \"${variableCode}\"`, (form) => {\n // Find and remove the variable from its source\n let movedVariable: IFormVariable | undefined\n\n const pagesAfterRemove = form.pages.map((p) => {\n if (p.code !== fromPageCode) return p\n if (fromRosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) => {\n if (r.code !== fromRosterCode) return r\n const v = r.variables.find((v) => v.code === variableCode)\n if (v) movedVariable = { ...v }\n return { ...r, variables: r.variables.filter((v) => v.code !== variableCode) }\n }),\n }\n }\n const v = p.variables.find((v) => v.code === variableCode)\n if (v) movedVariable = { ...v }\n return { ...p, variables: p.variables.filter((v) => v.code !== variableCode) }\n })\n\n if (!movedVariable) return form\n movedVariable.order = newOrder\n\n // Insert into target\n const pagesAfterInsert = pagesAfterRemove.map((p) => {\n if (p.code !== toPageCode) return p\n if (toRosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) => {\n if (r.code !== toRosterCode) return r\n const vars = [...r.variables, movedVariable!].sort((a, b) => a.order - b.order)\n return { ...r, variables: vars }\n }),\n }\n }\n const vars = [...p.variables, movedVariable!].sort((a, b) => a.order - b.order)\n return { ...p, variables: vars }\n })\n\n return { ...form, pages: pagesAfterInsert }\n })\n },\n\n // --- Selection ---\n\n select: (selection) => set({ selection }),\n clearSelection: () => set({ selection: { type: 'form' } }),\n\n // --- View ---\n\n setView: (view) => set({ view }),\n\n // --- History (Undo/Redo) ---\n\n undo: () => {\n const { history, historyIndex, form } = get()\n if (historyIndex < 0) return\n\n // Save current state as redo point if at the end\n if (historyIndex === history.length - 1) {\n const entry: HistoryEntry = {\n form: deepClone(form),\n description: 'Current state',\n timestamp: Date.now(),\n }\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n history: [...history, entry],\n })\n } else {\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n })\n }\n },\n\n redo: () => {\n const { history, historyIndex } = get()\n if (historyIndex >= history.length - 2) return\n const nextIndex = historyIndex + 2\n if (nextIndex < history.length) {\n set({\n form: deepClone(history[nextIndex]!.form),\n historyIndex: nextIndex - 1,\n isDirty: true,\n })\n }\n },\n\n canUndo: () => get().historyIndex >= 0,\n canRedo: () => {\n const { history, historyIndex } = get()\n return historyIndex < history.length - 2\n },\n\n // --- FormType CRUD ---\n\n addFormType: (type) => {\n const newType: IFormType = { ...type, id: generateId() }\n set((state) => ({ formTypes: [...state.formTypes, newType] }))\n },\n\n updateFormType: (id, patch) => {\n set((state) => ({\n formTypes: state.formTypes.map((t) => (t.id === id ? { ...t, ...patch } : t)),\n }))\n },\n\n removeFormType: (id) => {\n const state = get()\n // If the current form references this type, clear the reference first.\n if (state.form.formTypeId === id) {\n const { formTypeId: _drop, ...rest } = state.form\n set({ form: { ...(rest as IFormDefinition) } })\n }\n set((s) => ({ formTypes: s.formTypes.filter((t) => t.id !== id) }))\n },\n\n // --- Persistence ---\n\n setAdapter: (adapter) => set({ adapter }),\n\n save: async () => {\n const { adapter, form } = get()\n if (!adapter?.saveForm) return\n set({ isSaving: true })\n try {\n await adapter.saveForm(form)\n set({ isDirty: false })\n } finally {\n set({ isSaving: false })\n }\n },\n\n load: async (formId) => {\n const { adapter } = get()\n if (!adapter?.loadForm) return\n const form = await adapter.loadForm(formId)\n get().setForm(form)\n },\n\n // --- Import/Export ---\n\n exportJson: () => serializeForm(get().form),\n\n importJson: (json) => {\n const form = deserializeForm(json)\n get().setForm(form)\n },\n }\n})\n","/**\n * 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'\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\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=\"Form types\"\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 }}>Form types</h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\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 No form types yet. Add one below.\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={`Remove ${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 Ce type est utilisé par le formulaire courant. Confirmer la suppression ?\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 Supprimer\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 Annuler\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=\"New type name\"\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=\"CODE (auto)\"\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 + Ajouter\n </button>\n </section>\n </div>\n </div>\n )\n}\n","/**\n * Editor toolbar — top bar with form title, actions, and view controls.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { EditorView } from '../../store/types'\nimport { FormTypesDialog } from '../dialogs/FormTypesDialog'\n\nexport interface EditorToolbarProps {\n onSave?: () => void\n onExport?: () => void\n onImport?: () => void\n}\n\nexport function EditorToolbar({ onSave, onExport, onImport }: EditorToolbarProps) {\n const {\n form,\n updateFormMeta,\n view,\n setView,\n isDirty,\n isSaving,\n canUndo,\n canRedo,\n undo,\n redo,\n save,\n addPage,\n } = useEditorStore()\n\n const [showFormTypesDialog, setShowFormTypesDialog] = useState(false)\n\n const handleSave = async () => {\n await save()\n onSave?.()\n }\n\n const handleAddPage = () => {\n const nextOrder = form.pages.length\n addPage({\n id: `page-${Date.now()}`,\n code: `PAGE_${nextOrder + 1}`,\n name: `Page ${nextOrder + 1}`,\n order: nextOrder,\n isRepeatable: false,\n variables: [],\n rosters: [],\n })\n }\n\n const viewButtons: Array<{ view: EditorView; label: string }> = [\n { view: 'canvas', label: 'Editor' },\n { view: 'preview', label: 'Preview' },\n { view: 'json', label: 'JSON' },\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 (editable) */}\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => updateFormMeta({ name: e.target.value })}\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=\"Form name\"\n />\n\n {isDirty && (\n <span style={{ fontSize: '11px', color: '#f59e0b', fontWeight: 500 }}>Unsaved</span>\n )}\n\n <div style={{ flex: 1 }} />\n\n {/* Add page */}\n <ToolbarButton onClick={handleAddPage} label=\"+ Page\" />\n\n {/* Form types */}\n <ToolbarButton\n onClick={() => setShowFormTypesDialog(true)}\n label=\"Types\"\n title=\"Manage form types\"\n />\n\n {/* Separator */}\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* Undo / Redo */}\n <ToolbarButton onClick={undo} label=\"↩\" disabled={!canUndo()} title=\"Undo\" />\n <ToolbarButton onClick={redo} label=\"↪\" disabled={!canRedo()} title=\"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 ? 'Saving...' : 'Save'}\n primary\n disabled={isSaving || !isDirty}\n />\n\n {/* Export / Import */}\n {onExport && <ToolbarButton onClick={onExport} label=\"Export\" />}\n {onImport && <ToolbarButton onClick={onImport} label=\"Import\" />}\n\n <FormTypesDialog\n open={showFormTypesDialog}\n onClose={() => setShowFormTypesDialog(false)}\n />\n </div>\n )\n}\n\nfunction ToolbarButton({\n onClick,\n label,\n primary,\n disabled,\n title,\n}: {\n onClick: () => void\n label: string\n primary?: boolean\n disabled?: boolean\n title?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: primary ? 'none' : '1px solid #e2e8f0',\n backgroundColor: primary ? '#2563eb' : '#fff',\n color: primary ? '#fff' : '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n {label}\n </button>\n )\n}\n","/**\n * Toolbox — left panel. Click to add variables to selected page.\n * No drag & drop dependency.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { VariableType } from '@msbci/form-core'\n\nconst GROUPS = [\n { label: 'Text', items: [{ type: 'text' as VariableType, label: 'Text', icon: 'T' }, { type: 'textarea' as VariableType, label: 'Text Area', icon: '¶' }, { type: 'number' as VariableType, label: 'Number', icon: '#' }, { type: 'email' as VariableType, label: 'Email', icon: '@' }] },\n { label: 'Selection', items: [{ type: 'select' as VariableType, label: 'Dropdown', icon: '▼' }, { type: 'multiselect' as VariableType, label: 'Multi Select', icon: '☑' }, { type: 'radio' as VariableType, label: 'Radio', icon: '◉' }, { type: 'checkbox' as VariableType, label: 'Checkbox', icon: '☐' }] },\n { label: 'Date & Time', items: [{ type: 'date' as VariableType, label: 'Date', icon: '📅' }, { type: 'datetime' as VariableType, label: 'DateTime', icon: '🕐' }, { type: 'time' as VariableType, label: 'Time', icon: '⏰' }] },\n { label: 'Media', items: [{ type: 'file' as VariableType, label: 'File', icon: '📎' }, { type: 'image' as VariableType, label: 'Image', icon: '🖼' }, { type: 'gps' as VariableType, label: 'GPS', icon: '📍' }] },\n { label: 'Advanced', items: [{ type: 'rating' as VariableType, label: 'Rating', icon: '★' }, { type: 'calculated' as VariableType, label: 'Calculated', icon: 'fx' }, { type: 'hidden' as VariableType, label: 'Hidden', icon: '👁' }, { type: 'label' as VariableType, label: 'Label', icon: 'Aa' }] },\n]\n\nexport function ToolboxSimple() {\n const [search, setSearch] = useState('')\n const { form, selection, addVariable } = useEditorStore()\n\n const pageCode = selection.type === 'page' ? selection.pageCode\n : selection.type === 'variable' ? selection.pageCode\n : selection.type === 'roster' ? selection.pageCode\n : form.pages[0]?.code\n\n const handleAdd = (type: VariableType, label: string) => {\n if (!pageCode) return\n const page = form.pages.find((p) => p.code === pageCode)\n if (!page) return\n const code = `${type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(pageCode, {\n id: `var-${Date.now()}`,\n code,\n name: `New ${label}`,\n type,\n order: page.variables.length,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n })\n }\n\n const filtered = GROUPS.map((g) => ({\n ...g,\n items: g.items.filter((i) => i.label.toLowerCase().includes(search.toLowerCase())),\n })).filter((g) => g.items.length > 0)\n\n return (\n <div style={{ width: '220px', borderRight: '1px solid #e2e8f0', display: 'flex', flexDirection: 'column', backgroundColor: '#f8fafc', overflow: 'hidden' }}>\n <div style={{ padding: '12px', borderBottom: '1px solid #e2e8f0' }}>\n <input type=\"text\" placeholder=\"Search fields...\" 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' }}>Add a page first</div>}\n {filtered.map((group) => (\n <div key={group.label} style={{ marginBottom: '16px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#94a3b8', textTransform: 'uppercase', letterSpacing: '0.5px', marginBottom: '6px', padding: '0 4px' }}>\n {group.label}\n </div>\n {group.items.map((item) => (\n <div key={item.type} onClick={() => handleAdd(item.type, item.label)}\n style={{ display: 'flex', alignItems: 'center', gap: '8px', padding: '6px 8px', marginBottom: '2px', borderRadius: '6px', cursor: 'pointer', fontSize: '13px', color: '#334155', userSelect: 'none' }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = '#e2e8f0' }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent' }}\n >\n <span style={{ width: '20px', textAlign: 'center', fontSize: '14px' }}>{item.icon}</span>\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Canvas — center panel. Displays form structure.\n * Click to select. Supports roster creation and variable management.\n */\n\nimport { useEditorStore } from '../../store/editor-store'\nimport type { IFormPage, IFormVariable, IFormRoster } from '@msbci/form-core'\n\nfunction groupIntoRows(variables: IFormVariable[]): IFormVariable[][] {\n const sorted = variables.slice().sort((a, b) => a.order - b.order)\n const rows: IFormVariable[][] = []\n for (const v of sorted) {\n if (v.startWithNewLine === false && rows.length > 0) {\n rows[rows.length - 1]!.push(v)\n } else {\n rows.push([v])\n }\n }\n return rows\n}\n\nexport function CanvasSimple() {\n const { form } = useEditorStore()\n\n if (form.pages.length === 0) {\n return <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>Click \"+ Page\" in the toolbar to get started</div>\n }\n\n return (\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}>\n {form.pages.slice().sort((a, b) => a.order - b.order).map((page) => (\n <PageBlock key={page.code} page={page} />\n ))}\n </div>\n )\n}\n\nfunction PageBlock({ page }: { page: IFormPage }) {\n const { selection, select, removePage, addRoster } = useEditorStore()\n const isSelected = selection.type === 'page' && selection.pageCode === page.code\n\n const handleAddRoster = (e: React.MouseEvent) => {\n e.stopPropagation()\n const code = `ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addRoster(page.code, {\n id: `roster-${Date.now()}`,\n code,\n name: 'New Roster',\n rosterType: 'collection',\n order: page.rosters.length,\n variables: [],\n })\n }\n\n return (\n <div style={{\n marginBottom: '16px', border: `2px solid ${isSelected ? '#2563eb' : '#e2e8f0'}`,\n borderRadius: '8px', overflow: 'hidden',\n }}>\n {/* Page header */}\n <div onClick={() => select({ type: 'page', pageCode: page.code })}\n style={{\n padding: '10px 14px', backgroundColor: isSelected ? '#eff6ff' : '#f8fafc',\n borderBottom: '1px solid #e2e8f0', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '14px', fontWeight: 600, color: '#1e293b' }}>{page.name || 'Unnamed Page'}</span>\n {page.isRepeatable && <span style={{ fontSize: '10px', padding: '1px 6px', borderRadius: '4px', backgroundColor: '#dbeafe', color: '#2563eb', fontWeight: 500 }}>Repeatable</span>}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '12px', color: '#94a3b8' }}>\n {page.variables.length} fields · {page.rosters.length} rosters\n </span>\n <button onClick={(e) => { e.stopPropagation(); removePage(page.code) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px', padding: '2px 4px' }}>×</button>\n </div>\n </div>\n\n {/* Variables */}\n <div style={{ padding: '4px 0' }}>\n {groupIntoRows(page.variables).map((row, rowIdx) => (\n row.length === 1 ? (\n <VarRow key={row[0]!.code} variable={row[0]!} pageCode={page.code} />\n ) : (\n <div key={`row-${rowIdx}`} style={{ display: 'flex', gap: '2px', backgroundColor: '#f0f4ff', borderLeft: '2px solid #c7d2fe', margin: '1px 0' }}>\n {row.map((v) => (\n <div key={v.code} style={{ flex: v.colSpan ? `0 0 ${(v.colSpan / 12) * 100}%` : '1 1 0%', minWidth: 0 }}>\n <VarRow variable={v} pageCode={page.code} />\n </div>\n ))}\n </div>\n )\n ))}\n\n {/* Rosters */}\n {page.rosters.slice().sort((a, b) => a.order - b.order).map((r) => (\n <RosterBlock key={r.code} roster={r} pageCode={page.code} />\n ))}\n\n {/* Empty state */}\n {page.variables.length === 0 && page.rosters.length === 0 && (\n <div style={{ padding: '12px 14px', color: '#94a3b8', fontSize: '12px', fontStyle: 'italic' }}>\n Click a field type in the toolbox to add it here\n </div>\n )}\n </div>\n\n {/* Add roster button */}\n <div style={{ padding: '6px 14px', borderTop: '1px solid #e2e8f0' }}>\n <button onClick={handleAddRoster}\n style={{\n padding: '4px 10px', borderRadius: '4px', border: '1px dashed #d4a843',\n backgroundColor: 'transparent', color: '#92400e', fontSize: '11px',\n cursor: 'pointer', fontWeight: 500,\n }}>\n + Add Roster\n </button>\n </div>\n </div>\n )\n}\n\nfunction VarRow({ variable, pageCode, rosterCode }: { variable: IFormVariable; pageCode: string; rosterCode?: string }) {\n const { selection, select, removeVariable } = useEditorStore()\n const 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 }}>{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' }}>⚡</span>}\n {variable.dataSourceId && <span style={{ color: '#22c55e', fontSize: '11px' }}>⟳</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 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: 'New field',\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>▤ {roster.name}</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 pilot: {roster.pilotVariableCode}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span style={{ fontSize: '11px', color: '#b45309' }}>{roster.variables.length} vars</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 + Add field to roster\n </button>\n </div>\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\n\nexport function FormProperties() {\n const { form, formTypes, updateFormMeta } = useEditorStore()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={form.name} onChange={(v) => updateFormMeta({ name: v })} />\n <PropertyField label=\"Code\" value={form.code} onChange={(v) => updateFormMeta({ code: v })} />\n <PropertyField label=\"Description\" value={form.description ?? ''} onChange={(v) => updateFormMeta({ description: v })} multiline />\n <PropertyField label=\"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 Form type\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=\"\">— No type —</option>\n {formTypes.map((t) => (\n <option key={t.id} value={t.id}>{t.name}</option>\n ))}\n </select>\n </div>\n\n <div style={{ fontSize: '12px', color: '#94a3b8', marginTop: '8px' }}>\n {form.pages.length} pages ·{' '}\n {form.pages.reduce((sum, p) => sum + p.variables.length + p.rosters.reduce((rs, r) => rs + r.variables.length, 0), 0)} variables\n </div>\n </div>\n )\n}\n\nexport function PropertyField({\n label,\n value,\n onChange,\n multiline,\n type = 'text',\n}: {\n label: string\n value: string\n onChange: (value: string) => void\n multiline?: boolean\n type?: string\n}) {\n const inputStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }\n\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n {multiline ? (\n <textarea value={value} onChange={(e) => onChange(e.target.value)} rows={3} style={inputStyle} />\n ) : (\n <input type={type} value={value} onChange={(e) => onChange(e.target.value)} style={inputStyle} />\n )}\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport type { IFormPage } from '@msbci/form-core'\n\nexport function PageProperties({ page }: { page: IFormPage }) {\n const { updatePage } = useEditorStore()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={page.name} onChange={(v) => updatePage(page.code, { name: v })} />\n <PropertyField label=\"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 Repeatable page\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=\"Min instances\"\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=\"Max instances\"\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=\"Control variable code\"\n value={page.repeatConfig.controlVariableCode ?? ''}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, controlVariableCode: v || undefined } })}\n />\n <PropertyField\n label=\"Instance label template\"\n value={page.repeatConfig.instanceLabel ?? ''}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, instanceLabel: v || undefined } })}\n />\n </div>\n )}\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {page.variables.length} variables · {page.rosters.length} rosters\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 { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { IConditionRule, ConditionAction, ConditionOperator } from '@msbci/form-core'\nimport { generateId } 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 OPERATORS: Array<{ value: ConditionOperator; label: string }> = [\n { value: 'equals', label: '==' },\n { value: 'not_equals', label: '!=' },\n { value: 'greater_than', label: '>' },\n { value: 'less_than', label: '<' },\n { value: 'greater_than_or_equal', label: '>=' },\n { value: 'less_than_or_equal', label: '<=' },\n { value: 'contains', label: 'contains' },\n { value: 'not_contains', label: 'not contains' },\n { value: 'is_empty', label: 'is empty' },\n { value: 'is_not_empty', label: 'is not empty' },\n { value: 'starts_with', label: 'starts with' },\n { value: 'ends_with', label: 'ends with' },\n { value: 'in', label: 'in' },\n { value: 'regex', label: 'matches regex' },\n]\n\nconst ACTIONS: Array<{ value: ConditionAction; label: string }> = [\n { value: 'show', label: 'Show when' },\n { value: 'hide', label: 'Hide when' },\n { value: 'validate', label: 'Validate that' },\n { value: 'require', label: 'Require when' },\n { value: 'readonly', label: 'Read-only when' },\n { value: 'setValue', label: 'Set value when' },\n]\n\nconst NO_VALUE_OPERATORS: ConditionOperator[] = ['is_empty', 'is_not_empty']\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\nexport function ConditionBuilder({ conditions, onChange, availableVariables }: ConditionBuilderProps) {\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 Conditions ({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 />\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 + Add condition\n </button>\n </div>\n )\n}\n\nfunction ConditionRuleEditor({\n condition,\n isExpanded,\n onToggle,\n onUpdate,\n onRemove,\n availableVariables,\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}) {\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 = ACTIONS.find((a) => a.value === condition.action)?.label ?? 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 ? ` (${group.rules.length} rules)` : ''}\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 Action\n </label>\n <select\n value={condition.action}\n onChange={(e) => handleActionChange(e.target.value as ConditionAction)}\n style={selectStyle}\n >\n {ACTIONS.map((a) => <option key={a.value} value={a.value}>{a.label}</option>)}\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' }}>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 ALL (AND)\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 ANY (OR)\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=\"\">Variable...</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: '90px' }}\n >\n {OPERATORS.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\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=\"Value\"\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 + Add rule\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 {/* 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 Error message\n </label>\n <input\n type=\"text\"\n value={condition.errorMessage ?? ''}\n onChange={(e) => onUpdate({ errorMessage: e.target.value || undefined })}\n placeholder=\"Validation error message\"\n style={inputStyle}\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 Target variable code\n </label>\n <input\n type=\"text\"\n value={condition.targetVariableCode ?? ''}\n onChange={(e) => onUpdate({ targetVariableCode: e.target.value || undefined })}\n placeholder=\"TARGET_VAR\"\n style={inputStyle}\n />\n </div>\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n Value to set\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=\"Value\"\n style={inputStyle}\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---- Expression <-> UI conversion ----\n\nfunction operatorToSymbol(op: ConditionOperator): string {\n const map: Record<ConditionOperator, string> = {\n equals: '==', not_equals: '!=', contains: 'contains',\n not_contains: '!contains', starts_with: 'startsWith', ends_with: 'endsWith',\n greater_than: '>', less_than: '<', greater_than_or_equal: '>=', less_than_or_equal: '<=',\n is_empty: 'isEmpty', is_not_empty: 'isNotEmpty', in: 'in', not_in: '!in',\n between: 'between', regex: 'regex',\n }\n return map[op] ?? '=='\n}\n\nfunction groupToExpression(group: ConditionGroupUI, action: ConditionAction): string {\n if (group.rules.length === 0) return ''\n\n const parts = group.rules\n .filter((r) => r.variableCode)\n .map((rule) => {\n const varRef = `\\${${rule.variableCode}}`\n const sym = operatorToSymbol(rule.operator)\n\n if (rule.operator === 'is_empty') return `isEmpty(${varRef})`\n if (rule.operator === 'is_not_empty') return `isNotEmpty(${varRef})`\n if (rule.operator === 'contains') return `contains(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'starts_with') return `startsWith(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'ends_with') return `endsWith(${varRef}, \"${rule.value}\")`\n\n const val = /^\\d+(\\.\\d+)?$/.test(rule.value) ? rule.value : `\"${rule.value}\"`\n return `${varRef} ${sym} ${val}`\n })\n\n if (parts.length === 0) return ''\n\n const joined = parts.join(group.logic === 'and' ? ' && ' : ' || ')\n\n if (action === 'show') return `show(${joined})`\n if (action === 'hide') return `hide(${joined})`\n if (action === 'validate') return `ConditionEval(${joined})`\n return joined\n}\n\nfunction parseExpressionToGroup(expression: string): ConditionGroupUI {\n // Simple parsing — returns a basic group for the visual editor\n // Complex expressions are kept as raw text\n return { logic: 'and', rules: [] }\n}\n\n// ---- Shared styles ----\n\nconst selectStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n\nconst pillStyle: React.CSSProperties = {\n padding: '2px 8px', borderRadius: '10px', border: 'none',\n fontSize: '10px', fontWeight: 600, cursor: 'pointer',\n}\n","/**\n * DataSourceSelector — select a DataSourceConnector + map dependency fields.\n *\n * Allows:\n * - Selecting a registered connector by ID\n * - Mapping dependency keys to variable codes (e.g. departementId → ${DEPARTEMENT})\n * - Previewing the connector configuration\n */\n\nimport { useState } from 'react'\nimport type { IDataSourceConnector } from '@msbci/form-core'\n\nexport interface DataSourceSelectorProps {\n /** Currently selected connector ID */\n dataSourceId?: string\n /** Current dependency mapping: { depKey: variableCode } */\n dependencies?: Record<string, string>\n /** Registered connectors available for selection */\n availableConnectors: IDataSourceConnector[]\n /** All variable codes available for dependency mapping */\n availableVariables: Array<{ code: string; name: string }>\n /** Called when connector changes */\n onConnectorChange: (connectorId: string | undefined) => void\n /** Called when dependencies change */\n onDependenciesChange: (dependencies: Record<string, string>) => void\n}\n\nexport function DataSourceSelector({\n dataSourceId,\n dependencies = {},\n availableConnectors,\n availableVariables,\n onConnectorChange,\n onDependenciesChange,\n}: DataSourceSelectorProps) {\n const [newDepKey, setNewDepKey] = useState('')\n\n const selectedConnector = availableConnectors.find((c) => c.id === dataSourceId)\n const depEntries = Object.entries(dependencies)\n\n const handleAddDependency = () => {\n if (!newDepKey.trim()) return\n onDependenciesChange({ ...dependencies, [newDepKey.trim()]: '' })\n setNewDepKey('')\n }\n\n const handleRemoveDependency = (key: string) => {\n const next = { ...dependencies }\n delete next[key]\n onDependenciesChange(next)\n }\n\n const handleDepVarChange = (key: string, variableCode: string) => {\n onDependenciesChange({ ...dependencies, [key]: variableCode })\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px', padding: '8px', backgroundColor: '#f0fdf4', borderRadius: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#166534', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n Data Source Connector\n </div>\n\n {/* Connector selector */}\n <div>\n <label style={labelStyle}>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=\"\">None (static options)</option>\n {availableConnectors.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name} ({c.id})\n </option>\n ))}\n </select>\n </div>\n\n {/* Connector info */}\n {selectedConnector && (\n <div style={{ fontSize: '11px', color: '#166534', padding: '4px 6px', backgroundColor: '#dcfce7', borderRadius: '4px' }}>\n Connected to: <strong>{selectedConnector.name}</strong>\n </div>\n )}\n\n {/* Dependencies mapping */}\n {dataSourceId && (\n <>\n <div style={{ fontSize: '11px', fontWeight: 500, color: '#166534' }}>\n 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=\"\">Select variable...</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=\"Dependency key (e.g. parentId)\"\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 + Add\n </button>\n </div>\n </>\n )}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n fontSize: '11px', fontWeight: 500, color: '#166534', display: 'block', marginBottom: '2px',\n}\n\nconst selectStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', backgroundColor: '#fff',\n}\n\nconst inputStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n","/**\n * OptionsEditor — inline editor for IVariableOption[] on select / multiselect /\n * radio / checkbox variable types. Provides add/remove/edit with label-to-value\n * slug auto-fill and an empty-field visual warning.\n *\n * Drag & drop reordering is out of scope (handled in a follow-up).\n */\n\nimport type { IVariableOption } from '@msbci/form-core'\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\nexport function OptionsEditor({ options, onChange, disabled }: OptionsEditorProps) {\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, label: string) => {\n const current = options[index]\n const currentValue = asString(current.value)\n if (currentValue === '' && label) {\n updateOption(index, { label, value: slugifyValue(label) })\n } else {\n updateOption(index, { label })\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 inputBase: 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}>Options ({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 No options yet — add one to populate the choices.\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {options.map((opt, index) => {\n const labelStr = asString(opt.label)\n const valueStr = asString(opt.value)\n const labelInvalid = labelStr.trim() === ''\n const valueInvalid = valueStr.trim() === ''\n return (\n <div\n key={index}\n data-testid={`option-row-${index}`}\n style={{ display: 'flex', alignItems: 'center', gap: '6px' }}\n >\n <input\n type=\"text\"\n aria-label={`Option ${index + 1} label`}\n data-testid={`option-label-${index}`}\n value={labelStr}\n placeholder=\"Label\"\n disabled={disabled}\n onChange={(e) => handleLabelChange(index, e.target.value)}\n style={{ ...inputBase, border: labelInvalid ? errorBorder : okBorder }}\n />\n <input\n type=\"text\"\n aria-label={`Option ${index + 1} value`}\n data-testid={`option-value-${index}`}\n value={valueStr}\n placeholder=\"value\"\n disabled={disabled}\n onChange={(e) => handleValueChange(index, e.target.value)}\n style={{ ...inputBase, border: valueInvalid ? errorBorder : okBorder, maxWidth: '40%' }}\n />\n <button\n type=\"button\"\n aria-label={`Remove option ${index + 1}`}\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 + Ajouter une option\n </button>\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport { DataSourceSelector } from './DataSourceSelector'\nimport { OptionsEditor } from './OptionsEditor'\nimport type { IFormVariable, VariableType, IConditionRule, IDataSourceConnector, IVariableOption } from '@msbci/form-core'\n\nconst VARIABLE_TYPES: Array<{ value: VariableType; label: string }> = [\n { value: 'text', label: 'Text' },\n { value: 'textarea', label: 'Text Area' },\n { value: 'number', label: 'Number' },\n { value: 'date', label: 'Date' },\n { value: 'datetime', label: 'Date Time' },\n { value: 'time', label: 'Time' },\n { value: 'select', label: 'Dropdown' },\n { value: 'multiselect', label: 'Multi Select' },\n { value: 'radio', label: 'Radio' },\n { value: 'checkbox', label: 'Checkbox' },\n { value: 'file', label: 'File Upload' },\n { value: 'gps', label: 'GPS Location' },\n { value: 'rating', label: 'Rating (stars)' },\n { value: 'calculated', label: 'Calculated' },\n { value: 'hidden', label: 'Hidden' },\n { value: 'label', label: 'Label (display only)' },\n]\n\nexport interface VariablePropertiesProps {\n variable: IFormVariable\n pageCode: string\n rosterCode?: string\n /** Data source connectors available for selection */\n availableConnectors?: IDataSourceConnector[]\n}\n\nexport function VariableProperties({\n variable,\n pageCode,\n rosterCode,\n availableConnectors = [],\n}: VariablePropertiesProps) {\n const { form, updateVariable } = useEditorStore()\n\n const update = (updates: Partial<IFormVariable>) => {\n updateVariable(pageCode, variable.code, updates, rosterCode)\n }\n\n // Collect all variable codes in the form for condition builder / dependency mapping\n const allVariables = form.pages.flatMap((p) => [\n ...p.variables.map((v) => ({ code: v.code, name: v.name })),\n ...p.rosters.flatMap((r) => r.variables.map((v) => ({ code: v.code, name: v.name }))),\n ])\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={variable.name} onChange={(v) => update({ name: v })} />\n <PropertyField label=\"Code\" value={variable.code} onChange={() => {}} />\n <PropertyField label=\"Description\" value={variable.description ?? ''} onChange={(v) => update({ description: v || undefined })} />\n <PropertyField label=\"Placeholder\" value={variable.placeholder ?? ''} onChange={(v) => update({ placeholder: v || undefined })} />\n\n {/* Type */}\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n 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 {VARIABLE_TYPES.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n {/* Rating style */}\n {variable.type === 'rating' && (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n Rating style\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\">★ Stars</option>\n <option value=\"number\">123 Numbers</option>\n <option value=\"color\">● Color dots</option>\n </select>\n </div>\n )}\n\n {/* Layout */}\n <div style={{ padding: '8px', backgroundColor: '#f8fafc', borderRadius: '6px', display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase' }}>Layout</div>\n <CheckboxProperty\n label=\"Start new row\"\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 Column span (1-12)\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\">Auto (equal share)</option>\n {[1,2,3,4,5,6,7,8,9,10,11,12].map((n) => (\n <option key={n} value={n}>{n}/12{n === 6 ? ' (half)' : n === 4 ? ' (third)' : n === 12 ? ' (full)' : ''}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Flags */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <CheckboxProperty label=\"Required\" checked={variable.isRequired} onChange={(v) => update({ isRequired: v })} />\n <CheckboxProperty label=\"Read only\" checked={variable.isReadonly} onChange={(v) => update({ isReadonly: v })} />\n <CheckboxProperty label=\"Hidden by default\" checked={variable.isHidden} onChange={(v) => update({ isHidden: v })} />\n </div>\n\n {/* Calculated expression */}\n {variable.type === 'calculated' && (\n <PropertyField\n label=\"Expression\"\n value={variable.expression ?? ''}\n onChange={(v) => update({ expression: v || undefined })}\n multiline\n />\n )}\n\n {/* Data source connector */}\n {['select', 'multiselect', 'radio'].includes(variable.type) && (\n <DataSourceSelector\n dataSourceId={variable.dataSourceId}\n dependencies={variable.dataSourceDependencies}\n availableConnectors={availableConnectors}\n availableVariables={allVariables}\n onConnectorChange={(id) => update({ dataSourceId: id })}\n onDependenciesChange={(deps) => update({ dataSourceDependencies: Object.keys(deps).length > 0 ? deps : undefined })}\n />\n )}\n\n {/* Static options (when no data source) */}\n {['select', 'multiselect', 'radio', 'checkbox'].includes(variable.type) && !variable.dataSourceId && (\n <OptionsEditor\n options={variable.options ?? []}\n onChange={(options: IVariableOption[]) => update({ options })}\n />\n )}\n\n {/* Conditions */}\n <ConditionBuilder\n conditions={variable.conditions ?? []}\n onChange={(conditions) => update({ conditions })}\n availableVariables={allVariables}\n />\n </div>\n )\n}\n\nfunction CheckboxProperty({\n label,\n checked,\n onChange,\n}: {\n label: string\n checked: boolean\n onChange: (value: boolean) => void\n}) {\n return (\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}>\n <input type=\"checkbox\" checked={checked} onChange={(e) => onChange(e.target.checked)} />\n {label}\n </label>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport type { IFormRoster, RosterType } from '@msbci/form-core'\n\nconst ROSTER_TYPES: Array<{ value: RosterType; label: string }> = [\n { value: 'check', label: 'Check (multi-select checkboxes)' },\n { value: 'list', label: 'List (dropdown per row)' },\n { value: 'collection', label: 'Collection' },\n { value: 'collection_extend', label: 'Collection Extended' },\n]\n\nexport function RosterProperties({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { updateRoster } = useEditorStore()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={roster.name} onChange={(v) => updateRoster(pageCode, roster.code, { name: v })} />\n <PropertyField label=\"Code\" value={roster.code} onChange={() => {}} />\n\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n Roster Type\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 {ROSTER_TYPES.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n <PropertyField\n label=\"Pilot variable code\"\n value={roster.pilotVariableCode ?? ''}\n onChange={(v) => updateRoster(pageCode, roster.code, { pilotVariableCode: v || undefined })}\n />\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {roster.variables.length} variables · {roster.options?.length ?? 0} options\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 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\n const content = (() => {\n switch (selection.type) {\n case 'form':\n return <FormProperties />\n\n case 'page': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n return <PageProperties page={page} />\n }\n\n case 'roster': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n const roster = page?.rosters.find((r) => r.code === selection.rosterCode)\n if (!page || !roster) return <FormProperties />\n return <RosterProperties roster={roster} pageCode={page.code} />\n }\n\n case 'variable': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n const roster = selection.rosterCode\n ? page.rosters.find((r) => r.code === selection.rosterCode)\n : undefined\n const variables = roster ? roster.variables : page.variables\n const variable = variables.find((v) => v.code === selection.variableCode)\n if (!variable) return <FormProperties />\n return (\n <VariableProperties\n variable={variable}\n pageCode={page.code}\n rosterCode={selection.rosterCode}\n availableConnectors={availableConnectors}\n />\n )\n }\n }\n })()\n\n return (\n <div\n style={{\n width: '300px',\n borderLeft: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n overflowY: 'auto',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n borderBottom: '1px solid #e2e8f0',\n fontSize: '12px',\n fontWeight: 600,\n color: '#64748b',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n Properties\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, useRef } from 'react'\nimport type { ComponentType } from 'react'\nimport { useEditorStore } from '../store/editor-store'\nimport type { IEditorAdapter } from '../store/types'\nimport { EditorToolbar } from './toolbar/EditorToolbar'\nimport { ToolboxSimple } from './toolbox/ToolboxSimple'\nimport { CanvasSimple } from './canvas/CanvasSimple'\nimport { PropertiesPanel } from './properties/PropertiesPanel'\nimport type { IFormDefinition, IDataSourceConnector } from '@msbci/form-core'\n\nexport interface FormEditorProps {\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n adapter?: IEditorAdapter\n initialForm?: IFormDefinition\n formId?: string\n onChange?: (form: IFormDefinition) => void\n onSave?: () => void\n PreviewComponent?: ComponentType<{\n formSchema: IFormDefinition\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n mode?: string\n }>\n /** Custom Toolbox component (e.g. with drag & drop) */\n ToolboxComponent?: ComponentType<any>\n /** Custom Canvas component (e.g. with sortable drag & drop) */\n CanvasComponent?: ComponentType<any>\n /** Wrapper around the entire editor (e.g. DndContext) */\n Wrapper?: ComponentType<any>\n}\n\nexport function FormEditor({\n theme,\n dataSources,\n adapter,\n initialForm,\n formId,\n onChange,\n onSave,\n PreviewComponent,\n ToolboxComponent,\n CanvasComponent,\n Wrapper,\n}: FormEditorProps) {\n const { form, view, setForm, setAdapter, load } = useEditorStore()\n\n useEffect(() => {\n if (adapter) setAdapter(adapter)\n }, [adapter, setAdapter])\n\n useEffect(() => {\n if (initialForm) {\n setForm(initialForm)\n } else if (formId && adapter?.loadForm) {\n load(formId)\n }\n }, [initialForm, formId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Notify parent of changes — skip initial setForm to avoid loops\n const onChangeRef = useRef(onChange)\n const isInitialRef = useRef(true)\n onChangeRef.current = onChange\n useEffect(() => {\n if (isInitialRef.current) {\n isInitialRef.current = false\n return\n }\n onChangeRef.current?.(form)\n }, [form])\n\n const ActualToolbox = ToolboxComponent ?? ToolboxSimple\n const ActualCanvas = CanvasComponent ?? CanvasSimple\n const ActualWrapper = Wrapper ?? React.Fragment\n\n const content = (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <EditorToolbar onSave={onSave} />\n\n <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n {view === 'canvas' && (\n <>\n <ActualToolbox />\n <ActualCanvas />\n <PropertiesPanel availableConnectors={dataSources ? Object.values(dataSources) : []} />\n </>\n )}\n\n {view === 'preview' && PreviewComponent && (\n <div style={{ flex: 1, overflow: 'auto' }}>\n <PreviewComponent\n formSchema={form}\n theme={theme}\n dataSources={dataSources}\n mode=\"fill\"\n />\n </div>\n )}\n\n {view === 'preview' && !PreviewComponent && (\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>\n Pass PreviewComponent prop to enable preview\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 <ActualWrapper>{content}</ActualWrapper>\n}\n"]}
1
+ {"version":3,"sources":["../src/store/editor-store.ts","../src/components/dialogs/FormTypesDialog.tsx","../src/components/toolbar/EditorToolbar.tsx","../src/components/toolbox/ToolboxSimple.tsx","../src/components/canvas/CanvasSimple.tsx","../src/components/properties/FormProperties.tsx","../src/components/properties/PageProperties.tsx","../src/components/properties/ConditionBuilder.tsx","../src/components/properties/DataSourceSelector.tsx","../src/components/properties/OptionsEditor.tsx","../src/components/properties/VariableProperties.tsx","../src/components/properties/RosterProperties.tsx","../src/components/properties/PropertiesPanel.tsx","../src/components/FormEditor.tsx"],"names":["MAX_HISTORY","emptyForm","useEditorStore","create","set","get","pushHistory","description","state","entry","deepClone","history","mutateForm","mutator","newForm","form","updates","page","pageCode","p","orderedCodes","pageMap","reordered","code","index","roster","rosterCode","r","variable","variableCode","v","fromPageCode","toPageCode","newOrder","fromRosterCode","toRosterCode","movedVariable","pagesAfterRemove","pagesAfterInsert","vars","a","b","selection","view","historyIndex","nextIndex","type","newType","generateId","id","patch","t","_drop","rest","s","adapter","formId","serializeForm","json","deserializeForm","FormTypesDialog","open","onClose","formTypes","addFormType","updateFormType","removeFormType","newName","setNewName","useState","newCode","setNewCode","editingId","setEditingId","editName","setEditName","confirmDeleteId","setConfirmDeleteId","handleAdd","startEdit","currentName","commitEdit","askDelete","confirmDelete","jsx","jsxs","e","isEditing","inUse","awaitingConfirm","EditorToolbar","onSave","onExport","onImport","updateFormMeta","setView","isDirty","isSaving","canUndo","canRedo","undo","redo","save","addPage","showFormTypesDialog","setShowFormTypesDialog","handleSave","handleAddPage","nextOrder","viewButtons","ToolbarButton","btn","onClick","label","primary","disabled","title","GROUPS","ToolboxSimple","search","setSearch","addVariable","filtered","g","i","group","item","groupIntoRows","variables","sorted","rows","CanvasSimple","PageBlock","select","removePage","addRoster","isSelected","handleAddRoster","row","rowIdx","VarRow","RosterBlock","removeVariable","removeRoster","handleAddVarToRoster","FormProperties","PropertyField","sum","rs","value","onChange","multiline","inputStyle","PageProperties","updatePage","OPERATORS","ACTIONS","NO_VALUE_OPERATORS","ConditionBuilder","conditions","availableVariables","rosterContext","expandedId","setExpandedId","newCondition","handleRemove","c","handleUpdate","condition","ConditionRuleEditor","isExpanded","onToggle","onUpdate","onRemove","setGroup","parseExpressionToGroup","syncExpression","action","expr","groupToExpression","handleActionChange","handleAddRule","newRule","newGroup","handleRemoveRule","ruleId","handleRuleChange","handleLogicChange","logic","actionLabel","selectStyle","pillStyle","rule","o","validation","RosterConditionEngine","err","Fragment","operatorToSymbol","op","parts","varRef","sym","val","joined","expression","DataSourceSelector","dataSourceId","dependencies","availableConnectors","onConnectorChange","onDependenciesChange","newDepKey","setNewDepKey","selectedConnector","depEntries","handleAddDependency","handleRemoveDependency","key","next","handleDepVarChange","labelStyle","varCode","slugifyValue","asString","OptionsEditor","options","updateOption","opt","handleLabelChange","current","handleValueChange","addOption","removeOption","_","labelBlock","inputBase","okBorder","errorBorder","labelStr","valueStr","labelInvalid","valueInvalid","VARIABLE_TYPES","VariableProperties","updateVariable","update","allVariables","CheckboxProperty","n","deps","checked","ROSTER_TYPES","RosterProperties","updateRoster","PropertiesPanel","content","FormEditor","theme","dataSources","initialForm","PreviewComponent","ToolboxComponent","CanvasComponent","Wrapper","setForm","setAdapter","load","useEffect","onChangeRef","useRef","isInitialRef","ActualToolbox","ActualCanvas","ActualWrapper","React"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Editor store — Zustand store managing the complete editor state.\n *\n * All form mutations go through this store, which:\n * 1. Applies the change to the form definition\n * 2. Pushes a history entry (for undo/redo)\n * 3. Marks the form as dirty\n */\n\nimport { create } from 'zustand'\nimport { serializeForm, deserializeForm, generateId } from '@msbci/form-core'\nimport type { IFormDefinition, IFormPage, IFormRoster, IFormVariable, IFormType } from '@msbci/form-core'\nimport type { EditorStore, EditorSelection, EditorView, HistoryEntry, IEditorAdapter } from './types'\nimport { deepClone } from '@msbci/form-core'\n\nconst MAX_HISTORY = 50\n\nfunction emptyForm(): IFormDefinition {\n return {\n id: '',\n code: '',\n name: 'New Form',\n version: '1.0.0',\n isPublished: false,\n pages: [],\n }\n}\n\nexport const useEditorStore = create<EditorStore>((set, get) => {\n /** Push current form state to history before a mutation */\n function pushHistory(description: string) {\n const state = get()\n const entry: HistoryEntry = {\n form: deepClone(state.form),\n description,\n timestamp: Date.now(),\n }\n\n // Truncate forward history if we're not at the end\n const history = state.history.slice(0, state.historyIndex + 1)\n history.push(entry)\n\n // Limit history size\n if (history.length > MAX_HISTORY) {\n history.shift()\n }\n\n set({ history, historyIndex: history.length - 1 })\n }\n\n /** Apply a form mutation with history tracking */\n function mutateForm(description: string, mutator: (form: IFormDefinition) => IFormDefinition) {\n pushHistory(description)\n const state = get()\n const newForm = mutator(deepClone(state.form))\n set({ form: newForm, isDirty: true })\n }\n\n return {\n // Initial state\n form: emptyForm(),\n formTypes: [],\n selection: { type: 'form' },\n view: 'canvas',\n isDirty: false,\n isSaving: false,\n history: [],\n historyIndex: -1,\n adapter: null,\n\n // --- Form CRUD ---\n\n setForm: (form) => {\n set({ form: deepClone(form), isDirty: false, history: [], historyIndex: -1, selection: { type: 'form' } })\n },\n\n updateFormMeta: (updates) => {\n mutateForm('Update form metadata', (form) => ({ ...form, ...updates }))\n },\n\n // --- Page operations ---\n\n addPage: (page) => {\n mutateForm(`Add page \"${page.name}\"`, (form) => ({\n ...form,\n pages: [...form.pages, page],\n }))\n },\n\n updatePage: (pageCode, updates) => {\n mutateForm(`Update page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => (p.code === pageCode ? { ...p, ...updates } : p)),\n }))\n },\n\n removePage: (pageCode) => {\n mutateForm(`Remove page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.filter((p) => p.code !== pageCode),\n }))\n const state = get()\n if (state.selection.type === 'page' && state.selection.pageCode === pageCode) {\n set({ selection: { type: 'form' } })\n }\n },\n\n reorderPages: (orderedCodes) => {\n mutateForm('Reorder pages', (form) => {\n const pageMap = new Map(form.pages.map((p) => [p.code, p]))\n const reordered = orderedCodes\n .map((code, index) => {\n const page = pageMap.get(code)\n return page ? { ...page, order: index } : undefined\n })\n .filter((p): p is IFormPage => p !== undefined)\n return { ...form, pages: reordered }\n })\n },\n\n // --- Roster operations ---\n\n addRoster: (pageCode, roster) => {\n mutateForm(`Add roster \"${roster.name}\" to page \"${pageCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode ? { ...p, rosters: [...p.rosters, roster] } : p,\n ),\n }))\n },\n\n updateRoster: (pageCode, rosterCode, updates) => {\n mutateForm(`Update roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode\n ? {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode ? { ...r, ...updates } : r,\n ),\n }\n : p,\n ),\n }))\n },\n\n removeRoster: (pageCode, rosterCode) => {\n mutateForm(`Remove roster \"${rosterCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) =>\n p.code === pageCode\n ? { ...p, rosters: p.rosters.filter((r) => r.code !== rosterCode) }\n : p,\n ),\n }))\n },\n\n // --- Variable operations ---\n\n addVariable: (pageCode, variable, rosterCode) => {\n mutateForm(`Add variable \"${variable.name}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? { ...r, variables: [...r.variables, variable] }\n : r,\n ),\n }\n }\n return { ...p, variables: [...p.variables, variable] }\n }),\n }))\n },\n\n updateVariable: (pageCode, variableCode, updates, rosterCode) => {\n mutateForm(`Update variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? {\n ...r,\n variables: r.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n : r,\n ),\n }\n }\n return {\n ...p,\n variables: p.variables.map((v) =>\n v.code === variableCode ? { ...v, ...updates } : v,\n ),\n }\n }),\n }))\n },\n\n removeVariable: (pageCode, variableCode, rosterCode) => {\n mutateForm(`Remove variable \"${variableCode}\"`, (form) => ({\n ...form,\n pages: form.pages.map((p) => {\n if (p.code !== pageCode) return p\n if (rosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) =>\n r.code === rosterCode\n ? { ...r, variables: r.variables.filter((v) => v.code !== variableCode) }\n : r,\n ),\n }\n }\n return { ...p, variables: p.variables.filter((v) => v.code !== variableCode) }\n }),\n }))\n },\n\n moveVariable: (fromPageCode, toPageCode, variableCode, newOrder, fromRosterCode, toRosterCode) => {\n mutateForm(`Move variable \"${variableCode}\"`, (form) => {\n // Find and remove the variable from its source\n let movedVariable: IFormVariable | undefined\n\n const pagesAfterRemove = form.pages.map((p) => {\n if (p.code !== fromPageCode) return p\n if (fromRosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) => {\n if (r.code !== fromRosterCode) return r\n const v = r.variables.find((v) => v.code === variableCode)\n if (v) movedVariable = { ...v }\n return { ...r, variables: r.variables.filter((v) => v.code !== variableCode) }\n }),\n }\n }\n const v = p.variables.find((v) => v.code === variableCode)\n if (v) movedVariable = { ...v }\n return { ...p, variables: p.variables.filter((v) => v.code !== variableCode) }\n })\n\n if (!movedVariable) return form\n movedVariable.order = newOrder\n\n // Insert into target\n const pagesAfterInsert = pagesAfterRemove.map((p) => {\n if (p.code !== toPageCode) return p\n if (toRosterCode) {\n return {\n ...p,\n rosters: p.rosters.map((r) => {\n if (r.code !== toRosterCode) return r\n const vars = [...r.variables, movedVariable!].sort((a, b) => a.order - b.order)\n return { ...r, variables: vars }\n }),\n }\n }\n const vars = [...p.variables, movedVariable!].sort((a, b) => a.order - b.order)\n return { ...p, variables: vars }\n })\n\n return { ...form, pages: pagesAfterInsert }\n })\n },\n\n // --- Selection ---\n\n select: (selection) => set({ selection }),\n clearSelection: () => set({ selection: { type: 'form' } }),\n\n // --- View ---\n\n setView: (view) => set({ view }),\n\n // --- History (Undo/Redo) ---\n\n undo: () => {\n const { history, historyIndex, form } = get()\n if (historyIndex < 0) return\n\n // Save current state as redo point if at the end\n if (historyIndex === history.length - 1) {\n const entry: HistoryEntry = {\n form: deepClone(form),\n description: 'Current state',\n timestamp: Date.now(),\n }\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n history: [...history, entry],\n })\n } else {\n set({\n form: deepClone(history[historyIndex]!.form),\n historyIndex: historyIndex - 1,\n isDirty: true,\n })\n }\n },\n\n redo: () => {\n const { history, historyIndex } = get()\n if (historyIndex >= history.length - 2) return\n const nextIndex = historyIndex + 2\n if (nextIndex < history.length) {\n set({\n form: deepClone(history[nextIndex]!.form),\n historyIndex: nextIndex - 1,\n isDirty: true,\n })\n }\n },\n\n canUndo: () => get().historyIndex >= 0,\n canRedo: () => {\n const { history, historyIndex } = get()\n return historyIndex < history.length - 2\n },\n\n // --- FormType CRUD ---\n\n addFormType: (type) => {\n const newType: IFormType = { ...type, id: generateId() }\n set((state) => ({ formTypes: [...state.formTypes, newType] }))\n },\n\n updateFormType: (id, patch) => {\n set((state) => ({\n formTypes: state.formTypes.map((t) => (t.id === id ? { ...t, ...patch } : t)),\n }))\n },\n\n removeFormType: (id) => {\n const state = get()\n // If the current form references this type, clear the reference first.\n if (state.form.formTypeId === id) {\n const { formTypeId: _drop, ...rest } = state.form\n set({ form: { ...(rest as IFormDefinition) } })\n }\n set((s) => ({ formTypes: s.formTypes.filter((t) => t.id !== id) }))\n },\n\n // --- Persistence ---\n\n setAdapter: (adapter) => set({ adapter }),\n\n save: async () => {\n const { adapter, form } = get()\n if (!adapter?.saveForm) return\n set({ isSaving: true })\n try {\n await adapter.saveForm(form)\n set({ isDirty: false })\n } finally {\n set({ isSaving: false })\n }\n },\n\n load: async (formId) => {\n const { adapter } = get()\n if (!adapter?.loadForm) return\n const form = await adapter.loadForm(formId)\n get().setForm(form)\n },\n\n // --- Import/Export ---\n\n exportJson: () => serializeForm(get().form),\n\n importJson: (json) => {\n const form = deserializeForm(json)\n get().setForm(form)\n },\n }\n})\n","/**\n * 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'\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\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=\"Form types\"\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 }}>Form types</h3>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\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 No form types yet. Add one below.\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={`Remove ${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 Ce type est utilisé par le formulaire courant. Confirmer la suppression ?\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 Supprimer\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 Annuler\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=\"New type name\"\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=\"CODE (auto)\"\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 + Ajouter\n </button>\n </section>\n </div>\n </div>\n )\n}\n","/**\n * Editor toolbar — top bar with form title, actions, and view controls.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { EditorView } from '../../store/types'\nimport { FormTypesDialog } from '../dialogs/FormTypesDialog'\n\nexport interface EditorToolbarProps {\n onSave?: () => void\n onExport?: () => void\n onImport?: () => void\n}\n\nexport function EditorToolbar({ onSave, onExport, onImport }: EditorToolbarProps) {\n const {\n form,\n updateFormMeta,\n view,\n setView,\n isDirty,\n isSaving,\n canUndo,\n canRedo,\n undo,\n redo,\n save,\n addPage,\n } = useEditorStore()\n\n const [showFormTypesDialog, setShowFormTypesDialog] = useState(false)\n\n const handleSave = async () => {\n await save()\n onSave?.()\n }\n\n const handleAddPage = () => {\n const nextOrder = form.pages.length\n addPage({\n id: `page-${Date.now()}`,\n code: `PAGE_${nextOrder + 1}`,\n name: `Page ${nextOrder + 1}`,\n order: nextOrder,\n isRepeatable: false,\n variables: [],\n rosters: [],\n })\n }\n\n const viewButtons: Array<{ view: EditorView; label: string }> = [\n { view: 'canvas', label: 'Editor' },\n { view: 'preview', label: 'Preview' },\n { view: 'json', label: 'JSON' },\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 (editable) */}\n <input\n type=\"text\"\n value={form.name}\n onChange={(e) => updateFormMeta({ name: e.target.value })}\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=\"Form name\"\n />\n\n {isDirty && (\n <span style={{ fontSize: '11px', color: '#f59e0b', fontWeight: 500 }}>Unsaved</span>\n )}\n\n <div style={{ flex: 1 }} />\n\n {/* Add page */}\n <ToolbarButton onClick={handleAddPage} label=\"+ Page\" />\n\n {/* Form types */}\n <ToolbarButton\n onClick={() => setShowFormTypesDialog(true)}\n label=\"Types\"\n title=\"Manage form types\"\n />\n\n {/* Separator */}\n <div style={{ width: '1px', height: '24px', backgroundColor: '#e2e8f0' }} />\n\n {/* Undo / Redo */}\n <ToolbarButton onClick={undo} label=\"↩\" disabled={!canUndo()} title=\"Undo\" />\n <ToolbarButton onClick={redo} label=\"↪\" disabled={!canRedo()} title=\"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 ? 'Saving...' : 'Save'}\n primary\n disabled={isSaving || !isDirty}\n />\n\n {/* Export / Import */}\n {onExport && <ToolbarButton onClick={onExport} label=\"Export\" />}\n {onImport && <ToolbarButton onClick={onImport} label=\"Import\" />}\n\n <FormTypesDialog\n open={showFormTypesDialog}\n onClose={() => setShowFormTypesDialog(false)}\n />\n </div>\n )\n}\n\nfunction ToolbarButton({\n onClick,\n label,\n primary,\n disabled,\n title,\n}: {\n onClick: () => void\n label: string\n primary?: boolean\n disabled?: boolean\n title?: string\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: primary ? 'none' : '1px solid #e2e8f0',\n backgroundColor: primary ? '#2563eb' : '#fff',\n color: primary ? '#fff' : '#334155',\n fontSize: '13px',\n fontWeight: 500,\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n {label}\n </button>\n )\n}\n","/**\n * Toolbox — left panel. Click to add variables to selected page.\n * No drag & drop dependency.\n */\n\nimport { useState } from 'react'\nimport { useEditorStore } from '../../store/editor-store'\nimport type { VariableType } from '@msbci/form-core'\n\nconst GROUPS = [\n { label: 'Text', items: [{ type: 'text' as VariableType, label: 'Text', icon: 'T' }, { type: 'textarea' as VariableType, label: 'Text Area', icon: '¶' }, { type: 'number' as VariableType, label: 'Number', icon: '#' }, { type: 'email' as VariableType, label: 'Email', icon: '@' }] },\n { label: 'Selection', items: [{ type: 'select' as VariableType, label: 'Dropdown', icon: '▼' }, { type: 'multiselect' as VariableType, label: 'Multi Select', icon: '☑' }, { type: 'radio' as VariableType, label: 'Radio', icon: '◉' }, { type: 'checkbox' as VariableType, label: 'Checkbox', icon: '☐' }] },\n { label: 'Date & Time', items: [{ type: 'date' as VariableType, label: 'Date', icon: '📅' }, { type: 'datetime' as VariableType, label: 'DateTime', icon: '🕐' }, { type: 'time' as VariableType, label: 'Time', icon: '⏰' }] },\n { label: 'Media', items: [{ type: 'file' as VariableType, label: 'File', icon: '📎' }, { type: 'image' as VariableType, label: 'Image', icon: '🖼' }, { type: 'gps' as VariableType, label: 'GPS', icon: '📍' }] },\n { label: 'Advanced', items: [{ type: 'rating' as VariableType, label: 'Rating', icon: '★' }, { type: 'calculated' as VariableType, label: 'Calculated', icon: 'fx' }, { type: 'hidden' as VariableType, label: 'Hidden', icon: '👁' }, { type: 'label' as VariableType, label: 'Label', icon: 'Aa' }] },\n]\n\nexport function ToolboxSimple() {\n const [search, setSearch] = useState('')\n const { form, selection, addVariable } = useEditorStore()\n\n const pageCode = selection.type === 'page' ? selection.pageCode\n : selection.type === 'variable' ? selection.pageCode\n : selection.type === 'roster' ? selection.pageCode\n : form.pages[0]?.code\n\n const handleAdd = (type: VariableType, label: string) => {\n if (!pageCode) return\n const page = form.pages.find((p) => p.code === pageCode)\n if (!page) return\n const code = `${type.toUpperCase()}_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addVariable(pageCode, {\n id: `var-${Date.now()}`,\n code,\n name: `New ${label}`,\n type,\n order: page.variables.length,\n isRequired: false,\n isReadonly: false,\n isHidden: false,\n })\n }\n\n const filtered = GROUPS.map((g) => ({\n ...g,\n items: g.items.filter((i) => i.label.toLowerCase().includes(search.toLowerCase())),\n })).filter((g) => g.items.length > 0)\n\n return (\n <div style={{ width: '220px', borderRight: '1px solid #e2e8f0', display: 'flex', flexDirection: 'column', backgroundColor: '#f8fafc', overflow: 'hidden' }}>\n <div style={{ padding: '12px', borderBottom: '1px solid #e2e8f0' }}>\n <input type=\"text\" placeholder=\"Search fields...\" 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' }}>Add a page first</div>}\n {filtered.map((group) => (\n <div key={group.label} style={{ marginBottom: '16px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#94a3b8', textTransform: 'uppercase', letterSpacing: '0.5px', marginBottom: '6px', padding: '0 4px' }}>\n {group.label}\n </div>\n {group.items.map((item) => (\n <div key={item.type} onClick={() => handleAdd(item.type, item.label)}\n style={{ display: 'flex', alignItems: 'center', gap: '8px', padding: '6px 8px', marginBottom: '2px', borderRadius: '6px', cursor: 'pointer', fontSize: '13px', color: '#334155', userSelect: 'none' }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = '#e2e8f0' }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLElement).style.backgroundColor = 'transparent' }}\n >\n <span style={{ width: '20px', textAlign: 'center', fontSize: '14px' }}>{item.icon}</span>\n <span>{item.label}</span>\n </div>\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Canvas — center panel. Displays form structure.\n * Click to select. Supports roster creation and variable management.\n */\n\nimport { useEditorStore } from '../../store/editor-store'\nimport type { IFormPage, IFormVariable, IFormRoster } from '@msbci/form-core'\n\nfunction groupIntoRows(variables: IFormVariable[]): IFormVariable[][] {\n const sorted = variables.slice().sort((a, b) => a.order - b.order)\n const rows: IFormVariable[][] = []\n for (const v of sorted) {\n if (v.startWithNewLine === false && rows.length > 0) {\n rows[rows.length - 1]!.push(v)\n } else {\n rows.push([v])\n }\n }\n return rows\n}\n\nexport function CanvasSimple() {\n const { form } = useEditorStore()\n\n if (form.pages.length === 0) {\n return <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>Click \"+ Page\" in the toolbar to get started</div>\n }\n\n return (\n <div style={{ flex: 1, overflowY: 'auto', padding: '16px', backgroundColor: '#fff' }}>\n {form.pages.slice().sort((a, b) => a.order - b.order).map((page) => (\n <PageBlock key={page.code} page={page} />\n ))}\n </div>\n )\n}\n\nfunction PageBlock({ page }: { page: IFormPage }) {\n const { selection, select, removePage, addRoster } = useEditorStore()\n const isSelected = selection.type === 'page' && selection.pageCode === page.code\n\n const handleAddRoster = (e: React.MouseEvent) => {\n e.stopPropagation()\n const code = `ROSTER_${Date.now().toString(36).slice(-4).toUpperCase()}`\n addRoster(page.code, {\n id: `roster-${Date.now()}`,\n code,\n name: 'New Roster',\n rosterType: 'collection',\n order: page.rosters.length,\n variables: [],\n })\n }\n\n return (\n <div style={{\n marginBottom: '16px', border: `2px solid ${isSelected ? '#2563eb' : '#e2e8f0'}`,\n borderRadius: '8px', overflow: 'hidden',\n }}>\n {/* Page header */}\n <div onClick={() => select({ type: 'page', pageCode: page.code })}\n style={{\n padding: '10px 14px', backgroundColor: isSelected ? '#eff6ff' : '#f8fafc',\n borderBottom: '1px solid #e2e8f0', cursor: 'pointer',\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '14px', fontWeight: 600, color: '#1e293b' }}>{page.name || 'Unnamed Page'}</span>\n {page.isRepeatable && <span style={{ fontSize: '10px', padding: '1px 6px', borderRadius: '4px', backgroundColor: '#dbeafe', color: '#2563eb', fontWeight: 500 }}>Repeatable</span>}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{ fontSize: '12px', color: '#94a3b8' }}>\n {page.variables.length} fields · {page.rosters.length} rosters\n </span>\n <button onClick={(e) => { e.stopPropagation(); removePage(page.code) }}\n style={{ border: 'none', background: 'none', color: '#ef4444', cursor: 'pointer', fontSize: '14px', padding: '2px 4px' }}>×</button>\n </div>\n </div>\n\n {/* Variables */}\n <div style={{ padding: '4px 0' }}>\n {groupIntoRows(page.variables).map((row, rowIdx) => (\n row.length === 1 ? (\n <VarRow key={row[0]!.code} variable={row[0]!} pageCode={page.code} />\n ) : (\n <div key={`row-${rowIdx}`} style={{ display: 'flex', gap: '2px', backgroundColor: '#f0f4ff', borderLeft: '2px solid #c7d2fe', margin: '1px 0' }}>\n {row.map((v) => (\n <div key={v.code} style={{ flex: v.colSpan ? `0 0 ${(v.colSpan / 12) * 100}%` : '1 1 0%', minWidth: 0 }}>\n <VarRow variable={v} pageCode={page.code} />\n </div>\n ))}\n </div>\n )\n ))}\n\n {/* Rosters */}\n {page.rosters.slice().sort((a, b) => a.order - b.order).map((r) => (\n <RosterBlock key={r.code} roster={r} pageCode={page.code} />\n ))}\n\n {/* Empty state */}\n {page.variables.length === 0 && page.rosters.length === 0 && (\n <div style={{ padding: '12px 14px', color: '#94a3b8', fontSize: '12px', fontStyle: 'italic' }}>\n Click a field type in the toolbox to add it here\n </div>\n )}\n </div>\n\n {/* Add roster button */}\n <div style={{ padding: '6px 14px', borderTop: '1px solid #e2e8f0' }}>\n <button onClick={handleAddRoster}\n style={{\n padding: '4px 10px', borderRadius: '4px', border: '1px dashed #d4a843',\n backgroundColor: 'transparent', color: '#92400e', fontSize: '11px',\n cursor: 'pointer', fontWeight: 500,\n }}>\n + Add Roster\n </button>\n </div>\n </div>\n )\n}\n\nfunction VarRow({ variable, pageCode, rosterCode }: { variable: IFormVariable; pageCode: string; rosterCode?: string }) {\n const { selection, select, removeVariable } = useEditorStore()\n const 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 }}>{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' }}>⚡</span>}\n {variable.dataSourceId && <span style={{ color: '#22c55e', fontSize: '11px' }}>⟳</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 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: 'New field',\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>▤ {roster.name}</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 pilot: {roster.pilotVariableCode}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span style={{ fontSize: '11px', color: '#b45309' }}>{roster.variables.length} vars</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 + Add field to roster\n </button>\n </div>\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\n\nexport function FormProperties() {\n const { form, formTypes, updateFormMeta } = useEditorStore()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={form.name} onChange={(v) => updateFormMeta({ name: v })} />\n <PropertyField label=\"Code\" value={form.code} onChange={(v) => updateFormMeta({ code: v })} />\n <PropertyField label=\"Description\" value={form.description ?? ''} onChange={(v) => updateFormMeta({ description: v })} multiline />\n <PropertyField label=\"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 Form type\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=\"\">— No type —</option>\n {formTypes.map((t) => (\n <option key={t.id} value={t.id}>{t.name}</option>\n ))}\n </select>\n </div>\n\n <div style={{ fontSize: '12px', color: '#94a3b8', marginTop: '8px' }}>\n {form.pages.length} pages ·{' '}\n {form.pages.reduce((sum, p) => sum + p.variables.length + p.rosters.reduce((rs, r) => rs + r.variables.length, 0), 0)} variables\n </div>\n </div>\n )\n}\n\nexport function PropertyField({\n label,\n value,\n onChange,\n multiline,\n type = 'text',\n}: {\n label: string\n value: string\n onChange: (value: string) => void\n multiline?: boolean\n type?: string\n}) {\n const inputStyle: React.CSSProperties = {\n width: '100%',\n padding: '6px 8px',\n border: '1px solid #e2e8f0',\n borderRadius: '4px',\n fontSize: '13px',\n color: '#334155',\n outline: 'none',\n boxSizing: 'border-box',\n }\n\n return (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n {label}\n </label>\n {multiline ? (\n <textarea value={value} onChange={(e) => onChange(e.target.value)} rows={3} style={inputStyle} />\n ) : (\n <input type={type} value={value} onChange={(e) => onChange(e.target.value)} style={inputStyle} />\n )}\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport type { IFormPage } from '@msbci/form-core'\n\nexport function PageProperties({ page }: { page: IFormPage }) {\n const { updatePage } = useEditorStore()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={page.name} onChange={(v) => updatePage(page.code, { name: v })} />\n <PropertyField label=\"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 Repeatable page\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=\"Min instances\"\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=\"Max instances\"\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=\"Control variable code\"\n value={page.repeatConfig.controlVariableCode ?? ''}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, controlVariableCode: v || undefined } })}\n />\n <PropertyField\n label=\"Instance label template\"\n value={page.repeatConfig.instanceLabel ?? ''}\n onChange={(v) => updatePage(page.code, { repeatConfig: { ...page.repeatConfig!, instanceLabel: v || undefined } })}\n />\n </div>\n )}\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {page.variables.length} variables · {page.rosters.length} rosters\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 type {\n IConditionRule,\n ConditionAction,\n ConditionOperator,\n IRosterVariableRef,\n} from '@msbci/form-core'\nimport { 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 OPERATORS: Array<{ value: ConditionOperator; label: string }> = [\n { value: 'equals', label: '==' },\n { value: 'not_equals', label: '!=' },\n { value: 'greater_than', label: '>' },\n { value: 'less_than', label: '<' },\n { value: 'greater_than_or_equal', label: '>=' },\n { value: 'less_than_or_equal', label: '<=' },\n { value: 'contains', label: 'contains' },\n { value: 'not_contains', label: 'not contains' },\n { value: 'is_empty', label: 'is empty' },\n { value: 'is_not_empty', label: 'is not empty' },\n { value: 'starts_with', label: 'starts with' },\n { value: 'ends_with', label: 'ends with' },\n { value: 'in', label: 'in' },\n { value: 'regex', label: 'matches regex' },\n]\n\nconst ACTIONS: Array<{ value: ConditionAction; label: string }> = [\n { value: 'show', label: 'Show when' },\n { value: 'hide', label: 'Hide when' },\n { value: 'validate', label: 'Validate that' },\n { value: 'require', label: 'Require when' },\n { value: 'readonly', label: 'Read-only when' },\n { value: 'setValue', label: 'Set value when' },\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 [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 Conditions ({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 + Add condition\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 // 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 = ACTIONS.find((a) => a.value === condition.action)?.label ?? 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 ? ` (${group.rules.length} rules)` : ''}\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 Action\n </label>\n <select\n value={condition.action}\n onChange={(e) => handleActionChange(e.target.value as ConditionAction)}\n style={selectStyle}\n >\n {ACTIONS.map((a) => <option key={a.value} value={a.value}>{a.label}</option>)}\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' }}>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 ALL (AND)\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 ANY (OR)\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=\"\">Variable...</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: '90px' }}\n >\n {OPERATORS.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\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=\"Value\"\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 + Add rule\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 Error message\n </label>\n <input\n type=\"text\"\n value={condition.errorMessage ?? ''}\n onChange={(e) => onUpdate({ errorMessage: e.target.value || undefined })}\n placeholder=\"Validation error message\"\n style={inputStyle}\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 Target variable code\n </label>\n <input\n type=\"text\"\n value={condition.targetVariableCode ?? ''}\n onChange={(e) => onUpdate({ targetVariableCode: e.target.value || undefined })}\n placeholder=\"TARGET_VAR\"\n style={inputStyle}\n />\n </div>\n <div>\n <label style={{ fontSize: '11px', fontWeight: 500, color: '#64748b', display: 'block', marginBottom: '2px' }}>\n Value to set\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=\"Value\"\n style={inputStyle}\n />\n </div>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// ---- Expression <-> UI conversion ----\n\nfunction operatorToSymbol(op: ConditionOperator): string {\n const map: Record<ConditionOperator, string> = {\n equals: '==', not_equals: '!=', contains: 'contains',\n not_contains: '!contains', starts_with: 'startsWith', ends_with: 'endsWith',\n greater_than: '>', less_than: '<', greater_than_or_equal: '>=', less_than_or_equal: '<=',\n is_empty: 'isEmpty', is_not_empty: 'isNotEmpty', in: 'in', not_in: '!in',\n between: 'between', regex: 'regex',\n }\n return map[op] ?? '=='\n}\n\nfunction groupToExpression(group: ConditionGroupUI, action: ConditionAction): string {\n if (group.rules.length === 0) return ''\n\n const parts = group.rules\n .filter((r) => r.variableCode)\n .map((rule) => {\n const varRef = `\\${${rule.variableCode}}`\n const sym = operatorToSymbol(rule.operator)\n\n if (rule.operator === 'is_empty') return `isEmpty(${varRef})`\n if (rule.operator === 'is_not_empty') return `isNotEmpty(${varRef})`\n if (rule.operator === 'contains') return `contains(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'starts_with') return `startsWith(${varRef}, \"${rule.value}\")`\n if (rule.operator === 'ends_with') return `endsWith(${varRef}, \"${rule.value}\")`\n\n const val = /^\\d+(\\.\\d+)?$/.test(rule.value) ? rule.value : `\"${rule.value}\"`\n return `${varRef} ${sym} ${val}`\n })\n\n if (parts.length === 0) return ''\n\n const joined = parts.join(group.logic === 'and' ? ' && ' : ' || ')\n\n if (action === 'show') return `show(${joined})`\n if (action === 'hide') return `hide(${joined})`\n if (action === 'validate') return `ConditionEval(${joined})`\n return joined\n}\n\nfunction parseExpressionToGroup(expression: string): ConditionGroupUI {\n // Simple parsing — returns a basic group for the visual editor\n // Complex expressions are kept as raw text\n return { logic: 'and', rules: [] }\n}\n\n// ---- Shared styles ----\n\nconst selectStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none',\n}\n\nconst inputStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #e2e8f0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n\nconst pillStyle: React.CSSProperties = {\n padding: '2px 8px', borderRadius: '10px', border: 'none',\n fontSize: '10px', fontWeight: 600, cursor: 'pointer',\n}\n","/**\n * DataSourceSelector — select a DataSourceConnector + map dependency fields.\n *\n * Allows:\n * - Selecting a registered connector by ID\n * - Mapping dependency keys to variable codes (e.g. departementId → ${DEPARTEMENT})\n * - Previewing the connector configuration\n */\n\nimport { useState } from 'react'\nimport type { IDataSourceConnector } from '@msbci/form-core'\n\nexport interface DataSourceSelectorProps {\n /** Currently selected connector ID */\n dataSourceId?: string\n /** Current dependency mapping: { depKey: variableCode } */\n dependencies?: Record<string, string>\n /** Registered connectors available for selection */\n availableConnectors: IDataSourceConnector[]\n /** All variable codes available for dependency mapping */\n availableVariables: Array<{ code: string; name: string }>\n /** Called when connector changes */\n onConnectorChange: (connectorId: string | undefined) => void\n /** Called when dependencies change */\n onDependenciesChange: (dependencies: Record<string, string>) => void\n}\n\nexport function DataSourceSelector({\n dataSourceId,\n dependencies = {},\n availableConnectors,\n availableVariables,\n onConnectorChange,\n onDependenciesChange,\n}: DataSourceSelectorProps) {\n const [newDepKey, setNewDepKey] = useState('')\n\n const selectedConnector = availableConnectors.find((c) => c.id === dataSourceId)\n const depEntries = Object.entries(dependencies)\n\n const handleAddDependency = () => {\n if (!newDepKey.trim()) return\n onDependenciesChange({ ...dependencies, [newDepKey.trim()]: '' })\n setNewDepKey('')\n }\n\n const handleRemoveDependency = (key: string) => {\n const next = { ...dependencies }\n delete next[key]\n onDependenciesChange(next)\n }\n\n const handleDepVarChange = (key: string, variableCode: string) => {\n onDependenciesChange({ ...dependencies, [key]: variableCode })\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px', padding: '8px', backgroundColor: '#f0fdf4', borderRadius: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#166534', textTransform: 'uppercase', letterSpacing: '0.5px' }}>\n Data Source Connector\n </div>\n\n {/* Connector selector */}\n <div>\n <label style={labelStyle}>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=\"\">None (static options)</option>\n {availableConnectors.map((c) => (\n <option key={c.id} value={c.id}>\n {c.name} ({c.id})\n </option>\n ))}\n </select>\n </div>\n\n {/* Connector info */}\n {selectedConnector && (\n <div style={{ fontSize: '11px', color: '#166534', padding: '4px 6px', backgroundColor: '#dcfce7', borderRadius: '4px' }}>\n Connected to: <strong>{selectedConnector.name}</strong>\n </div>\n )}\n\n {/* Dependencies mapping */}\n {dataSourceId && (\n <>\n <div style={{ fontSize: '11px', fontWeight: 500, color: '#166534' }}>\n 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=\"\">Select variable...</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=\"Dependency key (e.g. parentId)\"\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 + Add\n </button>\n </div>\n </>\n )}\n </div>\n )\n}\n\nconst labelStyle: React.CSSProperties = {\n fontSize: '11px', fontWeight: 500, color: '#166534', display: 'block', marginBottom: '2px',\n}\n\nconst selectStyle: React.CSSProperties = {\n width: '100%', padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', backgroundColor: '#fff',\n}\n\nconst inputStyle: React.CSSProperties = {\n padding: '4px 6px', border: '1px solid #bbf7d0', borderRadius: '4px',\n fontSize: '12px', color: '#334155', outline: 'none', boxSizing: 'border-box',\n}\n","/**\n * OptionsEditor — inline editor for IVariableOption[] on select / multiselect /\n * radio / checkbox variable types. Provides add/remove/edit with label-to-value\n * slug auto-fill and an empty-field visual warning.\n *\n * Drag & drop reordering is out of scope (handled in a follow-up).\n */\n\nimport type { IVariableOption } from '@msbci/form-core'\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\nexport function OptionsEditor({ options, onChange, disabled }: OptionsEditorProps) {\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, label: string) => {\n const current = options[index]\n const currentValue = asString(current.value)\n if (currentValue === '' && label) {\n updateOption(index, { label, value: slugifyValue(label) })\n } else {\n updateOption(index, { label })\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 inputBase: 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}>Options ({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 No options yet — add one to populate the choices.\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n {options.map((opt, index) => {\n const labelStr = asString(opt.label)\n const valueStr = asString(opt.value)\n const labelInvalid = labelStr.trim() === ''\n const valueInvalid = valueStr.trim() === ''\n return (\n <div\n key={index}\n data-testid={`option-row-${index}`}\n style={{ display: 'flex', alignItems: 'center', gap: '6px' }}\n >\n <input\n type=\"text\"\n aria-label={`Option ${index + 1} label`}\n data-testid={`option-label-${index}`}\n value={labelStr}\n placeholder=\"Label\"\n disabled={disabled}\n onChange={(e) => handleLabelChange(index, e.target.value)}\n style={{ ...inputBase, border: labelInvalid ? errorBorder : okBorder }}\n />\n <input\n type=\"text\"\n aria-label={`Option ${index + 1} value`}\n data-testid={`option-value-${index}`}\n value={valueStr}\n placeholder=\"value\"\n disabled={disabled}\n onChange={(e) => handleValueChange(index, e.target.value)}\n style={{ ...inputBase, border: valueInvalid ? errorBorder : okBorder, maxWidth: '40%' }}\n />\n <button\n type=\"button\"\n aria-label={`Remove option ${index + 1}`}\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 + Ajouter une option\n </button>\n </div>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport { ConditionBuilder } from './ConditionBuilder'\nimport { DataSourceSelector } from './DataSourceSelector'\nimport { OptionsEditor } from './OptionsEditor'\nimport type { IFormVariable, VariableType, IConditionRule, IDataSourceConnector, IVariableOption } from '@msbci/form-core'\n\nconst VARIABLE_TYPES: Array<{ value: VariableType; label: string }> = [\n { value: 'text', label: 'Text' },\n { value: 'textarea', label: 'Text Area' },\n { value: 'number', label: 'Number' },\n { value: 'date', label: 'Date' },\n { value: 'datetime', label: 'Date Time' },\n { value: 'time', label: 'Time' },\n { value: 'select', label: 'Dropdown' },\n { value: 'multiselect', label: 'Multi Select' },\n { value: 'radio', label: 'Radio' },\n { value: 'checkbox', label: 'Checkbox' },\n { value: 'file', label: 'File Upload' },\n { value: 'gps', label: 'GPS Location' },\n { value: 'rating', label: 'Rating (stars)' },\n { value: 'calculated', label: 'Calculated' },\n { value: 'hidden', label: 'Hidden' },\n { value: 'label', label: 'Label (display only)' },\n]\n\nexport interface VariablePropertiesProps {\n variable: IFormVariable\n pageCode: string\n rosterCode?: string\n /** Data source connectors available for selection */\n availableConnectors?: IDataSourceConnector[]\n}\n\nexport function VariableProperties({\n variable,\n pageCode,\n rosterCode,\n availableConnectors = [],\n}: VariablePropertiesProps) {\n const { form, updateVariable } = useEditorStore()\n\n const update = (updates: Partial<IFormVariable>) => {\n updateVariable(pageCode, variable.code, updates, rosterCode)\n }\n\n // Collect all variable codes in the form for condition builder / dependency mapping\n const allVariables = form.pages.flatMap((p) => [\n ...p.variables.map((v) => ({ code: v.code, name: v.name })),\n ...p.rosters.flatMap((r) => r.variables.map((v) => ({ code: v.code, name: v.name }))),\n ])\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={variable.name} onChange={(v) => update({ name: v })} />\n <PropertyField label=\"Code\" value={variable.code} onChange={() => {}} />\n <PropertyField label=\"Description\" value={variable.description ?? ''} onChange={(v) => update({ description: v || undefined })} />\n <PropertyField label=\"Placeholder\" value={variable.placeholder ?? ''} onChange={(v) => update({ placeholder: v || undefined })} />\n\n {/* Type */}\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n 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 {VARIABLE_TYPES.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n {/* Rating style */}\n {variable.type === 'rating' && (\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n Rating style\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\">★ Stars</option>\n <option value=\"number\">123 Numbers</option>\n <option value=\"color\">● Color dots</option>\n </select>\n </div>\n )}\n\n {/* Layout */}\n <div style={{ padding: '8px', backgroundColor: '#f8fafc', borderRadius: '6px', display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <div style={{ fontSize: '11px', fontWeight: 600, color: '#64748b', textTransform: 'uppercase' }}>Layout</div>\n <CheckboxProperty\n label=\"Start new row\"\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 Column span (1-12)\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\">Auto (equal share)</option>\n {[1,2,3,4,5,6,7,8,9,10,11,12].map((n) => (\n <option key={n} value={n}>{n}/12{n === 6 ? ' (half)' : n === 4 ? ' (third)' : n === 12 ? ' (full)' : ''}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Flags */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '6px' }}>\n <CheckboxProperty label=\"Required\" checked={variable.isRequired} onChange={(v) => update({ isRequired: v })} />\n <CheckboxProperty label=\"Read only\" checked={variable.isReadonly} onChange={(v) => update({ isReadonly: v })} />\n <CheckboxProperty label=\"Hidden by default\" checked={variable.isHidden} onChange={(v) => update({ isHidden: v })} />\n </div>\n\n {/* Calculated expression */}\n {variable.type === 'calculated' && (\n <PropertyField\n label=\"Expression\"\n value={variable.expression ?? ''}\n onChange={(v) => update({ expression: v || undefined })}\n multiline\n />\n )}\n\n {/* Data source connector */}\n {['select', 'multiselect', 'radio'].includes(variable.type) && (\n <DataSourceSelector\n dataSourceId={variable.dataSourceId}\n dependencies={variable.dataSourceDependencies}\n availableConnectors={availableConnectors}\n availableVariables={allVariables}\n onConnectorChange={(id) => update({ dataSourceId: id })}\n onDependenciesChange={(deps) => update({ dataSourceDependencies: Object.keys(deps).length > 0 ? deps : undefined })}\n />\n )}\n\n {/* Static options (when no data source) */}\n {['select', 'multiselect', 'radio', 'checkbox'].includes(variable.type) && !variable.dataSourceId && (\n <OptionsEditor\n options={variable.options ?? []}\n onChange={(options: IVariableOption[]) => update({ options })}\n />\n )}\n\n {/* Conditions */}\n <ConditionBuilder\n conditions={variable.conditions ?? []}\n onChange={(conditions) => update({ conditions })}\n availableVariables={allVariables}\n rosterContext={(() => {\n if (!rosterCode) return undefined\n const page = form.pages.find((p) => p.code === pageCode)\n const roster = page?.rosters.find((r) => r.code === rosterCode)\n if (!roster) return undefined\n return {\n variables: roster.variables.map((v) => ({ code: v.code, order: v.order })),\n currentVariableCode: variable.code,\n currentVariableOrder: variable.order,\n }\n })()}\n />\n </div>\n )\n}\n\nfunction CheckboxProperty({\n label,\n checked,\n onChange,\n}: {\n label: string\n checked: boolean\n onChange: (value: boolean) => void\n}) {\n return (\n <label style={{ display: 'flex', alignItems: 'center', gap: '8px', fontSize: '13px', color: '#334155', cursor: 'pointer' }}>\n <input type=\"checkbox\" checked={checked} onChange={(e) => onChange(e.target.checked)} />\n {label}\n </label>\n )\n}\n","import { useEditorStore } from '../../store/editor-store'\nimport { PropertyField } from './FormProperties'\nimport type { IFormRoster, RosterType } from '@msbci/form-core'\n\nconst ROSTER_TYPES: Array<{ value: RosterType; label: string }> = [\n { value: 'check', label: 'Check (multi-select checkboxes)' },\n { value: 'list', label: 'List (dropdown per row)' },\n { value: 'collection', label: 'Collection' },\n { value: 'collection_extend', label: 'Collection Extended' },\n]\n\nexport function RosterProperties({ roster, pageCode }: { roster: IFormRoster; pageCode: string }) {\n const { updateRoster } = useEditorStore()\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <PropertyField label=\"Name\" value={roster.name} onChange={(v) => updateRoster(pageCode, roster.code, { name: v })} />\n <PropertyField label=\"Code\" value={roster.code} onChange={() => {}} />\n\n <div>\n <label style={{ display: 'block', fontSize: '12px', fontWeight: 500, color: '#64748b', marginBottom: '4px' }}>\n Roster Type\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 {ROSTER_TYPES.map((t) => (\n <option key={t.value} value={t.value}>{t.label}</option>\n ))}\n </select>\n </div>\n\n <PropertyField\n label=\"Pilot variable code\"\n value={roster.pilotVariableCode ?? ''}\n onChange={(v) => updateRoster(pageCode, roster.code, { pilotVariableCode: v || undefined })}\n />\n\n <div style={{ fontSize: '12px', color: '#94a3b8' }}>\n {roster.variables.length} variables · {roster.options?.length ?? 0} options\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 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\n const content = (() => {\n switch (selection.type) {\n case 'form':\n return <FormProperties />\n\n case 'page': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n return <PageProperties page={page} />\n }\n\n case 'roster': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n const roster = page?.rosters.find((r) => r.code === selection.rosterCode)\n if (!page || !roster) return <FormProperties />\n return <RosterProperties roster={roster} pageCode={page.code} />\n }\n\n case 'variable': {\n const page = form.pages.find((p) => p.code === selection.pageCode)\n if (!page) return <FormProperties />\n const roster = selection.rosterCode\n ? page.rosters.find((r) => r.code === selection.rosterCode)\n : undefined\n const variables = roster ? roster.variables : page.variables\n const variable = variables.find((v) => v.code === selection.variableCode)\n if (!variable) return <FormProperties />\n return (\n <VariableProperties\n variable={variable}\n pageCode={page.code}\n rosterCode={selection.rosterCode}\n availableConnectors={availableConnectors}\n />\n )\n }\n }\n })()\n\n return (\n <div\n style={{\n width: '300px',\n borderLeft: '1px solid #e2e8f0',\n backgroundColor: '#fff',\n overflowY: 'auto',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n borderBottom: '1px solid #e2e8f0',\n fontSize: '12px',\n fontWeight: 600,\n color: '#64748b',\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n Properties\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, useRef } from 'react'\nimport type { ComponentType } from 'react'\nimport { useEditorStore } from '../store/editor-store'\nimport type { IEditorAdapter } from '../store/types'\nimport { EditorToolbar } from './toolbar/EditorToolbar'\nimport { ToolboxSimple } from './toolbox/ToolboxSimple'\nimport { CanvasSimple } from './canvas/CanvasSimple'\nimport { PropertiesPanel } from './properties/PropertiesPanel'\nimport type { IFormDefinition, IDataSourceConnector } from '@msbci/form-core'\n\nexport interface FormEditorProps {\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n adapter?: IEditorAdapter\n initialForm?: IFormDefinition\n formId?: string\n onChange?: (form: IFormDefinition) => void\n onSave?: () => void\n PreviewComponent?: ComponentType<{\n formSchema: IFormDefinition\n theme?: Record<string, unknown>\n dataSources?: Record<string, IDataSourceConnector>\n mode?: string\n }>\n /** Custom Toolbox component (e.g. with drag & drop) */\n ToolboxComponent?: ComponentType<any>\n /** Custom Canvas component (e.g. with sortable drag & drop) */\n CanvasComponent?: ComponentType<any>\n /** Wrapper around the entire editor (e.g. DndContext) */\n Wrapper?: ComponentType<any>\n}\n\nexport function FormEditor({\n theme,\n dataSources,\n adapter,\n initialForm,\n formId,\n onChange,\n onSave,\n PreviewComponent,\n ToolboxComponent,\n CanvasComponent,\n Wrapper,\n}: FormEditorProps) {\n const { form, view, setForm, setAdapter, load } = useEditorStore()\n\n useEffect(() => {\n if (adapter) setAdapter(adapter)\n }, [adapter, setAdapter])\n\n useEffect(() => {\n if (initialForm) {\n setForm(initialForm)\n } else if (formId && adapter?.loadForm) {\n load(formId)\n }\n }, [initialForm, formId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Notify parent of changes — skip initial setForm to avoid loops\n const onChangeRef = useRef(onChange)\n const isInitialRef = useRef(true)\n onChangeRef.current = onChange\n useEffect(() => {\n if (isInitialRef.current) {\n isInitialRef.current = false\n return\n }\n onChangeRef.current?.(form)\n }, [form])\n\n const ActualToolbox = ToolboxComponent ?? ToolboxSimple\n const ActualCanvas = CanvasComponent ?? CanvasSimple\n const ActualWrapper = Wrapper ?? React.Fragment\n\n const content = (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n }}\n >\n <EditorToolbar onSave={onSave} />\n\n <div style={{ display: 'flex', flex: 1, overflow: 'hidden' }}>\n {view === 'canvas' && (\n <>\n <ActualToolbox />\n <ActualCanvas />\n <PropertiesPanel availableConnectors={dataSources ? Object.values(dataSources) : []} />\n </>\n )}\n\n {view === 'preview' && PreviewComponent && (\n <div style={{ flex: 1, overflow: 'auto' }}>\n <PreviewComponent\n formSchema={form}\n theme={theme}\n dataSources={dataSources}\n mode=\"fill\"\n />\n </div>\n )}\n\n {view === 'preview' && !PreviewComponent && (\n <div style={{ flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', color: '#94a3b8', fontSize: '14px' }}>\n Pass PreviewComponent prop to enable preview\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 <ActualWrapper>{content}</ActualWrapper>\n}\n"]}