@notmrabhi/flowforge 0.1.42 → 0.1.45

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.
Files changed (59) hide show
  1. package/dist/{SchemaBuilderDrawer-CiSdfXzJ.js → SchemaBuilderDrawer-CwnowdK9.js} +2 -2
  2. package/dist/{SchemaBuilderDrawer-CiSdfXzJ.js.map → SchemaBuilderDrawer-CwnowdK9.js.map} +1 -1
  3. package/dist/{SchemaBuilderDrawer-CUzYWGCN.js → SchemaBuilderDrawer-Dx6Nd6uF.js} +33 -33
  4. package/dist/{SchemaBuilderDrawer-CUzYWGCN.js.map → SchemaBuilderDrawer-Dx6Nd6uF.js.map} +1 -1
  5. package/dist/canvas.cjs +1 -1
  6. package/dist/canvas.d.ts +131 -1
  7. package/dist/canvas.js +1 -1
  8. package/dist/core.cjs +1 -1
  9. package/dist/core.d.ts +39 -0
  10. package/dist/core.js +22 -23
  11. package/dist/core.js.map +1 -1
  12. package/dist/form.cjs +1 -1
  13. package/dist/form.d.ts +121 -0
  14. package/dist/form.js +36 -33
  15. package/dist/{index-B8-KKaH_.js → index-C9s5LB8m.js} +2 -2
  16. package/dist/{index-B8-KKaH_.js.map → index-C9s5LB8m.js.map} +1 -1
  17. package/dist/{index-Buv1ylwP.js → index-CRQSsrv7.js} +2 -2
  18. package/dist/{index-Buv1ylwP.js.map → index-CRQSsrv7.js.map} +1 -1
  19. package/dist/index-CY05DpP5.js +10 -0
  20. package/dist/index-CY05DpP5.js.map +1 -0
  21. package/dist/{index-DjKhaaWf.js → index-DX3uS4JK.js} +2 -2
  22. package/dist/{index-DjKhaaWf.js.map → index-DX3uS4JK.js.map} +1 -1
  23. package/dist/{index-B74jTc2b.js → index-VUTKHpvC.js} +3134 -3006
  24. package/dist/index-VUTKHpvC.js.map +1 -0
  25. package/dist/{index-CiU9_8f1.js → index-ZD8Iiv9S.js} +2 -2
  26. package/dist/{index-CiU9_8f1.js.map → index-ZD8Iiv9S.js.map} +1 -1
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +143 -1
  30. package/dist/index.js +81 -79
  31. package/dist/index.js.map +1 -1
  32. package/dist/nodeRegistry.cjs +1 -1
  33. package/dist/nodeRegistry.cjs.map +1 -1
  34. package/dist/nodeRegistry.d.ts +39 -0
  35. package/dist/nodeRegistry.js +543 -23
  36. package/dist/nodeRegistry.js.map +1 -1
  37. package/dist/templateSkeletons-Cm_MIeT0.js +2 -0
  38. package/dist/templateSkeletons-Cm_MIeT0.js.map +1 -0
  39. package/dist/{templateSkeletons-CFMb6KIK.js → templateSkeletons-_F-r1-ef.js} +375 -373
  40. package/dist/templateSkeletons-_F-r1-ef.js.map +1 -0
  41. package/package.json +1 -1
  42. package/dist/index-B6xrei80.js +0 -87
  43. package/dist/index-B6xrei80.js.map +0 -1
  44. package/dist/index-B74jTc2b.js.map +0 -1
  45. package/dist/index-BrJBVztu.js +0 -2
  46. package/dist/index-BrJBVztu.js.map +0 -1
  47. package/dist/index-CXmgrKoe.js +0 -2
  48. package/dist/index-CXmgrKoe.js.map +0 -1
  49. package/dist/index-CqMPyOkL.js +0 -10
  50. package/dist/index-CqMPyOkL.js.map +0 -1
  51. package/dist/index-Dcur-XJ9.js +0 -36
  52. package/dist/index-Dcur-XJ9.js.map +0 -1
  53. package/dist/subWorkflowDescriptor-DYOYgBzX.js +0 -535
  54. package/dist/subWorkflowDescriptor-DYOYgBzX.js.map +0 -1
  55. package/dist/subWorkflowDescriptor-JDKi2INh.js +0 -2
  56. package/dist/subWorkflowDescriptor-JDKi2INh.js.map +0 -1
  57. package/dist/templateSkeletons-CFMb6KIK.js.map +0 -1
  58. package/dist/templateSkeletons-DKBMuT6K.js +0 -2
  59. package/dist/templateSkeletons-DKBMuT6K.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaBuilderDrawer-CiSdfXzJ.js","sources":["../src/FlowForm/useFlowForm.ts","../src/FlowForm/SchemaBuilder/types.ts","../src/FlowForm/SchemaBuilder/FieldConfigPanel.tsx","../src/FlowForm/styles/constants.ts","../src/FlowForm/SchemaBuilder/AddFieldModal.tsx","../src/FlowForm/SchemaBuilder/EditSchemaModal.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilder.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilderDrawer.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\r\nimport { useFormik } from 'formik';\r\nimport type { FormSchema, FieldDescriptor } from './types';\r\nimport { resolveFieldKey } from './types';\r\nimport type { FormulaConfig, ConditionConfig } from './types/formula';\r\nimport { buildValidationSchema } from './SchemaBuilder/buildValidationSchema';\r\nimport { buildEvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\nimport type { EvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseFlowFormOptions {\r\n schema: FormSchema;\r\n initialValues: Record<string, unknown>;\r\n /**\r\n * Called only when form is valid and submitted.\r\n * Receives raw formik values AND the fully-resolved evaluation payload\r\n * (formula chips resolved, condition expressions serialized).\r\n */\r\n onSubmit: (values: Record<string, unknown>, evaluation: EvaluationPayload) => void | Promise<void>;\r\n /** Pre-mark all fields as touched so errors show immediately (e.g. edit mode). */\r\n showErrorsImmediately?: boolean;\r\n}\r\n\r\nexport interface FlowFormInstance {\r\n // ── Public state ────────────────────────────────────────────────────────────\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n\r\n // ── Config state (formula chips + condition rows) ────────────────────────\r\n formulaConfig: FormulaConfig;\r\n conditionConfig: ConditionConfig;\r\n\r\n // ── Actions ─────────────────────────────────────────────────────────────────\r\n /** Validate and submit — safe to call from any button outside the form. */\r\n submit: () => void;\r\n reset: (nextValues?: Record<string, unknown>) => void;\r\n setFieldValue: (field: string, value: unknown) => void;\r\n\r\n // ── Internal — consumed only by DynamicFormRenderer / FlowForm ──────────\r\n _schema: FormSchema;\r\n _formik: ReturnType<typeof useFormik<Record<string, unknown>>>;\r\n _formulaConfig: FormulaConfig;\r\n _onFormulaConfigChange: (config: FormulaConfig) => void;\r\n _conditionConfig: ConditionConfig;\r\n _onConditionConfigChange: (config: ConditionConfig) => void;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport function useFlowForm({\r\n schema,\r\n initialValues,\r\n onSubmit,\r\n showErrorsImmediately = false,\r\n}: UseFlowFormOptions): FlowFormInstance {\r\n\r\n // Build Yup schema only when the field array reference actually changes.\r\n // Depending on `schema` (the wrapping object) rebuilt the entire Yup tree\r\n // on every render for hosts that construct schema inline.\r\n const fields = (schema.fields ?? []) as FieldDescriptor[];\r\n const validationSchema = useMemo(\r\n () => buildValidationSchema(fields),\r\n [fields],\r\n );\r\n\r\n // Pre-touch map — marks every field touched so errors show on open (edit mode)\r\n const initialTouched = useMemo(() => {\r\n if (!showErrorsImmediately) return undefined;\r\n return fields.reduce<Record<string, boolean>>((acc, f) => {\r\n const key = resolveFieldKey(f);\r\n if (key) acc[key] = true;\r\n return acc;\r\n }, {});\r\n }, [fields, showErrorsImmediately]);\r\n\r\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>({});\r\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\r\n\r\n // When initialValues identity changes (host loaded a different record),\r\n // Formik reinitializes — clear formula/condition config too so leftover\r\n // chip/condition state from the previous record doesn't bleed through.\r\n const initialValuesRef = useRef(initialValues);\r\n useEffect(() => {\r\n if (initialValuesRef.current === initialValues) return;\r\n initialValuesRef.current = initialValues;\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [initialValues]);\r\n\r\n const formik = useFormik<Record<string, unknown>>({\r\n initialValues,\r\n validationSchema,\r\n initialTouched,\r\n validateOnMount: showErrorsImmediately,\r\n validateOnChange: true,\r\n validateOnBlur: true,\r\n enableReinitialize: true,\r\n onSubmit: async (values) => {\r\n const evaluation = buildEvaluationPayload({ values, conditionConfig });\r\n await onSubmit(values, evaluation);\r\n },\r\n });\r\n\r\n const submit = useCallback(() => {\r\n formik.submitForm();\r\n }, [formik]);\r\n\r\n const reset = useCallback((nextValues?: Record<string, unknown>) => {\r\n formik.resetForm(nextValues ? { values: nextValues } : undefined);\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [formik]);\r\n\r\n return {\r\n values: formik.values,\r\n errors: formik.errors as Record<string, unknown>,\r\n isValid: formik.isValid,\r\n isDirty: formik.dirty,\r\n isSubmitting: formik.isSubmitting,\r\n\r\n formulaConfig,\r\n conditionConfig,\r\n\r\n submit,\r\n reset,\r\n setFieldValue: formik.setFieldValue,\r\n\r\n // Internals for DynamicFormRenderer\r\n _schema: schema,\r\n _formik: formik,\r\n _formulaConfig: formulaConfig,\r\n _onFormulaConfigChange: setFormulaConfig,\r\n _conditionConfig: conditionConfig,\r\n _onConditionConfigChange: setConditionConfig,\r\n };\r\n}\r\n","import { FlowForgeRegistry } from '../registry';\n\nexport const FIELD_TYPE_OPTIONS: Array<{ value: string; label: string }> = FlowForgeRegistry.getTypeOptions();\n","import { useState } from 'react';\nimport { Box, Collapse, Tooltip } from '@mui/material';\nimport { MdAdd, MdClose, MdCheck } from 'react-icons/md';\nimport type { FieldDescriptor, ConditionFieldDef, FieldConditionDef, FormSchema } from '../types';\nimport { FIELD_TYPE_OPTIONS } from './types';\nimport { FlowForgeRegistry } from '../registry';\nimport { FlowForm } from '../DynamicFormRenderer';\n\n// ─── Shared styles ────────────────────────────────────────────────────────────\n\n/** Use on <input> and <select> elements — matches app's form-control design */\nexport const input = 'form-control font-14';\n\n/** Use as className on <label> elements */\nexport const lbl = 'text-14 text-dark fw-medium mb-1 align-items-center d-flex gap-1';\n\nconst sectionTitle: React.CSSProperties = {\n fontSize: 10, fontWeight: 700, color: '#94a3b8',\n textTransform: 'uppercase', letterSpacing: 0.6,\n marginBottom: 8, display: 'block',\n};\n\n// ─── Array item type options ──────────────────────────────────────────────────\n\nconst ARRAY_ITEM_TYPES = [\n { value: 'text', label: 'Text' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' },\n { value: 'select', label: 'Select' },\n { value: 'object', label: 'Object (sub-fields)' },\n { value: 'array', label: 'Array (nested)' },\n];\n\n// ─── ColSpan picker ───────────────────────────────────────────────────────────\n\nconst COL_OPTIONS = [\n { value: 3, label: '1/4' },\n { value: 4, label: '1/3' },\n { value: 6, label: '1/2' },\n { value: 8, label: '2/3' },\n { value: 12, label: 'Full' },\n];\n\nfunction ColSpanPicker({ value, onChange }: { value?: number; onChange: (v: number) => void }) {\n const current = value ?? 12;\n return (\n <Box>\n <span className={lbl}>Column width</span>\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {COL_OPTIONS.map((opt) => (\n <Tooltip key={opt.value} title={`colSpan: ${opt.value}`} placement=\"top\">\n <Box\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: '1px solid',\n borderColor: current === opt.value ? '#6366f1' : '#dee2e6',\n borderRadius: '6px', cursor: 'pointer',\n bgcolor: current === opt.value ? '#eef2ff' : '#fff',\n color: current === opt.value ? '#6366f1' : '#6c757d',\n fontSize: 11, fontWeight: 600, py: 0.6, px: 0,\n '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n </Tooltip>\n ))}\n </Box>\n <Box sx={{ display: 'flex', gap: '3px', mt: 0.75 }}>\n {Array.from({ length: 12 }).map((_, i) => (\n <Box key={i} sx={{ flex: 1, height: 4, borderRadius: '2px', bgcolor: i < current ? '#6366f1' : '#e2e8f0', transition: 'background 0.12s' }} />\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Options editor (for select) ─────────────────────────────────────────────\n\ninterface SelectOption { label: string; value: string }\n\nfunction OptionsEditor({ options = [], onChange }: { options: SelectOption[]; onChange: (o: SelectOption[]) => void }) {\n function update(i: number, key: keyof SelectOption, val: string) {\n onChange(options.map((o, idx) => idx === i ? { ...o, [key]: val } : o));\n }\n return (\n <Box>\n <span className={lbl}>Options <span style={{ color: '#dc3545' }}>*</span></span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {options.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={opt.label} onChange={(e) => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"Value\" value={opt.value} onChange={(e) => update(i, 'value', e.target.value)} />\n <Box component=\"button\" onClick={() => onChange(options.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={() => onChange([...options, { label: '', value: '' }])} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add option\n </Box>\n </Box>\n );\n}\n\n// ─── Condition builder ────────────────────────────────────────────────────────\n\nconst CONDITION_COL_TYPES = [\n { value: 'operator', label: 'Operator (predefined)' },\n { value: 'select', label: 'Select' },\n { value: 'text', label: 'Text' },\n];\n\nfunction ConditionColEditor({ col, onChange, onDelete }: { col: ConditionFieldDef; onChange: (c: ConditionFieldDef) => void; onDelete: () => void }) {\n const isSelect = col.type === 'select';\n const isOperator = col.type === 'operator';\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '7px', p: 1.25, bgcolor: '#fff', display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: isOperator ? '#fef9c3' : '#eef2ff', color: isOperator ? '#92400e' : '#6366f1', flexShrink: 0 }}>\n {isOperator ? 'OPERATOR' : col.type.toUpperCase()}\n </Box>\n <Box sx={{ fontSize: 12, fontWeight: 600, color: '#0f172a', flex: 1 }}>{col.label || col.id || 'Unnamed'}</Box>\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Column type</label>\n <select value={col.type} onChange={(e) => onChange({ ...col, type: e.target.value, options: undefined })} className={input} style={{ cursor: 'pointer' }}>\n {CONDITION_COL_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box>\n <label className={lbl}>Column key <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={`${input} ${!col.id ? 'border-danger' : ''}`} value={col.id} onChange={(e) => onChange({ ...col, id: e.target.value })} placeholder=\"e.g. field, operator, value\" />\n {!col.id && <span style={{ fontSize: 10, color: '#dc3545' }}>Required — used as data key</span>}\n </Box>\n </Box>\n\n {!isOperator && (\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Label</label>\n <input className={input} value={col.label ?? ''} onChange={(e) => onChange({ ...col, label: e.target.value || undefined })} placeholder=\"Column label\" />\n </Box>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={col.placeholder ?? ''} onChange={(e) => onChange({ ...col, placeholder: e.target.value || undefined })} placeholder=\"Hint…\" />\n </Box>\n </Box>\n )}\n\n {isSelect && (\n <OptionsEditor options={(col.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...col, options: opts })} />\n )}\n\n {isOperator && (\n <Box sx={{ bgcolor: '#fefce8', border: '1px solid #fef08a', borderRadius: '6px', px: 1.25, py: 0.75 }}>\n <Box sx={{ fontSize: 11, color: '#78350f' }}>Predefined: equals, not equals, contains, starts with, ends with, is present, is not present, greater than, less than…</Box>\n </Box>\n )}\n\n {!isOperator && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={`formula-${col.id}`} checked={!!col.formula} onChange={(e) => onChange({ ...col, formula: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor={`formula-${col.id}`} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Formula input (chip editor)</label>\n </Box>\n )}\n </Box>\n );\n}\n\nfunction ConditionBuilder({ condition, onChange }: { condition: FieldConditionDef | undefined; onChange: (c: FieldConditionDef | undefined) => void }) {\n const enabled = !!condition;\n function toggle() { onChange(enabled ? undefined : { fields: [] }); }\n function addCol(type: string) {\n if (!condition) return;\n const defaultId = type === 'operator' ? 'operator' : condition.fields.filter((f) => f.type !== 'operator').length === 0 ? 'field' : 'value';\n onChange({ ...condition, fields: [...condition.fields, { id: defaultId, type }] });\n }\n function updateCol(i: number, col: ConditionFieldDef) {\n if (!condition) return;\n const next = [...condition.fields]; next[i] = col;\n onChange({ ...condition, fields: next });\n }\n function removeCol(i: number) {\n if (!condition) return;\n onChange({ ...condition, fields: condition.fields.filter((_, idx) => idx !== i) });\n }\n return (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75, mb: enabled ? 1.25 : 0 }}>\n <input type=\"checkbox\" id=\"enable-condition\" checked={enabled} onChange={toggle} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <span style={{ ...sectionTitle, margin: 0, color: enabled ? '#6366f1' : '#94a3b8' }}>Condition row</span>\n </Box>\n {enabled && condition && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {condition.fields.map((col, i) => (\n <ConditionColEditor key={i} col={col} onChange={(c) => updateCol(i, c)} onDelete={() => removeCol(i)} />\n ))}\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {CONDITION_COL_TYPES.map((t) => (\n <Box key={t.value} component=\"button\" onClick={() => addCol(t.value)} sx={{ flex: 1, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, py: 0.5, borderRadius: '6px', color: t.value === 'operator' ? '#92400e' : '#6366f1', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n + {t.value === 'operator' ? 'Operator' : t.label.split(' ')[0]}\n </Box>\n ))}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, flexWrap: 'wrap' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id=\"allow-groups\" checked={!!condition.allowGroups} onChange={(e) => onChange({ ...condition, allowGroups: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor=\"allow-groups\" className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Allow nested groups</label>\n </Box>\n {condition.allowGroups && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <label className={lbl} style={{ margin: 0 }}>Max depth</label>\n <input type=\"number\" min={1} max={5} className={input} style={{ width: 60, textAlign: 'center' }} value={condition.maxGroupDepth ?? ''} onChange={(e) => onChange({ ...condition, maxGroupDepth: e.target.value ? Number(e.target.value) : undefined })} placeholder=\"∞\" />\n </Box>\n )}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n\n// ─── CheckRow ─────────────────────────────────────────────────────────────────\n\nfunction CheckRow({ id, label, checked, onChange }: { id: string; label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={id} checked={checked} onChange={(e) => onChange(e.target.checked)} style={{ cursor: 'pointer', width: 14, height: 14, flexShrink: 0 }} />\n <label htmlFor={id} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>{label}</label>\n </Box>\n );\n}\n\n// ─── Tabs views editor ────────────────────────────────────────────────────────\n\ninterface TabView { id: string; label: string }\n\nfunction TabsViewsEditor({ views = [], onChange }: { views: TabView[]; onChange: (v: TabView[]) => void }) {\n function update(i: number, key: keyof TabView, val: string) {\n onChange(views.map((v, idx) => idx === i ? { ...v, [key]: val } : v));\n }\n function add() {\n const id = `tab${views.length + 1}`;\n onChange([...views, { id, label: `Tab ${views.length + 1}` }]);\n }\n return (\n <Box>\n <span className={lbl}>Views</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {views.map((view, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={view.label} onChange={e => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"ID (no spaces)\" value={view.id} onChange={e => update(i, 'id', e.target.value.replace(/\\s/g, '_'))} />\n <Box component=\"button\" onClick={() => onChange(views.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={add} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add view\n </Box>\n </Box>\n );\n}\n\n// ─── Button group picker ──────────────────────────────────────────────────────\n\nfunction ButtonGroup({ label: groupLabel, value, options, onChange }: {\n label: string;\n value: string;\n options: { value: string; label: string }[];\n onChange: (v: string) => void;\n}) {\n return (\n <Box>\n <span className={lbl}>{groupLabel}</span>\n <Box sx={{ display: 'flex', border: '1px solid #dee2e6', borderRadius: '7px', overflow: 'hidden' }}>\n {options.map(opt => (\n <Box\n key={opt.value}\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: 'none', borderRight: '1px solid #dee2e6', cursor: 'pointer',\n fontSize: 12, fontWeight: 600, py: 0.6,\n bgcolor: value === opt.value ? '#eef2ff' : '#fff',\n color: value === opt.value ? '#6366f1' : '#6c757d',\n '&:last-child': { borderRight: 'none' },\n '&:hover': { bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\ninterface FieldConfigPanelProps {\n field: FieldDescriptor;\n onChange: (updated: FieldDescriptor) => void;\n onSave: () => void;\n onCancel: () => void;\n noFooter?: boolean;\n}\n\nexport function FieldConfigPanel({ field, onChange, onSave, onCancel, noFooter }: FieldConfigPanelProps) {\n const [showAdvanced, setShowAdvanced] = useState(false);\n const fieldKey = field.id ?? field.name ?? '';\n const ext = field as Record<string, any>;\n const isOptionsField = field.type === 'select' || field.type === 'descriptive-select' || field.type === 'radio-group';\n\n const customRegistryDef = FlowForgeRegistry.get(field.type);\n const customConfigSchema = customRegistryDef?.configSchema;\n\n function set<K extends keyof FieldDescriptor>(key: K, value: FieldDescriptor[K]) {\n onChange({ ...field, [key]: value });\n }\n\n return (\n <>\n {/* Scrollable body */}\n <Box sx={{ flex: 1, overflowY: 'auto', px: 2.5, py: 2, display: 'flex', flexDirection: 'column', gap: 1.75 }}>\n\n {/* REQUIRED */}\n <Box>\n <span style={sectionTitle}>Required</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box>\n <label className={lbl}>Type</label>\n <select value={field.type} onChange={(e) => set('type', e.target.value)} className={input} style={{ cursor: 'pointer' }}>\n {FIELD_TYPE_OPTIONS.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: field.type === 'tabs' ? '1fr' : '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Field ID <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={field.id ?? field.name ?? ''} onChange={(e) => set('id', e.target.value)} placeholder=\"e.g. email\" />\n </Box>\n {field.type !== 'tabs' && (\n <Box>\n <label className={lbl}>Label <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={(field.label as string) ?? ''} onChange={(e) => set('label', e.target.value)} placeholder=\"Display label\" />\n </Box>\n )}\n </Box>\n {field.type !== 'tabs' && (\n <ColSpanPicker value={field.colSpan as number | undefined} onChange={(v) => set('colSpan', v === 12 ? undefined : v)} />\n )}\n </Box>\n </Box>\n\n {/* CUSTOM REGISTRY SCHEMA (Self-Building form config) */}\n {customConfigSchema && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Specific Settings</span>\n <FlowForm\n schema={{ layout: 'flat', compact: true, fields: customConfigSchema.fields }}\n initialValues={field as any}\n onValuesChange={(vals) => onChange({ ...field, ...vals } as FieldDescriptor)}\n onSubmit={() => { }}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Tabs config */}\n {field.type === 'tabs' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n {/* Content */}\n <span style={sectionTitle}>Content</span>\n <TabsViewsEditor\n views={(ext.tabs ?? []).map((t: any) => ({ id: t.id, label: t.label }))}\n onChange={newViews => {\n const existing: any[] = ext.tabs ?? [];\n const merged = newViews.map(v => {\n const prev = existing.find((e: any) => e.id === v.id);\n return prev ? { ...prev, ...v } : { ...v, fields: [] };\n });\n onChange({ ...field, tabs: merged } as FieldDescriptor);\n }}\n />\n\n {/* Interaction */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Interaction</span>\n <Box>\n <label className={lbl}>Disabled</label>\n <input className={input} value={ext.disabledExpr ?? ''} onChange={e => onChange({ ...field, disabledExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n\n {/* Appearance */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Appearance</span>\n <ButtonGroup\n label=\"Alignment\"\n value={ext.alignment ?? 'left'}\n options={[\n { value: 'left', label: '|←' },\n { value: 'center-left', label: '←|' },\n { value: 'center', label: '|·|' },\n { value: 'center-right', label: '|→' },\n { value: 'right', label: '→|' },\n ]}\n onChange={v => onChange({ ...field, alignment: v } as FieldDescriptor)}\n />\n <Box>\n <label className={lbl}>Hidden</label>\n <input className={input} value={ext.hiddenExpr ?? ''} onChange={e => onChange({ ...field, hiddenExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n <ButtonGroup\n label=\"Variant\"\n value={ext.variant ?? 'line'}\n options={[{ value: 'pill', label: 'Pill' }, { value: 'line', label: 'Line' }]}\n onChange={v => onChange({ ...field, variant: v } as FieldDescriptor)}\n />\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Active color</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeColor ?? '#6366f1'} onChange={e => onChange({ ...field, activeColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeColor ?? ''} onChange={e => onChange({ ...field, activeColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#6366f1\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Active text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeTextColor ?? '#ffffff'} onChange={e => onChange({ ...field, activeTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeTextColor ?? ''} onChange={e => onChange({ ...field, activeTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"auto\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Inactive text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.inactiveTextColor ?? '#64748b'} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.inactiveTextColor ?? ''} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#64748b\" style={{ flex: 1 }} />\n </Box>\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Styles</label>\n <input className={input} value={ext.styles ?? ''} onChange={e => onChange({ ...field, styles: e.target.value || undefined } as FieldDescriptor)} placeholder=\"None\" />\n </Box>\n\n {/* Spacing */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Spacing</span>\n <ButtonGroup\n label=\"Height\"\n value={ext.height ?? 'auto'}\n options={[{ value: 'auto', label: 'Auto' }, { value: 'fixed', label: 'Fixed' }]}\n onChange={v => onChange({ ...field, height: v } as FieldDescriptor)}\n />\n <ButtonGroup\n label=\"Margin\"\n value={ext.margin ?? 'normal'}\n options={[{ value: 'normal', label: 'Normal' }, { value: 'none', label: 'None' }]}\n onChange={v => onChange({ ...field, margin: v } as FieldDescriptor)}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Select/Radio Options */}\n {isOptionsField && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Options</span>\n <OptionsEditor options={(ext.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...field, options: opts } as FieldDescriptor)} />\n </Box>\n )}\n\n\n {/* TYPE-SPECIFIC — Array (flat settings only; child fields configured in next step) */}\n {field.type === 'array' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={sectionTitle}>Array settings</span>\n <Box>\n <label className={lbl}>Item type</label>\n <select className={input} style={{ cursor: 'pointer' }} value={ext.itemType ?? 'text'} onChange={(e) => onChange({ ...field, itemType: e.target.value } as FieldDescriptor)}>\n {ARRAY_ITEM_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Item label</label>\n <input className={input} value={ext.itemLabel ?? ''} onChange={(e) => onChange({ ...field, itemLabel: e.target.value || undefined } as FieldDescriptor)} placeholder='e.g. \"Member\"' />\n </Box>\n <Box>\n <label className={lbl}>Add button label</label>\n <input className={input} value={ext.addLabel ?? ''} onChange={(e) => onChange({ ...field, addLabel: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Add item\" />\n </Box>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Min items</label>\n <input type=\"number\" min={0} className={input} value={ext.minItems ?? ''} onChange={(e) => onChange({ ...field, minItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"0\" />\n </Box>\n <Box>\n <label className={lbl}>Max items</label>\n <input type=\"number\" min={1} className={input} value={ext.maxItems ?? ''} onChange={(e) => onChange({ ...field, maxItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"∞\" />\n </Box>\n </Box>\n {!['object', 'array', 'select'].includes(ext.itemType ?? 'text') && (\n <Box>\n <label className={lbl}>Item placeholder</label>\n <input className={input} value={ext.itemPlaceholder ?? ''} onChange={(e) => onChange({ ...field, itemPlaceholder: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Enter value…\" />\n </Box>\n )}\n </Box>\n )}\n\n {/* CONDITION */}\n <ConditionBuilder\n condition={field.condition as FieldConditionDef | undefined}\n onChange={(c) => onChange({ ...field, condition: c })}\n />\n\n {/* OPTIONAL */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box component=\"button\" onClick={() => setShowAdvanced((v) => !v)} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 0.5, p: 0, mb: showAdvanced ? 1.25 : 0 }}>\n <span style={{ ...sectionTitle, margin: 0, color: showAdvanced ? '#6366f1' : '#94a3b8' }}>\n {showAdvanced ? '▾' : '▸'} Optional settings\n </span>\n </Box>\n <Collapse in={showAdvanced}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.25 }}>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={(field.placeholder as string) ?? ''} onChange={(e) => set('placeholder', e.target.value || undefined)} placeholder=\"Hint text…\" />\n </Box>\n <Box>\n <label className={lbl}>Helper text</label>\n <input className={input} value={(field.helperText as string) ?? ''} onChange={(e) => set('helperText', e.target.value || undefined)} placeholder=\"Description…\" />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Info tooltip</label>\n <input className={input} value={(field.info as string) ?? ''} onChange={(e) => set('info', e.target.value || undefined)} placeholder=\"Shown in ℹ tooltip\" />\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1.5 }}>\n <CheckRow id={`${fieldKey}-req`} label=\"Required\" checked={!!field.required} onChange={(v) => set('required', v || undefined)} />\n <CheckRow id={`${fieldKey}-dis`} label=\"Disabled\" checked={!!field.disabled} onChange={(v) => set('disabled', v || undefined)} />\n <CheckRow id={`${fieldKey}-hid`} label=\"Hidden\" checked={!!field.hidden} onChange={(v) => set('hidden', v || undefined)} />\n <CheckRow id={`${fieldKey}-opt`} label=\"Show optional\" checked={!!field.showOptional} onChange={(v) => set('showOptional', v || undefined)} />\n <CheckRow id={`${fieldKey}-div`} label=\"Divider after\" checked={!!field.dividerAfter} onChange={(v) => set('dividerAfter', v || undefined)} />\n <CheckRow id={`${fieldKey}-frm`} label=\"Formula input\" checked={!!field.formula} onChange={(v) => set('formula', v || undefined)} />\n </Box>\n </Box>\n </Collapse>\n </Box>\n </Box>\n\n {/* Footer */}\n {!noFooter && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', gap: 1, justifyContent: 'flex-end', bgcolor: '#f8fafc', flexShrink: 0 }}>\n <Box component=\"button\" onClick={onCancel} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={onSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Save\n </Box>\n </Box>\n )}\n </>\n );\n}\n","// Shared design tokens for FlowForm field components.\n// Keep values in sync with the MUI theme when one is provided.\n\nexport const COLOR = {\n text: '#0f172a',\n textMuted: '#64748b',\n textLight: '#94a3b8',\n textPlaceholder: '#9ca3af',\n border: '#e2e8f0',\n borderHover: '#cbd5e1',\n borderFocus: '#6366f1',\n borderError: '#ef4444',\n borderInput: 'rgba(0,0,0,0.23)',\n accent: '#6366f1',\n accentHover: '#4f46e5',\n accentLight: '#f5f3ff',\n accentMuted: '#c7d2fe',\n error: '#ef4444',\n errorBg: '#fef2f2',\n success: '#15803d',\n successBg: '#f0fdf4',\n bg: '#ffffff',\n bgMuted: '#f8fafc',\n bgSubtle: '#f1f5f9',\n} as const;\n\nexport const RADIUS = {\n sm: '4px',\n md: '6px',\n lg: '8px',\n xl: '10px',\n xxl: '12px',\n} as const;\n\nexport const FONT_SIZE = {\n xs: 10,\n sm: 11,\n base: 12,\n md: 13,\n lg: 14,\n} as const;\n\nexport const SHADOW = {\n focusRing: `0 0 0 3px rgba(99,102,241,0.15)`,\n card: '0 1px 2px rgba(15,23,42,0.04)',\n} as const;\n\n/** Standard input sx props — apply as a base and override as needed */\nexport const INPUT_SX = {\n width: '100%',\n fontSize: FONT_SIZE.md,\n fontFamily: 'inherit',\n padding: '8px 12px',\n border: `1px solid ${COLOR.borderInput}`,\n borderRadius: RADIUS.md,\n outline: 'none',\n background: COLOR.bg,\n color: COLOR.text,\n boxSizing: 'border-box' as const,\n transition: 'border-color 0.15s, box-shadow 0.15s',\n};\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Stepper, Step, StepLabel } from '@mui/material';\nimport { MdClose, MdArrowBack, MdCheck } from 'react-icons/md';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport type { FieldDescriptor } from '../types';\nimport type { ConditionConfig } from '../types/formula';\nimport { COLOR, FONT_SIZE, INPUT_SX } from '../styles/constants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction defaultField(): FieldDescriptor {\n return { type: 'text', id: '', label: '', colSpan: 12 } as FieldDescriptor;\n}\n\n/** Returns true when the field type needs a \"Child fields\" config step */\nfunction needsChildStep(field: FieldDescriptor): boolean {\n return field.type === 'object' || field.type === 'array' || field.type === 'schema';\n}\n\nfunction childStepLabel(field: FieldDescriptor): string {\n if (field.type === 'object') return 'Child Fields';\n if (field.type === 'schema') return 'Schema Fields';\n const itemType = (field as any).itemType ?? 'text';\n if (itemType === 'object') return 'Item Fields';\n if (itemType === 'select') return 'Item Options';\n return 'Item Config';\n}\n\n// ─── Step 2 body: child fields / item config ──────────────────────────────────\n\nfunction ChildFieldsStep({ field, onChange }: { field: FieldDescriptor; onChange: (f: FieldDescriptor) => void }) {\n const ext = field as Record<string, any>;\n const itemType = ext.itemType ?? 'text';\n\n if (field.type === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields nested inside this object. Each child field can itself be an object or array.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Child fields\"\n />\n </Box>\n );\n }\n\n if (field.type === 'schema') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields inside this schema. When the form is filled, their values are collected into a single object as this field's value.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Schema fields\"\n />\n </Box>\n );\n }\n\n // Array — content varies by itemType\n if (field.type === 'array') {\n if (itemType === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields for each item in the array. Each item will be an object with these fields.\n </Typography>\n <SchemaBuilder\n value={(ext.itemFields ?? []) as FieldDescriptor[]}\n onChange={(itemFields) => onChange({ ...field, itemFields } as FieldDescriptor)}\n label=\"Item fields\"\n />\n </Box>\n );\n }\n\n if (itemType === 'select') {\n const opts = (ext.itemOptions ?? []) as { label: string; value: string }[];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Options available in each select item.\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {opts.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Label\"\n value={opt.label}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, label: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Value\"\n value={opt.value}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, value: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: opts.filter((_, idx) => idx !== i) } as FieldDescriptor)}\n sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}\n >\n ✕\n </Box>\n </Box>\n ))}\n </Box>\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: [...opts, { label: '', value: '' }] } as FieldDescriptor)}\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', justifyContent: 'center', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}\n >\n + Add option\n </Box>\n </Box>\n );\n }\n\n if (itemType === 'array') {\n const nestedItemType = ext.itemSchema?.itemType ?? 'text';\n const PRIMITIVE_TYPES = [\n { value: 'text', label: 'Text' }, { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' }, { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' }, { value: 'select', label: 'Select' }, { value: 'object', label: 'Object' },\n ];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Each item is itself an array. Configure the type of items inside the nested array.\n </Typography>\n <label style={{ fontSize: FONT_SIZE.sm, fontWeight: 600, color: COLOR.textMuted, display: 'block', marginBottom: 3 }}>Nested item type</label>\n <select\n style={{ ...INPUT_SX, padding: '6px 10px', cursor: 'pointer' }}\n value={nestedItemType}\n onChange={(e) => onChange({ ...field, itemSchema: { ...(ext.itemSchema ?? {}), itemType: e.target.value } } as FieldDescriptor)}\n >\n {PRIMITIVE_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n );\n }\n\n // Primitive itemType — nothing extra to configure\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ border: '1.5px dashed #e2e8f0', borderRadius: '8px', py: 3, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>\n No extra configuration needed for <strong>{itemType}</strong> items.\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#cbd5e1', mt: 0.5 }}>\n Item placeholder and labels are set in the previous step.\n </Typography>\n </Box>\n </Box>\n );\n }\n\n return null;\n}\n\n// ─── Preview using real FlowForm ──────────────────────────────────────────────\n\nfunction FieldPreview({ field }: { field: FieldDescriptor }) {\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\n const key = field.id ?? field.name ?? 'preview';\n const COL_OPTIONS = [\n { value: 3, label: '1/4' }, { value: 4, label: '1/3' },\n { value: 6, label: '1/2' }, { value: 8, label: '2/3' }, { value: 12, label: 'Full' },\n ];\n const colLabel = field.colSpan && field.colSpan < 12\n ? COL_OPTIONS.find((c) => c.value === field.colSpan)?.label ?? field.colSpan\n : 'Full';\n\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2, px: 1.25, py: 0.75, bgcolor: '#f0fdf4', border: '1px solid #bbf7d0', borderRadius: '7px' }}>\n <Typography sx={{ fontSize: 11, color: '#15803d', fontWeight: 500, flex: 1 }}>\n Live preview — interact to test the field\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#64748b' }}>Width: {colLabel}</Typography>\n </Box>\n <FlowForm\n schema={{ layout: 'flat', fields: [field] }}\n initialValues={{ [key]: field.type === 'array' ? [] : (field.type === 'object' || field.type === 'schema') ? {} : '' }}\n onSubmit={() => {}}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface AddFieldModalProps {\n open: boolean;\n initial?: FieldDescriptor;\n onSave: (field: FieldDescriptor) => void;\n onClose: () => void;\n editMode?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function AddFieldModal({ open, initial, onSave, onClose, editMode = false }: AddFieldModalProps) {\n const [step, setStep] = useState(1);\n const [draft, setDraft] = useState<FieldDescriptor>(() => initial ?? defaultField());\n\n function handleOpen() {\n setDraft(initial ?? defaultField());\n setStep(1);\n }\n\n const hasChild = needsChildStep(draft);\n const totalSteps = hasChild ? 3 : 2;\n\n // Step labels\n const stepLabels = hasChild\n ? ['Configure', childStepLabel(draft), 'Preview']\n : ['Configure', 'Preview'];\n\n const canNext = !!(draft.id || (draft as any).name) && !!draft.type;\n\n function goNext() { setStep((s) => Math.min(s + 1, totalSteps)); }\n function goBack() { setStep((s) => Math.max(s - 1, 1)); }\n\n function handleSave() { onSave(draft); onClose(); }\n\n // Map logical step to display step index (0-based for MUI Stepper)\n const activeStepIdx = step - 1;\n const isLastStep = step === totalSteps;\n const isPreview = (hasChild && step === 3) || (!hasChild && step === 2);\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '90vh' } }}\n >\n {/* Header */}\n <Box sx={{ px: 2.5, pt: 1.75, pb: 0, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1.5 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a', flex: 1 }}>\n {editMode ? 'Edit Field' : 'Add Field'}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n <Stepper activeStep={activeStepIdx} sx={{ pb: 1.5 }}>\n {stepLabels.map((label, i) => (\n <Step key={label} completed={activeStepIdx > i}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto' }}>\n {step === 1 && (\n <FieldConfigPanel field={draft} onChange={setDraft} onSave={goNext} onCancel={onClose} noFooter />\n )}\n {step === 2 && hasChild && (\n <ChildFieldsStep field={draft} onChange={setDraft} />\n )}\n {isPreview && (\n <FieldPreview field={draft} />\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {step > 1 && (\n <Box component=\"button\" onClick={goBack} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 500, color: '#6c757d', px: 0, '&:hover': { color: '#0f172a' } }}>\n <MdArrowBack size={14} /> Back\n </Box>\n )}\n <Box sx={{ flex: 1 }} />\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n {isLastStep ? (\n <Box component=\"button\" onClick={handleSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> {editMode ? 'Save changes' : 'Add field'}\n </Box>\n ) : (\n <Box component=\"button\" onClick={goNext} disabled={!canNext} sx={{ border: 'none', cursor: canNext ? 'pointer' : 'not-allowed', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: canNext ? '#6366f1' : '#c7d2fe', color: '#fff', '&:hover': { bgcolor: canNext ? '#4f46e5' : '#c7d2fe' } }}>\n Next →\n </Box>\n )}\n </Box>\n </Dialog>\n );\n}\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Tooltip } from '@mui/material';\nimport { MdClose, MdDeleteOutline, MdEdit, MdDragIndicator, MdCheck } from 'react-icons/md';\nimport { AddFieldModal } from './AddFieldModal';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Field row in list ────────────────────────────────────────────────────────\n\ninterface ListRowProps {\n field: FieldDescriptor;\n index: number;\n total: number;\n onEdit: () => void;\n onDelete: () => void;\n onMoveUp: () => void;\n onMoveDown: () => void;\n}\n\nfunction ListRow({ field, index, total, onEdit, onDelete, onMoveUp, onMoveDown }: ListRowProps) {\n const label = (field.label as string) || field.id || field.name || 'Untitled';\n const key = field.id ?? field.name ?? '';\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, px: 1.5, py: 1, border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff' }}>\n {/* Drag handle / move buttons */}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25, color: '#cbd5e1' }}>\n <Box component=\"button\" onClick={onMoveUp} disabled={index === 0} sx={{ background: 'none', border: 'none', p: 0, cursor: index === 0 ? 'default' : 'pointer', color: index === 0 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === 0 ? '#e2e8f0' : '#475569' } }}>▲</Box>\n <Box component=\"button\" onClick={onMoveDown} disabled={index === total - 1} sx={{ background: 'none', border: 'none', p: 0, cursor: index === total - 1 ? 'default' : 'pointer', color: index === total - 1 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === total - 1 ? '#e2e8f0' : '#475569' } }}>▼</Box>\n </Box>\n\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: '#eef2ff', color: '#6366f1', flexShrink: 0 }}>\n {field.type}\n </Box>\n\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography sx={{ fontSize: 13, fontWeight: 600, color: '#0f172a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {label}\n {field.required && <Box component=\"span\" sx={{ color: '#dc3545', ml: 0.25 }}>*</Box>}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8', fontFamily: 'monospace' }}>{key}</Typography>\n </Box>\n\n <Tooltip title=\"Edit field\" placement=\"top\">\n <Box component=\"button\" onClick={onEdit} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#f1f5f9', color: '#475569' } }}>\n <MdEdit size={14} />\n </Box>\n </Tooltip>\n <Tooltip title=\"Remove field\" placement=\"top\">\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#fee2e2', color: '#dc2626' } }}>\n <MdDeleteOutline size={16} />\n </Box>\n </Tooltip>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface EditSchemaModalProps {\n open: boolean;\n value: FieldDescriptor[];\n onSave: (fields: FieldDescriptor[]) => void;\n onClose: () => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function EditSchemaModal({ open, value, onSave, onClose }: EditSchemaModalProps) {\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const [editingIdx, setEditingIdx] = useState<number | null>(null);\n\n function handleOpen() { setDraft(value); setEditingIdx(null); }\n\n function handleDelete(i: number) { setDraft((d) => d.filter((_, idx) => idx !== i)); }\n\n function handleMove(i: number, dir: -1 | 1) {\n setDraft((d) => {\n const next = [...d];\n const j = i + dir;\n if (j < 0 || j >= next.length) return d;\n [next[i], next[j]] = [next[j], next[i]];\n return next;\n });\n }\n\n function handleSaveField(updated: FieldDescriptor) {\n if (editingIdx === null) return;\n setDraft((d) => { const next = [...d]; next[editingIdx] = updated; return next; });\n setEditingIdx(null);\n }\n\n function handleDone() { onSave(draft); onClose(); }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '85vh' } }}\n >\n {/* Header */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2.5, py: 1.75, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>Edit Schema</Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>{draft.length} field{draft.length !== 1 ? 's' : ''} defined</Typography>\n </Box>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n {draft.length === 0 ? (\n <Box sx={{ border: '1.5px dashed rgba(0,0,0,0.12)', borderRadius: '8px', py: 4, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.75 }}>\n {draft.map((field, i) => (\n <ListRow\n key={`${field.id ?? field.name}-${i}`}\n field={field}\n index={i}\n total={draft.length}\n onEdit={() => setEditingIdx(i)}\n onDelete={() => handleDelete(i)}\n onMoveUp={() => handleMove(i, -1)}\n onMoveDown={() => handleMove(i, 1)}\n />\n ))}\n </Box>\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </Dialog>\n\n {/* Edit field modal (nested) */}\n {editingIdx !== null && (\n <AddFieldModal\n open={editingIdx !== null}\n initial={draft[editingIdx]}\n onSave={handleSaveField}\n onClose={() => setEditingIdx(null)}\n editMode\n />\n )}\n </>\n );\n}\n","import { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport { Tooltip } from '@mui/material';\nimport { MdAdd, MdSettings, MdAccountTree } from 'react-icons/md';\nimport { FaWpforms } from \"react-icons/fa6\";\nimport { AddFieldModal } from './AddFieldModal';\nimport { EditSchemaModal } from './EditSchemaModal';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport { buildValidationSchema } from './buildValidationSchema';\nimport { buildEvaluationPayload, serializeConditionExpressions } from '../DynamicFormRenderer/formulaUtils';\nimport type { FieldSuggestion } from './AddFieldPanel';\nimport type { FieldDescriptor } from '../types';\nimport type { FormulaConfig, ConditionConfig } from '../types/formula';\nimport { VariablePickerProvider, type VariableGroup } from '../VariablePicker/VariablePickerContext';\nimport { VariablePicker } from '../VariablePicker/VariablePicker';\nimport { TabsEditContext } from './TabsEditContext';\n\nimport './SchemaBuilder.css';\n\nfunction buildInitialValues(fields: FieldDescriptor[]): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const f of fields) {\n const key = f.id ?? f.name ?? '';\n if (!key) continue;\n if (f.type === 'array') {\n result[key] = [];\n } else if (f.type === 'object' || f.type === 'schema') {\n result[key] = buildInitialValues((f.children ?? []) as FieldDescriptor[]);\n } else {\n result[key] = '';\n }\n }\n return result;\n}\n\nexport type { FieldSuggestion };\n\n// ─── Payload shape ────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderPayload {\n /** The FieldDescriptor[] schema — save this to DB to restore the editor */\n schema: FieldDescriptor[];\n /** Formula AST per field — part of editor state */\n formulaConfig: FormulaConfig;\n /** Condition rows per field — part of editor state */\n conditionConfig: ConditionConfig;\n /** Serialized condition expression string per field — ready for backend rule engine */\n conditionExpressions: Record<string, string>;\n /** Live form values entered by the user */\n values: Record<string, unknown>;\n /** Backend-ready evaluation payload (formulas resolved against values) */\n evaluationPayload: ReturnType<typeof buildEvaluationPayload>;\n}\n\nexport interface SchemaBuilderProps {\n value: FieldDescriptor[];\n onChange: (fields: FieldDescriptor[]) => void;\n suggestions?: FieldSuggestion[];\n label?: string;\n /** Fires on every change: schema edit, value input, formula/condition update */\n onPayload?: (payload: SchemaBuilderPayload) => void;\n /** Whether to auto-validate required fields (shows inline error messages) */\n validate?: boolean;\n /** Called whenever form validity changes — wire to enable/disable your Save button */\n onValidityChange?: (isValid: boolean) => void;\n /** Optional variable groups to seamlessly enable the Variable Picker for formula fields */\n variableGroups?: VariableGroup[];\n /** Saved form values to restore when reopening — keys match field ids */\n initialValues?: Record<string, unknown>;\n /** Saved formula config to restore when reopening */\n initialFormulaConfig?: FormulaConfig;\n /** Saved condition config to restore when reopening */\n initialConditionConfig?: ConditionConfig;\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function SchemaBuilder({\n value, onChange, suggestions, label = 'Fields',\n onPayload, validate = true, onValidityChange, variableGroups,\n initialValues: initialValuesProp,\n initialFormulaConfig,\n initialConditionConfig,\n}: SchemaBuilderProps) {\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n\n // Add-field-to-tab state (used when TabsField's \"+\" button is clicked inside the preview)\n const [tabAddTarget, setTabAddTarget] = useState<{ containerFieldId: string; tabId: string } | null>(null);\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>(initialFormulaConfig ?? {});\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>(initialConditionConfig ?? {});\n\n // Keep a ref to the latest form values so the config-change effect can include them\n const latestValues = useRef<Record<string, unknown>>(initialValuesProp ?? {});\n\n const builtInitialValues = useMemo(() => buildInitialValues(value), [value]);\n // Merge: schema-built empty values as base, saved values override\n const initialValues = useMemo(\n () => initialValuesProp && Object.keys(initialValuesProp).length > 0\n ? { ...builtInitialValues, ...initialValuesProp }\n : builtInitialValues,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [builtInitialValues, initialValuesProp],\n );\n\n const validationSchema = useMemo(() =>\n validate ? buildValidationSchema(value) : undefined,\n [validate, value]);\n\n // Fire onPayload whenever conditions / formula config change (not just on value input)\n useEffect(() => {\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: latestValues.current,\n evaluationPayload: buildEvaluationPayload({ values: latestValues.current, conditionConfig }),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conditionConfig, formulaConfig, value]);\n\n const handleValuesChange = useCallback((vals: Record<string, unknown>) => {\n latestValues.current = vals;\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilder] handleValuesChange — vals:', vals);\n }\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: vals,\n evaluationPayload: buildEvaluationPayload({ values: vals, conditionConfig }),\n });\n }, [value, formulaConfig, conditionConfig, onPayload]);\n\n function handleAddField(field: FieldDescriptor) {\n onChange([...value, field]);\n }\n\n function handleAddFieldToTab(field: FieldDescriptor) {\n if (!tabAddTarget) return;\n const { containerFieldId, tabId } = tabAddTarget;\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: [...(t.fields ?? []), field] } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n setTabAddTarget(null);\n }\n\n function handleRemoveFieldFromTab(containerFieldId: string, tabId: string, fieldIndex: number) {\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: (t.fields ?? []).filter((_: any, i: number) => i !== fieldIndex) } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n }\n\n const tabsEditContextValue = useMemo(() => ({\n openAddFieldDialog: (containerFieldId: string, tabId: string) =>\n setTabAddTarget({ containerFieldId, tabId }),\n removeFieldFromTab: handleRemoveFieldFromTab,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [value, onChange]);\n\n const inner = (\n <div className=\"schema-builder-root\">\n {/* Header row */}\n {value.length > 0 && (\n <div className=\"schema-builder-header\">\n <div className=\"schema-builder-actions\">\n <Tooltip title=\"Edit schema\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-outline\"\n onClick={() => setEditOpen(true)}\n >\n <MdSettings size={13} /> Edit Schema\n </button>\n </Tooltip>\n <Tooltip title=\"Add a new field\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-primary\"\n onClick={() => setAddOpen(true)}\n >\n <MdAdd size={14} /> Add Field\n </button>\n </Tooltip>\n </div>\n </div>\n )}\n\n {/* Rendered form using actual field components */}\n {value.length > 0 ? (\n <TabsEditContext.Provider value={tabsEditContextValue}>\n <FlowForm\n schema={{ layout: 'flat', fields: value }}\n initialValues={initialValues}\n onSubmit={() => { }}\n validationSchema={validationSchema}\n onValidityChange={onValidityChange}\n onValuesChange={onPayload ? handleValuesChange : undefined}\n formulaConfig={formulaConfig}\n onFormulaConfigChange={setFormulaConfig}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </TabsEditContext.Provider>\n ) : (\n <div className=\"schema-builder-empty-state\">\n <FaWpforms size={40} className=\"schema-builder-empty-icon\" />\n \n <p className=\"schema-builder-empty-title\">\n Tell us what fields should be in the list, and assign values to them.\n </p>\n \n <div className=\"schema-builder-empty-actions\">\n <button\n className=\"btn\"\n onClick={() => setAddOpen(true)}\n >\n Add field\n </button>\n \n {/* <div className=\"setup-manual-text\">\n or \n <span \n className=\"setup-manual-link\"\n onClick={() => setEditOpen(true)}\n >\n setup manually\n </span>\n </div> */}\n </div>\n </div>\n )}\n\n <AddFieldModal\n open={addOpen}\n onSave={handleAddField}\n onClose={() => setAddOpen(false)}\n />\n <EditSchemaModal\n open={editOpen}\n value={value}\n onSave={onChange}\n onClose={() => setEditOpen(false)}\n />\n {/* Modal for adding a field to a specific tab from the rendered preview */}\n <AddFieldModal\n open={!!tabAddTarget}\n onSave={handleAddFieldToTab}\n onClose={() => setTabAddTarget(null)}\n />\n </div>\n );\n\n if (variableGroups) {\n return (\n <VariablePickerProvider groups={variableGroups}>\n <VariablePicker width={260} mode=\"popover\" />\n {inner}\n </VariablePickerProvider>\n );\n }\n\n return inner;\n}\n","import { useState, useRef } from 'react';\nimport { Drawer, Box, Typography, IconButton, Divider, Chip, Tooltip } from '@mui/material';\nimport { MdSettings, MdArrowForward, MdClose, MdCheck, MdAdd, MdArrowBack } from 'react-icons/md';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport type { SchemaBuilderProps, SchemaBuilderPayload } from './SchemaBuilder';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Compact summary shown in main drawer ────────────────────────────────────\n\nfunction FieldSummary({ fields, onOpen }: { fields: FieldDescriptor[]; onOpen: () => void }) {\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff', overflow: 'hidden' }}>\n {fields.length > 0 ? (\n <Box sx={{ px: 1.5, py: 1.25, display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {fields.map((f, i) => {\n const key = f.id ?? f.name ?? '';\n return (\n <Tooltip key={i} title={`${f.type} · ${key}`} placement=\"top\">\n <Chip\n label={(f.label as string) || key}\n size=\"small\"\n sx={{ fontSize: 11, fontWeight: 500, height: 22, bgcolor: '#f1f5f9', color: '#334155', border: '1px solid #e2e8f0', '& .MuiChip-label': { px: 1 } }}\n />\n </Tooltip>\n );\n })}\n </Box>\n ) : (\n <Box sx={{ px: 1.5, py: 1.5 }}>\n <Typography sx={{ fontSize: 12, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n )}\n <Divider sx={{ borderColor: '#f1f5f9' }} />\n <Box onClick={onOpen} sx={{ display: 'flex', alignItems: 'center', gap: 0.75, px: 1.5, py: 1, cursor: 'pointer', '&:hover': { bgcolor: '#f8fafc' }, transition: 'background 0.12s' }}>\n {fields.length === 0 ? <MdAdd size={14} color=\"#6366f1\" /> : <MdSettings size={13} color=\"#6366f1\" />}\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: '#6366f1', flex: 1 }}>\n {fields.length === 0 ? 'Add fields' : 'Configure fields'}\n </Typography>\n <MdArrowForward size={13} color=\"#94a3b8\" />\n </Box>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderDrawerProps extends SchemaBuilderProps {\n label?: string;\n drawerTitle?: string;\n drawerWidth?: number;\n /**\n * Fired when the user clicks Done.\n * @param schema Save this to DB — pass it back to FlowForm/SchemaBuilder to restore the form\n * @param payload Send this to backend — contains conditionExpressions, formulaConfig, values, evaluationPayload\n */\n onDone?: (schema: FieldDescriptor[], payload: SchemaBuilderPayload | null) => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\ntype View = { type: 'list' } | { type: 'edit'; index: number };\n\nexport function SchemaBuilderDrawer({\n value,\n onChange,\n suggestions,\n onPayload,\n onDone,\n validate,\n onValidityChange,\n label = 'Fields',\n drawerTitle = 'Configure Fields',\n drawerWidth = 580,\n}: SchemaBuilderDrawerProps) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<View>({ type: 'list' });\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const latestPayload = useRef<SchemaBuilderPayload | null>(null);\n\n // Persisted state across open/close cycles — survives Cancel\n const savedValues = useRef<Record<string, unknown> | undefined>(undefined);\n const savedFormulaConfig = useRef<SchemaBuilderPayload['formulaConfig'] | undefined>(undefined);\n const savedConditionConfig = useRef<SchemaBuilderPayload['conditionConfig'] | undefined>(undefined);\n\n // Local draft of the field being edited\n const [fieldDraft, setFieldDraft] = useState<FieldDescriptor | null>(null);\n\n function handleOpen() {\n if (import.meta.env.DEV) console.log('[SchemaBuilderDrawer] handleOpen — savedValues.current:', savedValues.current);\n setDraft(value); setView({ type: 'list' }); setOpen(true);\n }\n\n function handleDone() {\n const p = latestPayload.current;\n // Persist the latest state so reopening restores it\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilderDrawer] handleDone — savedValues:', savedValues.current);\n }\n onChange(draft);\n setOpen(false);\n onDone?.(draft, p);\n if (import.meta.env.DEV) {\n console.group('🟣 SchemaBuilder — Done');\n console.log(\n '%c schema %c (save to DB → pass back to FlowForm to restore this form)',\n 'background:#6366f1;color:#fff;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n draft,\n );\n console.log(\n '%c payload %c (send to backend for evaluation)',\n 'background:#0f172a;color:#e2e8f0;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n {\n conditionExpressions: p?.conditionExpressions ?? {},\n formulaConfig: p?.formulaConfig ?? {},\n values: p?.values ?? {},\n evaluationPayload: p?.evaluationPayload ?? {},\n },\n );\n console.groupEnd();\n }\n }\n\n function handleClose() {\n // Save whatever the user had so far before closing\n const p = latestPayload.current;\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n setDraft(value);\n setOpen(false);\n }\n\n function handleEditField(index: number) {\n setFieldDraft({ ...draft[index] });\n setView({ type: 'edit', index });\n }\n\n function handleSaveField() {\n if (view.type !== 'edit' || !fieldDraft) return;\n const next = [...draft];\n next[view.index] = fieldDraft;\n setDraft(next);\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n function handleCancelEdit() {\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n const editingField = view.type === 'edit' ? draft[view.index] : null;\n\n return (\n <>\n {/* Summary in main drawer */}\n <Box>\n <Typography sx={{ fontSize: 12, fontWeight: 700, color: '#64748b', textTransform: 'uppercase', letterSpacing: 0.5, mb: 0.75 }}>\n {label}\n </Typography>\n <FieldSummary fields={value} onOpen={handleOpen} />\n </Box>\n\n {/* Secondary drawer */}\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n PaperProps={{ sx: { width: drawerWidth, display: 'flex', flexDirection: 'column', boxShadow: '-4px 0 24px rgba(0,0,0,0.12)', overflow: 'hidden' } }}\n >\n {/* ── HEADER ────────────────────────────────────────────────── */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2, py: 1.5, borderBottom: '1px solid #e2e8f0', flexShrink: 0, gap: 1 }}>\n {view.type === 'edit' && (\n <Tooltip title=\"Back to fields\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleCancelEdit} sx={{ color: '#64748b' }}>\n <MdArrowBack size={17} />\n </IconButton>\n </Tooltip>\n )}\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>\n {view.type === 'edit'\n ? ((fieldDraft?.label as string) || fieldDraft?.id || 'Edit field')\n : drawerTitle}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>\n {view.type === 'edit' ? 'Configure field properties' : `${draft.length} field${draft.length !== 1 ? 's' : ''} defined`}\n </Typography>\n </Box>\n {view.type === 'list' && (\n <Tooltip title=\"Close\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n\n {/* ── BODY ──────────────────────────────────────────────────── */}\n {view.type === 'list' && (\n <>\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n <SchemaBuilder\n value={draft}\n onChange={setDraft}\n suggestions={suggestions}\n onPayload={(p) => { \n latestPayload.current = p; \n // Persist immediately so adding/removing fields doesn't wipe current data\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n onPayload?.(p); \n }}\n validate={validate}\n onValidityChange={onValidityChange}\n label={label}\n initialValues={savedValues.current}\n initialFormulaConfig={savedFormulaConfig.current}\n initialConditionConfig={savedConditionConfig.current}\n />\n </Box>\n\n {/* List footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={handleClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </>\n )}\n\n {/* Edit view — FieldConfigPanel fills the drawer */}\n {view.type === 'edit' && fieldDraft && (\n <FieldConfigPanel\n field={fieldDraft}\n onChange={setFieldDraft}\n onSave={handleSaveField}\n onCancel={handleCancelEdit}\n />\n )}\n </Drawer>\n </>\n );\n}\n"],"names":["useFlowForm","schema","initialValues","onSubmit","showErrorsImmediately","fields","validationSchema","useMemo","buildValidationSchema","initialTouched","acc","f","key","resolveFieldKey","formulaConfig","setFormulaConfig","useState","conditionConfig","setConditionConfig","initialValuesRef","useRef","useEffect","formik","useFormik","values","evaluation","buildEvaluationPayload","submit","useCallback","reset","nextValues","FIELD_TYPE_OPTIONS","FlowForgeRegistry","input","lbl","sectionTitle","ARRAY_ITEM_TYPES","COL_OPTIONS","ColSpanPicker","value","onChange","current","Box","jsx","opt","Tooltip","_","i","OptionsEditor","options","update","val","o","idx","jsxs","e","MdClose","MdAdd","CONDITION_COL_TYPES","ConditionColEditor","col","onDelete","isSelect","isOperator","opts","ConditionBuilder","condition","enabled","toggle","addCol","type","defaultId","updateCol","next","removeCol","c","t","CheckRow","id","label","checked","TabsViewsEditor","views","v","add","view","ButtonGroup","groupLabel","FieldConfigPanel","field","onSave","onCancel","noFooter","showAdvanced","setShowAdvanced","fieldKey","ext","isOptionsField","customRegistryDef","customConfigSchema","set","Fragment","FlowForm","vals","newViews","existing","merged","prev","Collapse","MdCheck","COLOR","RADIUS","FONT_SIZE","INPUT_SX","defaultField","needsChildStep","childStepLabel","itemType","ChildFieldsStep","Typography","SchemaBuilder","children","itemFields","nestedItemType","_a","PRIMITIVE_TYPES","FieldPreview","colLabel","AddFieldModal","open","initial","onClose","editMode","step","setStep","draft","setDraft","handleOpen","hasChild","totalSteps","stepLabels","canNext","goNext","s","goBack","handleSave","activeStepIdx","isLastStep","isPreview","Dialog","IconButton","Stepper","Step","StepLabel","MdArrowBack","ListRow","index","total","onEdit","onMoveUp","onMoveDown","MdEdit","MdDeleteOutline","EditSchemaModal","editingIdx","setEditingIdx","handleDelete","d","handleMove","dir","j","handleSaveField","updated","handleDone","hasChanges","buildInitialValues","result","suggestions","onPayload","validate","onValidityChange","variableGroups","initialValuesProp","initialFormulaConfig","initialConditionConfig","addOpen","setAddOpen","editOpen","setEditOpen","tabAddTarget","setTabAddTarget","latestValues","builtInitialValues","serializeConditionExpressions","handleValuesChange","handleAddField","handleAddFieldToTab","containerFieldId","tabId","tabs","handleRemoveFieldFromTab","fieldIndex","tabsEditContextValue","inner","MdSettings","TabsEditContext","FaWpforms","VariablePickerProvider","VariablePicker","FieldSummary","onOpen","Chip","Divider","MdArrowForward","SchemaBuilderDrawer","onDone","drawerTitle","drawerWidth","setOpen","setView","latestPayload","savedValues","savedFormulaConfig","savedConditionConfig","fieldDraft","setFieldDraft","p","handleClose","handleCancelEdit","Drawer"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaBuilderDrawer-CwnowdK9.js","sources":["../src/FlowForm/useFlowForm.ts","../src/FlowForm/SchemaBuilder/types.ts","../src/FlowForm/SchemaBuilder/FieldConfigPanel.tsx","../src/FlowForm/styles/constants.ts","../src/FlowForm/SchemaBuilder/AddFieldModal.tsx","../src/FlowForm/SchemaBuilder/EditSchemaModal.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilder.tsx","../src/FlowForm/SchemaBuilder/SchemaBuilderDrawer.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, useEffect, useRef } from 'react';\r\nimport { useFormik } from 'formik';\r\nimport type { FormSchema, FieldDescriptor } from './types';\r\nimport { resolveFieldKey } from './types';\r\nimport type { FormulaConfig, ConditionConfig } from './types/formula';\r\nimport { buildValidationSchema } from './SchemaBuilder/buildValidationSchema';\r\nimport { buildEvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\nimport type { EvaluationPayload } from './DynamicFormRenderer/formulaUtils';\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport interface UseFlowFormOptions {\r\n schema: FormSchema;\r\n initialValues: Record<string, unknown>;\r\n /**\r\n * Called only when form is valid and submitted.\r\n * Receives raw formik values AND the fully-resolved evaluation payload\r\n * (formula chips resolved, condition expressions serialized).\r\n */\r\n onSubmit: (values: Record<string, unknown>, evaluation: EvaluationPayload) => void | Promise<void>;\r\n /** Pre-mark all fields as touched so errors show immediately (e.g. edit mode). */\r\n showErrorsImmediately?: boolean;\r\n}\r\n\r\nexport interface FlowFormInstance {\r\n // ── Public state ────────────────────────────────────────────────────────────\r\n values: Record<string, unknown>;\r\n errors: Record<string, unknown>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n\r\n // ── Config state (formula chips + condition rows) ────────────────────────\r\n formulaConfig: FormulaConfig;\r\n conditionConfig: ConditionConfig;\r\n\r\n // ── Actions ─────────────────────────────────────────────────────────────────\r\n /** Validate and submit — safe to call from any button outside the form. */\r\n submit: () => void;\r\n reset: (nextValues?: Record<string, unknown>) => void;\r\n setFieldValue: (field: string, value: unknown) => void;\r\n\r\n // ── Internal — consumed only by DynamicFormRenderer / FlowForm ──────────\r\n _schema: FormSchema;\r\n _formik: ReturnType<typeof useFormik<Record<string, unknown>>>;\r\n _formulaConfig: FormulaConfig;\r\n _onFormulaConfigChange: (config: FormulaConfig) => void;\r\n _conditionConfig: ConditionConfig;\r\n _onConditionConfigChange: (config: ConditionConfig) => void;\r\n}\r\n\r\n// ─── Hook ─────────────────────────────────────────────────────────────────────\r\n\r\nexport function useFlowForm({\r\n schema,\r\n initialValues,\r\n onSubmit,\r\n showErrorsImmediately = false,\r\n}: UseFlowFormOptions): FlowFormInstance {\r\n\r\n // Build Yup schema only when the field array reference actually changes.\r\n // Depending on `schema` (the wrapping object) rebuilt the entire Yup tree\r\n // on every render for hosts that construct schema inline.\r\n const fields = (schema.fields ?? []) as FieldDescriptor[];\r\n const validationSchema = useMemo(\r\n () => buildValidationSchema(fields),\r\n [fields],\r\n );\r\n\r\n // Pre-touch map — marks every field touched so errors show on open (edit mode)\r\n const initialTouched = useMemo(() => {\r\n if (!showErrorsImmediately) return undefined;\r\n return fields.reduce<Record<string, boolean>>((acc, f) => {\r\n const key = resolveFieldKey(f);\r\n if (key) acc[key] = true;\r\n return acc;\r\n }, {});\r\n }, [fields, showErrorsImmediately]);\r\n\r\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>({});\r\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\r\n\r\n // When initialValues identity changes (host loaded a different record),\r\n // Formik reinitializes — clear formula/condition config too so leftover\r\n // chip/condition state from the previous record doesn't bleed through.\r\n const initialValuesRef = useRef(initialValues);\r\n useEffect(() => {\r\n if (initialValuesRef.current === initialValues) return;\r\n initialValuesRef.current = initialValues;\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [initialValues]);\r\n\r\n const formik = useFormik<Record<string, unknown>>({\r\n initialValues,\r\n validationSchema,\r\n initialTouched,\r\n validateOnMount: showErrorsImmediately,\r\n validateOnChange: true,\r\n validateOnBlur: true,\r\n enableReinitialize: true,\r\n onSubmit: async (values) => {\r\n const evaluation = buildEvaluationPayload({ values, conditionConfig });\r\n await onSubmit(values, evaluation);\r\n },\r\n });\r\n\r\n const submit = useCallback(() => {\r\n formik.submitForm();\r\n }, [formik]);\r\n\r\n const reset = useCallback((nextValues?: Record<string, unknown>) => {\r\n formik.resetForm(nextValues ? { values: nextValues } : undefined);\r\n setFormulaConfig({});\r\n setConditionConfig({});\r\n }, [formik]);\r\n\r\n return {\r\n values: formik.values,\r\n errors: formik.errors as Record<string, unknown>,\r\n isValid: formik.isValid,\r\n isDirty: formik.dirty,\r\n isSubmitting: formik.isSubmitting,\r\n\r\n formulaConfig,\r\n conditionConfig,\r\n\r\n submit,\r\n reset,\r\n setFieldValue: formik.setFieldValue,\r\n\r\n // Internals for DynamicFormRenderer\r\n _schema: schema,\r\n _formik: formik,\r\n _formulaConfig: formulaConfig,\r\n _onFormulaConfigChange: setFormulaConfig,\r\n _conditionConfig: conditionConfig,\r\n _onConditionConfigChange: setConditionConfig,\r\n };\r\n}\r\n","import { FlowForgeRegistry } from '../registry';\n\nexport const FIELD_TYPE_OPTIONS: Array<{ value: string; label: string }> = FlowForgeRegistry.getTypeOptions();\n","import { useState } from 'react';\nimport { Box, Collapse, Tooltip } from '@mui/material';\nimport { MdAdd, MdClose, MdCheck } from 'react-icons/md';\nimport type { FieldDescriptor, ConditionFieldDef, FieldConditionDef, FormSchema } from '../types';\nimport { FIELD_TYPE_OPTIONS } from './types';\nimport { FlowForgeRegistry } from '../registry';\nimport { FlowForm } from '../DynamicFormRenderer';\n\n// ─── Shared styles ────────────────────────────────────────────────────────────\n\n/** Use on <input> and <select> elements — matches app's form-control design */\nexport const input = 'form-control font-14';\n\n/** Use as className on <label> elements */\nexport const lbl = 'text-14 text-dark fw-medium mb-1 align-items-center d-flex gap-1';\n\nconst sectionTitle: React.CSSProperties = {\n fontSize: 10, fontWeight: 700, color: '#94a3b8',\n textTransform: 'uppercase', letterSpacing: 0.6,\n marginBottom: 8, display: 'block',\n};\n\n// ─── Array item type options ──────────────────────────────────────────────────\n\nconst ARRAY_ITEM_TYPES = [\n { value: 'text', label: 'Text' },\n { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' },\n { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' },\n { value: 'select', label: 'Select' },\n { value: 'object', label: 'Object (sub-fields)' },\n { value: 'array', label: 'Array (nested)' },\n];\n\n// ─── ColSpan picker ───────────────────────────────────────────────────────────\n\nconst COL_OPTIONS = [\n { value: 3, label: '1/4' },\n { value: 4, label: '1/3' },\n { value: 6, label: '1/2' },\n { value: 8, label: '2/3' },\n { value: 12, label: 'Full' },\n];\n\nfunction ColSpanPicker({ value, onChange }: { value?: number; onChange: (v: number) => void }) {\n const current = value ?? 12;\n return (\n <Box>\n <span className={lbl}>Column width</span>\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {COL_OPTIONS.map((opt) => (\n <Tooltip key={opt.value} title={`colSpan: ${opt.value}`} placement=\"top\">\n <Box\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: '1px solid',\n borderColor: current === opt.value ? '#6366f1' : '#dee2e6',\n borderRadius: '6px', cursor: 'pointer',\n bgcolor: current === opt.value ? '#eef2ff' : '#fff',\n color: current === opt.value ? '#6366f1' : '#6c757d',\n fontSize: 11, fontWeight: 600, py: 0.6, px: 0,\n '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n </Tooltip>\n ))}\n </Box>\n <Box sx={{ display: 'flex', gap: '3px', mt: 0.75 }}>\n {Array.from({ length: 12 }).map((_, i) => (\n <Box key={i} sx={{ flex: 1, height: 4, borderRadius: '2px', bgcolor: i < current ? '#6366f1' : '#e2e8f0', transition: 'background 0.12s' }} />\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Options editor (for select) ─────────────────────────────────────────────\n\ninterface SelectOption { label: string; value: string }\n\nfunction OptionsEditor({ options = [], onChange }: { options: SelectOption[]; onChange: (o: SelectOption[]) => void }) {\n function update(i: number, key: keyof SelectOption, val: string) {\n onChange(options.map((o, idx) => idx === i ? { ...o, [key]: val } : o));\n }\n return (\n <Box>\n <span className={lbl}>Options <span style={{ color: '#dc3545' }}>*</span></span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {options.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={opt.label} onChange={(e) => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"Value\" value={opt.value} onChange={(e) => update(i, 'value', e.target.value)} />\n <Box component=\"button\" onClick={() => onChange(options.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={() => onChange([...options, { label: '', value: '' }])} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add option\n </Box>\n </Box>\n );\n}\n\n// ─── Condition builder ────────────────────────────────────────────────────────\n\nconst CONDITION_COL_TYPES = [\n { value: 'operator', label: 'Operator (predefined)' },\n { value: 'select', label: 'Select' },\n { value: 'text', label: 'Text' },\n];\n\nfunction ConditionColEditor({ col, onChange, onDelete }: { col: ConditionFieldDef; onChange: (c: ConditionFieldDef) => void; onDelete: () => void }) {\n const isSelect = col.type === 'select';\n const isOperator = col.type === 'operator';\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '7px', p: 1.25, bgcolor: '#fff', display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: isOperator ? '#fef9c3' : '#eef2ff', color: isOperator ? '#92400e' : '#6366f1', flexShrink: 0 }}>\n {isOperator ? 'OPERATOR' : col.type.toUpperCase()}\n </Box>\n <Box sx={{ fontSize: 12, fontWeight: 600, color: '#0f172a', flex: 1 }}>{col.label || col.id || 'Unnamed'}</Box>\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Column type</label>\n <select value={col.type} onChange={(e) => onChange({ ...col, type: e.target.value, options: undefined })} className={input} style={{ cursor: 'pointer' }}>\n {CONDITION_COL_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box>\n <label className={lbl}>Column key <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={`${input} ${!col.id ? 'border-danger' : ''}`} value={col.id} onChange={(e) => onChange({ ...col, id: e.target.value })} placeholder=\"e.g. field, operator, value\" />\n {!col.id && <span style={{ fontSize: 10, color: '#dc3545' }}>Required — used as data key</span>}\n </Box>\n </Box>\n\n {!isOperator && (\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Label</label>\n <input className={input} value={col.label ?? ''} onChange={(e) => onChange({ ...col, label: e.target.value || undefined })} placeholder=\"Column label\" />\n </Box>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={col.placeholder ?? ''} onChange={(e) => onChange({ ...col, placeholder: e.target.value || undefined })} placeholder=\"Hint…\" />\n </Box>\n </Box>\n )}\n\n {isSelect && (\n <OptionsEditor options={(col.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...col, options: opts })} />\n )}\n\n {isOperator && (\n <Box sx={{ bgcolor: '#fefce8', border: '1px solid #fef08a', borderRadius: '6px', px: 1.25, py: 0.75 }}>\n <Box sx={{ fontSize: 11, color: '#78350f' }}>Predefined: equals, not equals, contains, starts with, ends with, is present, is not present, greater than, less than…</Box>\n </Box>\n )}\n\n {!isOperator && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={`formula-${col.id}`} checked={!!col.formula} onChange={(e) => onChange({ ...col, formula: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor={`formula-${col.id}`} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Formula input (chip editor)</label>\n </Box>\n )}\n </Box>\n );\n}\n\nfunction ConditionBuilder({ condition, onChange }: { condition: FieldConditionDef | undefined; onChange: (c: FieldConditionDef | undefined) => void }) {\n const enabled = !!condition;\n function toggle() { onChange(enabled ? undefined : { fields: [] }); }\n function addCol(type: string) {\n if (!condition) return;\n const defaultId = type === 'operator' ? 'operator' : condition.fields.filter((f) => f.type !== 'operator').length === 0 ? 'field' : 'value';\n onChange({ ...condition, fields: [...condition.fields, { id: defaultId, type }] });\n }\n function updateCol(i: number, col: ConditionFieldDef) {\n if (!condition) return;\n const next = [...condition.fields]; next[i] = col;\n onChange({ ...condition, fields: next });\n }\n function removeCol(i: number) {\n if (!condition) return;\n onChange({ ...condition, fields: condition.fields.filter((_, idx) => idx !== i) });\n }\n return (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75, mb: enabled ? 1.25 : 0 }}>\n <input type=\"checkbox\" id=\"enable-condition\" checked={enabled} onChange={toggle} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <span style={{ ...sectionTitle, margin: 0, color: enabled ? '#6366f1' : '#94a3b8' }}>Condition row</span>\n </Box>\n {enabled && condition && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n {condition.fields.map((col, i) => (\n <ConditionColEditor key={i} col={col} onChange={(c) => updateCol(i, c)} onDelete={() => removeCol(i)} />\n ))}\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {CONDITION_COL_TYPES.map((t) => (\n <Box key={t.value} component=\"button\" onClick={() => addCol(t.value)} sx={{ flex: 1, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, py: 0.5, borderRadius: '6px', color: t.value === 'operator' ? '#92400e' : '#6366f1', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n + {t.value === 'operator' ? 'Operator' : t.label.split(' ')[0]}\n </Box>\n ))}\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, flexWrap: 'wrap' }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id=\"allow-groups\" checked={!!condition.allowGroups} onChange={(e) => onChange({ ...condition, allowGroups: e.target.checked || undefined })} style={{ cursor: 'pointer', width: 14, height: 14 }} />\n <label htmlFor=\"allow-groups\" className={lbl} style={{ margin: 0, cursor: 'pointer' }}>Allow nested groups</label>\n </Box>\n {condition.allowGroups && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <label className={lbl} style={{ margin: 0 }}>Max depth</label>\n <input type=\"number\" min={1} max={5} className={input} style={{ width: 60, textAlign: 'center' }} value={condition.maxGroupDepth ?? ''} onChange={(e) => onChange({ ...condition, maxGroupDepth: e.target.value ? Number(e.target.value) : undefined })} placeholder=\"∞\" />\n </Box>\n )}\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n\n// ─── CheckRow ─────────────────────────────────────────────────────────────────\n\nfunction CheckRow({ id, label, checked, onChange }: { id: string; label: string; checked: boolean; onChange: (v: boolean) => void }) {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75 }}>\n <input type=\"checkbox\" id={id} checked={checked} onChange={(e) => onChange(e.target.checked)} style={{ cursor: 'pointer', width: 14, height: 14, flexShrink: 0 }} />\n <label htmlFor={id} className={lbl} style={{ margin: 0, cursor: 'pointer' }}>{label}</label>\n </Box>\n );\n}\n\n// ─── Tabs views editor ────────────────────────────────────────────────────────\n\ninterface TabView { id: string; label: string }\n\nfunction TabsViewsEditor({ views = [], onChange }: { views: TabView[]; onChange: (v: TabView[]) => void }) {\n function update(i: number, key: keyof TabView, val: string) {\n onChange(views.map((v, idx) => idx === i ? { ...v, [key]: val } : v));\n }\n function add() {\n const id = `tab${views.length + 1}`;\n onChange([...views, { id, label: `Tab ${views.length + 1}` }]);\n }\n return (\n <Box>\n <span className={lbl}>Views</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {views.map((view, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input className={input} style={{ flex: 1 }} placeholder=\"Label\" value={view.label} onChange={e => update(i, 'label', e.target.value)} />\n <input className={input} style={{ flex: 1 }} placeholder=\"ID (no spaces)\" value={view.id} onChange={e => update(i, 'id', e.target.value.replace(/\\s/g, '_'))} />\n <Box component=\"button\" onClick={() => onChange(views.filter((_, idx) => idx !== i))} sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}>\n <MdClose size={13} />\n </Box>\n </Box>\n ))}\n </Box>\n <Box component=\"button\" onClick={add} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}>\n <MdAdd size={13} /> Add view\n </Box>\n </Box>\n );\n}\n\n// ─── Button group picker ──────────────────────────────────────────────────────\n\nfunction ButtonGroup({ label: groupLabel, value, options, onChange }: {\n label: string;\n value: string;\n options: { value: string; label: string }[];\n onChange: (v: string) => void;\n}) {\n return (\n <Box>\n <span className={lbl}>{groupLabel}</span>\n <Box sx={{ display: 'flex', border: '1px solid #dee2e6', borderRadius: '7px', overflow: 'hidden' }}>\n {options.map(opt => (\n <Box\n key={opt.value}\n component=\"button\"\n onClick={() => onChange(opt.value)}\n sx={{\n flex: 1, border: 'none', borderRight: '1px solid #dee2e6', cursor: 'pointer',\n fontSize: 12, fontWeight: 600, py: 0.6,\n bgcolor: value === opt.value ? '#eef2ff' : '#fff',\n color: value === opt.value ? '#6366f1' : '#6c757d',\n '&:last-child': { borderRight: 'none' },\n '&:hover': { bgcolor: '#f5f3ff' },\n }}\n >\n {opt.label}\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n\n// ─── Main export ──────────────────────────────────────────────────────────────\n\ninterface FieldConfigPanelProps {\n field: FieldDescriptor;\n onChange: (updated: FieldDescriptor) => void;\n onSave: () => void;\n onCancel: () => void;\n noFooter?: boolean;\n}\n\nexport function FieldConfigPanel({ field, onChange, onSave, onCancel, noFooter }: FieldConfigPanelProps) {\n const [showAdvanced, setShowAdvanced] = useState(false);\n const fieldKey = field.id ?? field.name ?? '';\n const ext = field as Record<string, any>;\n const isOptionsField = field.type === 'select' || field.type === 'descriptive-select' || field.type === 'radio-group';\n\n const customRegistryDef = FlowForgeRegistry.get(field.type);\n const customConfigSchema = customRegistryDef?.configSchema;\n\n function set<K extends keyof FieldDescriptor>(key: K, value: FieldDescriptor[K]) {\n onChange({ ...field, [key]: value });\n }\n\n return (\n <>\n {/* Scrollable body */}\n <Box sx={{ flex: 1, overflowY: 'auto', px: 2.5, py: 2, display: 'flex', flexDirection: 'column', gap: 1.75 }}>\n\n {/* REQUIRED */}\n <Box>\n <span style={sectionTitle}>Required</span>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Box>\n <label className={lbl}>Type</label>\n <select value={field.type} onChange={(e) => set('type', e.target.value)} className={input} style={{ cursor: 'pointer' }}>\n {FIELD_TYPE_OPTIONS.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: field.type === 'tabs' ? '1fr' : '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Field ID <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={field.id ?? field.name ?? ''} onChange={(e) => set('id', e.target.value)} placeholder=\"e.g. email\" />\n </Box>\n {field.type !== 'tabs' && (\n <Box>\n <label className={lbl}>Label <span style={{ color: '#dc3545' }}>*</span></label>\n <input className={input} value={(field.label as string) ?? ''} onChange={(e) => set('label', e.target.value)} placeholder=\"Display label\" />\n </Box>\n )}\n </Box>\n {field.type !== 'tabs' && (\n <ColSpanPicker value={field.colSpan as number | undefined} onChange={(v) => set('colSpan', v === 12 ? undefined : v)} />\n )}\n </Box>\n </Box>\n\n {/* CUSTOM REGISTRY SCHEMA (Self-Building form config) */}\n {customConfigSchema && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Specific Settings</span>\n <FlowForm\n schema={{ layout: 'flat', compact: true, fields: customConfigSchema.fields }}\n initialValues={field as any}\n onValuesChange={(vals) => onChange({ ...field, ...vals } as FieldDescriptor)}\n onSubmit={() => { }}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Tabs config */}\n {field.type === 'tabs' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n {/* Content */}\n <span style={sectionTitle}>Content</span>\n <TabsViewsEditor\n views={(ext.tabs ?? []).map((t: any) => ({ id: t.id, label: t.label }))}\n onChange={newViews => {\n const existing: any[] = ext.tabs ?? [];\n const merged = newViews.map(v => {\n const prev = existing.find((e: any) => e.id === v.id);\n return prev ? { ...prev, ...v } : { ...v, fields: [] };\n });\n onChange({ ...field, tabs: merged } as FieldDescriptor);\n }}\n />\n\n {/* Interaction */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Interaction</span>\n <Box>\n <label className={lbl}>Disabled</label>\n <input className={input} value={ext.disabledExpr ?? ''} onChange={e => onChange({ ...field, disabledExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n\n {/* Appearance */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Appearance</span>\n <ButtonGroup\n label=\"Alignment\"\n value={ext.alignment ?? 'left'}\n options={[\n { value: 'left', label: '|←' },\n { value: 'center-left', label: '←|' },\n { value: 'center', label: '|·|' },\n { value: 'center-right', label: '|→' },\n { value: 'right', label: '→|' },\n ]}\n onChange={v => onChange({ ...field, alignment: v } as FieldDescriptor)}\n />\n <Box>\n <label className={lbl}>Hidden</label>\n <input className={input} value={ext.hiddenExpr ?? ''} onChange={e => onChange({ ...field, hiddenExpr: e.target.value || undefined } as FieldDescriptor)} placeholder=\"false\" />\n </Box>\n <ButtonGroup\n label=\"Variant\"\n value={ext.variant ?? 'line'}\n options={[{ value: 'pill', label: 'Pill' }, { value: 'line', label: 'Line' }]}\n onChange={v => onChange({ ...field, variant: v } as FieldDescriptor)}\n />\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Active color</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeColor ?? '#6366f1'} onChange={e => onChange({ ...field, activeColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeColor ?? ''} onChange={e => onChange({ ...field, activeColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#6366f1\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Active text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.activeTextColor ?? '#ffffff'} onChange={e => onChange({ ...field, activeTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.activeTextColor ?? ''} onChange={e => onChange({ ...field, activeTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"auto\" style={{ flex: 1 }} />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Inactive text</label>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\n <input type=\"color\" value={ext.inactiveTextColor ?? '#64748b'} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value } as FieldDescriptor)} style={{ width: 28, height: 28, border: '1px solid #dee2e6', borderRadius: 6, cursor: 'pointer', padding: 2, background: '#fff' }} />\n <input className={input} value={ext.inactiveTextColor ?? ''} onChange={e => onChange({ ...field, inactiveTextColor: e.target.value || undefined } as FieldDescriptor)} placeholder=\"#64748b\" style={{ flex: 1 }} />\n </Box>\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Styles</label>\n <input className={input} value={ext.styles ?? ''} onChange={e => onChange({ ...field, styles: e.target.value || undefined } as FieldDescriptor)} placeholder=\"None\" />\n </Box>\n\n {/* Spacing */}\n <span style={{ ...sectionTitle, marginTop: 4 }}>Spacing</span>\n <ButtonGroup\n label=\"Height\"\n value={ext.height ?? 'auto'}\n options={[{ value: 'auto', label: 'Auto' }, { value: 'fixed', label: 'Fixed' }]}\n onChange={v => onChange({ ...field, height: v } as FieldDescriptor)}\n />\n <ButtonGroup\n label=\"Margin\"\n value={ext.margin ?? 'normal'}\n options={[{ value: 'normal', label: 'Normal' }, { value: 'none', label: 'None' }]}\n onChange={v => onChange({ ...field, margin: v } as FieldDescriptor)}\n />\n </Box>\n )}\n\n {/* TYPE-SPECIFIC — Select/Radio Options */}\n {isOptionsField && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <span style={sectionTitle}>Options</span>\n <OptionsEditor options={(ext.options ?? []) as SelectOption[]} onChange={(opts) => onChange({ ...field, options: opts } as FieldDescriptor)} />\n </Box>\n )}\n\n\n {/* TYPE-SPECIFIC — Array (flat settings only; child fields configured in next step) */}\n {field.type === 'array' && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5, display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={sectionTitle}>Array settings</span>\n <Box>\n <label className={lbl}>Item type</label>\n <select className={input} style={{ cursor: 'pointer' }} value={ext.itemType ?? 'text'} onChange={(e) => onChange({ ...field, itemType: e.target.value } as FieldDescriptor)}>\n {ARRAY_ITEM_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Item label</label>\n <input className={input} value={ext.itemLabel ?? ''} onChange={(e) => onChange({ ...field, itemLabel: e.target.value || undefined } as FieldDescriptor)} placeholder='e.g. \"Member\"' />\n </Box>\n <Box>\n <label className={lbl}>Add button label</label>\n <input className={input} value={ext.addLabel ?? ''} onChange={(e) => onChange({ ...field, addLabel: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Add item\" />\n </Box>\n </Box>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Min items</label>\n <input type=\"number\" min={0} className={input} value={ext.minItems ?? ''} onChange={(e) => onChange({ ...field, minItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"0\" />\n </Box>\n <Box>\n <label className={lbl}>Max items</label>\n <input type=\"number\" min={1} className={input} value={ext.maxItems ?? ''} onChange={(e) => onChange({ ...field, maxItems: e.target.value ? Number(e.target.value) : undefined } as FieldDescriptor)} placeholder=\"∞\" />\n </Box>\n </Box>\n {!['object', 'array', 'select'].includes(ext.itemType ?? 'text') && (\n <Box>\n <label className={lbl}>Item placeholder</label>\n <input className={input} value={ext.itemPlaceholder ?? ''} onChange={(e) => onChange({ ...field, itemPlaceholder: e.target.value || undefined } as FieldDescriptor)} placeholder=\"Enter value…\" />\n </Box>\n )}\n </Box>\n )}\n\n {/* CONDITION */}\n <ConditionBuilder\n condition={field.condition as FieldConditionDef | undefined}\n onChange={(c) => onChange({ ...field, condition: c })}\n />\n\n {/* OPTIONAL */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', pt: 1.5 }}>\n <Box component=\"button\" onClick={() => setShowAdvanced((v) => !v)} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 0.5, p: 0, mb: showAdvanced ? 1.25 : 0 }}>\n <span style={{ ...sectionTitle, margin: 0, color: showAdvanced ? '#6366f1' : '#94a3b8' }}>\n {showAdvanced ? '▾' : '▸'} Optional settings\n </span>\n </Box>\n <Collapse in={showAdvanced}>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.25 }}>\n <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 1 }}>\n <Box>\n <label className={lbl}>Placeholder</label>\n <input className={input} value={(field.placeholder as string) ?? ''} onChange={(e) => set('placeholder', e.target.value || undefined)} placeholder=\"Hint text…\" />\n </Box>\n <Box>\n <label className={lbl}>Helper text</label>\n <input className={input} value={(field.helperText as string) ?? ''} onChange={(e) => set('helperText', e.target.value || undefined)} placeholder=\"Description…\" />\n </Box>\n </Box>\n <Box>\n <label className={lbl}>Info tooltip</label>\n <input className={input} value={(field.info as string) ?? ''} onChange={(e) => set('info', e.target.value || undefined)} placeholder=\"Shown in ℹ tooltip\" />\n </Box>\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 1.5 }}>\n <CheckRow id={`${fieldKey}-req`} label=\"Required\" checked={!!field.required} onChange={(v) => set('required', v || undefined)} />\n <CheckRow id={`${fieldKey}-dis`} label=\"Disabled\" checked={!!field.disabled} onChange={(v) => set('disabled', v || undefined)} />\n <CheckRow id={`${fieldKey}-hid`} label=\"Hidden\" checked={!!field.hidden} onChange={(v) => set('hidden', v || undefined)} />\n <CheckRow id={`${fieldKey}-opt`} label=\"Show optional\" checked={!!field.showOptional} onChange={(v) => set('showOptional', v || undefined)} />\n <CheckRow id={`${fieldKey}-div`} label=\"Divider after\" checked={!!field.dividerAfter} onChange={(v) => set('dividerAfter', v || undefined)} />\n <CheckRow id={`${fieldKey}-frm`} label=\"Formula input\" checked={!!field.formula} onChange={(v) => set('formula', v || undefined)} />\n </Box>\n </Box>\n </Collapse>\n </Box>\n </Box>\n\n {/* Footer */}\n {!noFooter && (\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', gap: 1, justifyContent: 'flex-end', bgcolor: '#f8fafc', flexShrink: 0 }}>\n <Box component=\"button\" onClick={onCancel} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={onSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Save\n </Box>\n </Box>\n )}\n </>\n );\n}\n","// Shared design tokens for FlowForm field components.\n// Keep values in sync with the MUI theme when one is provided.\n\nexport const COLOR = {\n text: '#0f172a',\n textMuted: '#64748b',\n textLight: '#94a3b8',\n textPlaceholder: '#9ca3af',\n border: '#e2e8f0',\n borderHover: '#cbd5e1',\n borderFocus: '#6366f1',\n borderError: '#ef4444',\n borderInput: 'rgba(0,0,0,0.23)',\n accent: '#6366f1',\n accentHover: '#4f46e5',\n accentLight: '#f5f3ff',\n accentMuted: '#c7d2fe',\n error: '#ef4444',\n errorBg: '#fef2f2',\n success: '#15803d',\n successBg: '#f0fdf4',\n bg: '#ffffff',\n bgMuted: '#f8fafc',\n bgSubtle: '#f1f5f9',\n} as const;\n\nexport const RADIUS = {\n sm: '4px',\n md: '6px',\n lg: '8px',\n xl: '10px',\n xxl: '12px',\n} as const;\n\nexport const FONT_SIZE = {\n xs: 10,\n sm: 11,\n base: 12,\n md: 13,\n lg: 14,\n} as const;\n\nexport const SHADOW = {\n focusRing: `0 0 0 3px rgba(99,102,241,0.15)`,\n card: '0 1px 2px rgba(15,23,42,0.04)',\n} as const;\n\n/** Standard input sx props — apply as a base and override as needed */\nexport const INPUT_SX = {\n width: '100%',\n fontSize: FONT_SIZE.md,\n fontFamily: 'inherit',\n padding: '8px 12px',\n border: `1px solid ${COLOR.borderInput}`,\n borderRadius: RADIUS.md,\n outline: 'none',\n background: COLOR.bg,\n color: COLOR.text,\n boxSizing: 'border-box' as const,\n transition: 'border-color 0.15s, box-shadow 0.15s',\n};\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Stepper, Step, StepLabel } from '@mui/material';\nimport { MdClose, MdArrowBack, MdCheck } from 'react-icons/md';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport type { FieldDescriptor } from '../types';\nimport type { ConditionConfig } from '../types/formula';\nimport { COLOR, FONT_SIZE, INPUT_SX } from '../styles/constants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction defaultField(): FieldDescriptor {\n return { type: 'text', id: '', label: '', colSpan: 12 } as FieldDescriptor;\n}\n\n/** Returns true when the field type needs a \"Child fields\" config step */\nfunction needsChildStep(field: FieldDescriptor): boolean {\n return field.type === 'object' || field.type === 'array' || field.type === 'schema';\n}\n\nfunction childStepLabel(field: FieldDescriptor): string {\n if (field.type === 'object') return 'Child Fields';\n if (field.type === 'schema') return 'Schema Fields';\n const itemType = (field as any).itemType ?? 'text';\n if (itemType === 'object') return 'Item Fields';\n if (itemType === 'select') return 'Item Options';\n return 'Item Config';\n}\n\n// ─── Step 2 body: child fields / item config ──────────────────────────────────\n\nfunction ChildFieldsStep({ field, onChange }: { field: FieldDescriptor; onChange: (f: FieldDescriptor) => void }) {\n const ext = field as Record<string, any>;\n const itemType = ext.itemType ?? 'text';\n\n if (field.type === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields nested inside this object. Each child field can itself be an object or array.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Child fields\"\n />\n </Box>\n );\n }\n\n if (field.type === 'schema') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields inside this schema. When the form is filled, their values are collected into a single object as this field's value.\n </Typography>\n <SchemaBuilder\n value={(field.children ?? []) as FieldDescriptor[]}\n onChange={(children) => onChange({ ...field, children })}\n label=\"Schema fields\"\n />\n </Box>\n );\n }\n\n // Array — content varies by itemType\n if (field.type === 'array') {\n if (itemType === 'object') {\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Define the fields for each item in the array. Each item will be an object with these fields.\n </Typography>\n <SchemaBuilder\n value={(ext.itemFields ?? []) as FieldDescriptor[]}\n onChange={(itemFields) => onChange({ ...field, itemFields } as FieldDescriptor)}\n label=\"Item fields\"\n />\n </Box>\n );\n }\n\n if (itemType === 'select') {\n const opts = (ext.itemOptions ?? []) as { label: string; value: string }[];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Options available in each select item.\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5, mb: 0.75 }}>\n {opts.map((opt, i) => (\n <Box key={i} sx={{ display: 'flex', gap: 0.5, alignItems: 'center' }}>\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Label\"\n value={opt.label}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, label: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <input\n style={{ ...INPUT_SX, flex: 1, padding: '6px 10px' }}\n placeholder=\"Value\"\n value={opt.value}\n onChange={(e) => {\n const next = opts.map((o, idx) => idx === i ? { ...o, value: e.target.value } : o);\n onChange({ ...field, itemOptions: next } as FieldDescriptor);\n }}\n />\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: opts.filter((_, idx) => idx !== i) } as FieldDescriptor)}\n sx={{ background: 'none', border: 'none', cursor: 'pointer', color: '#94a3b8', display: 'flex', p: 0.25, '&:hover': { color: '#dc2626' } }}\n >\n ✕\n </Box>\n </Box>\n ))}\n </Box>\n <Box\n component=\"button\"\n onClick={() => onChange({ ...field, itemOptions: [...opts, { label: '', value: '' }] } as FieldDescriptor)}\n sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: '1px dashed #dee2e6', cursor: 'pointer', fontSize: 11, fontWeight: 600, px: 1, py: 0.5, borderRadius: '6px', color: '#6366f1', width: '100%', justifyContent: 'center', '&:hover': { borderColor: '#6366f1', bgcolor: '#f5f3ff' } }}\n >\n + Add option\n </Box>\n </Box>\n );\n }\n\n if (itemType === 'array') {\n const nestedItemType = ext.itemSchema?.itemType ?? 'text';\n const PRIMITIVE_TYPES = [\n { value: 'text', label: 'Text' }, { value: 'number', label: 'Number' },\n { value: 'email', label: 'Email' }, { value: 'url', label: 'URL' },\n { value: 'password', label: 'Password' }, { value: 'select', label: 'Select' }, { value: 'object', label: 'Object' },\n ];\n return (\n <Box sx={{ p: 2.5 }}>\n <Typography sx={{ fontSize: 12, color: '#64748b', mb: 2 }}>\n Each item is itself an array. Configure the type of items inside the nested array.\n </Typography>\n <label style={{ fontSize: FONT_SIZE.sm, fontWeight: 600, color: COLOR.textMuted, display: 'block', marginBottom: 3 }}>Nested item type</label>\n <select\n style={{ ...INPUT_SX, padding: '6px 10px', cursor: 'pointer' }}\n value={nestedItemType}\n onChange={(e) => onChange({ ...field, itemSchema: { ...(ext.itemSchema ?? {}), itemType: e.target.value } } as FieldDescriptor)}\n >\n {PRIMITIVE_TYPES.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}\n </select>\n </Box>\n );\n }\n\n // Primitive itemType — nothing extra to configure\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ border: '1.5px dashed #e2e8f0', borderRadius: '8px', py: 3, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>\n No extra configuration needed for <strong>{itemType}</strong> items.\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#cbd5e1', mt: 0.5 }}>\n Item placeholder and labels are set in the previous step.\n </Typography>\n </Box>\n </Box>\n );\n }\n\n return null;\n}\n\n// ─── Preview using real FlowForm ──────────────────────────────────────────────\n\nfunction FieldPreview({ field }: { field: FieldDescriptor }) {\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>({});\n const key = field.id ?? field.name ?? 'preview';\n const COL_OPTIONS = [\n { value: 3, label: '1/4' }, { value: 4, label: '1/3' },\n { value: 6, label: '1/2' }, { value: 8, label: '2/3' }, { value: 12, label: 'Full' },\n ];\n const colLabel = field.colSpan && field.colSpan < 12\n ? COL_OPTIONS.find((c) => c.value === field.colSpan)?.label ?? field.colSpan\n : 'Full';\n\n return (\n <Box sx={{ p: 2.5 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 2, px: 1.25, py: 0.75, bgcolor: '#f0fdf4', border: '1px solid #bbf7d0', borderRadius: '7px' }}>\n <Typography sx={{ fontSize: 11, color: '#15803d', fontWeight: 500, flex: 1 }}>\n Live preview — interact to test the field\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#64748b' }}>Width: {colLabel}</Typography>\n </Box>\n <FlowForm\n schema={{ layout: 'flat', fields: [field] }}\n initialValues={{ [key]: field.type === 'array' ? [] : (field.type === 'object' || field.type === 'schema') ? {} : '' }}\n onSubmit={() => {}}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface AddFieldModalProps {\n open: boolean;\n initial?: FieldDescriptor;\n onSave: (field: FieldDescriptor) => void;\n onClose: () => void;\n editMode?: boolean;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function AddFieldModal({ open, initial, onSave, onClose, editMode = false }: AddFieldModalProps) {\n const [step, setStep] = useState(1);\n const [draft, setDraft] = useState<FieldDescriptor>(() => initial ?? defaultField());\n\n function handleOpen() {\n setDraft(initial ?? defaultField());\n setStep(1);\n }\n\n const hasChild = needsChildStep(draft);\n const totalSteps = hasChild ? 3 : 2;\n\n // Step labels\n const stepLabels = hasChild\n ? ['Configure', childStepLabel(draft), 'Preview']\n : ['Configure', 'Preview'];\n\n const canNext = !!(draft.id || (draft as any).name) && !!draft.type;\n\n function goNext() { setStep((s) => Math.min(s + 1, totalSteps)); }\n function goBack() { setStep((s) => Math.max(s - 1, 1)); }\n\n function handleSave() { onSave(draft); onClose(); }\n\n // Map logical step to display step index (0-based for MUI Stepper)\n const activeStepIdx = step - 1;\n const isLastStep = step === totalSteps;\n const isPreview = (hasChild && step === 3) || (!hasChild && step === 2);\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '90vh' } }}\n >\n {/* Header */}\n <Box sx={{ px: 2.5, pt: 1.75, pb: 0, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', mb: 1.5 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a', flex: 1 }}>\n {editMode ? 'Edit Field' : 'Add Field'}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n <Stepper activeStep={activeStepIdx} sx={{ pb: 1.5 }}>\n {stepLabels.map((label, i) => (\n <Step key={label} completed={activeStepIdx > i}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto' }}>\n {step === 1 && (\n <FieldConfigPanel field={draft} onChange={setDraft} onSave={goNext} onCancel={onClose} noFooter />\n )}\n {step === 2 && hasChild && (\n <ChildFieldsStep field={draft} onChange={setDraft} />\n )}\n {isPreview && (\n <FieldPreview field={draft} />\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {step > 1 && (\n <Box component=\"button\" onClick={goBack} sx={{ display: 'flex', alignItems: 'center', gap: 0.5, background: 'none', border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 500, color: '#6c757d', px: 0, '&:hover': { color: '#0f172a' } }}>\n <MdArrowBack size={14} /> Back\n </Box>\n )}\n <Box sx={{ flex: 1 }} />\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n {isLastStep ? (\n <Box component=\"button\" onClick={handleSave} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> {editMode ? 'Save changes' : 'Add field'}\n </Box>\n ) : (\n <Box component=\"button\" onClick={goNext} disabled={!canNext} sx={{ border: 'none', cursor: canNext ? 'pointer' : 'not-allowed', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: canNext ? '#6366f1' : '#c7d2fe', color: '#fff', '&:hover': { bgcolor: canNext ? '#4f46e5' : '#c7d2fe' } }}>\n Next →\n </Box>\n )}\n </Box>\n </Dialog>\n );\n}\n","import { useState } from 'react';\nimport { Dialog, Box, Typography, IconButton, Tooltip } from '@mui/material';\nimport { MdClose, MdDeleteOutline, MdEdit, MdDragIndicator, MdCheck } from 'react-icons/md';\nimport { AddFieldModal } from './AddFieldModal';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Field row in list ────────────────────────────────────────────────────────\n\ninterface ListRowProps {\n field: FieldDescriptor;\n index: number;\n total: number;\n onEdit: () => void;\n onDelete: () => void;\n onMoveUp: () => void;\n onMoveDown: () => void;\n}\n\nfunction ListRow({ field, index, total, onEdit, onDelete, onMoveUp, onMoveDown }: ListRowProps) {\n const label = (field.label as string) || field.id || field.name || 'Untitled';\n const key = field.id ?? field.name ?? '';\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, px: 1.5, py: 1, border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff' }}>\n {/* Drag handle / move buttons */}\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.25, color: '#cbd5e1' }}>\n <Box component=\"button\" onClick={onMoveUp} disabled={index === 0} sx={{ background: 'none', border: 'none', p: 0, cursor: index === 0 ? 'default' : 'pointer', color: index === 0 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === 0 ? '#e2e8f0' : '#475569' } }}>▲</Box>\n <Box component=\"button\" onClick={onMoveDown} disabled={index === total - 1} sx={{ background: 'none', border: 'none', p: 0, cursor: index === total - 1 ? 'default' : 'pointer', color: index === total - 1 ? '#e2e8f0' : '#94a3b8', lineHeight: 1, fontSize: 10, '&:hover': { color: index === total - 1 ? '#e2e8f0' : '#475569' } }}>▼</Box>\n </Box>\n\n <Box sx={{ fontSize: 10, fontWeight: 700, px: 0.75, py: 0.2, borderRadius: '4px', bgcolor: '#eef2ff', color: '#6366f1', flexShrink: 0 }}>\n {field.type}\n </Box>\n\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography sx={{ fontSize: 13, fontWeight: 600, color: '#0f172a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {label}\n {field.required && <Box component=\"span\" sx={{ color: '#dc3545', ml: 0.25 }}>*</Box>}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8', fontFamily: 'monospace' }}>{key}</Typography>\n </Box>\n\n <Tooltip title=\"Edit field\" placement=\"top\">\n <Box component=\"button\" onClick={onEdit} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#f1f5f9', color: '#475569' } }}>\n <MdEdit size={14} />\n </Box>\n </Tooltip>\n <Tooltip title=\"Remove field\" placement=\"top\">\n <Box component=\"button\" onClick={onDelete} sx={{ background: 'none', border: 'none', cursor: 'pointer', display: 'flex', alignItems: 'center', justifyContent: 'center', width: 28, height: 28, borderRadius: '6px', p: 0, color: '#94a3b8', '&:hover': { bgcolor: '#fee2e2', color: '#dc2626' } }}>\n <MdDeleteOutline size={16} />\n </Box>\n </Tooltip>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface EditSchemaModalProps {\n open: boolean;\n value: FieldDescriptor[];\n onSave: (fields: FieldDescriptor[]) => void;\n onClose: () => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function EditSchemaModal({ open, value, onSave, onClose }: EditSchemaModalProps) {\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const [editingIdx, setEditingIdx] = useState<number | null>(null);\n\n function handleOpen() { setDraft(value); setEditingIdx(null); }\n\n function handleDelete(i: number) { setDraft((d) => d.filter((_, idx) => idx !== i)); }\n\n function handleMove(i: number, dir: -1 | 1) {\n setDraft((d) => {\n const next = [...d];\n const j = i + dir;\n if (j < 0 || j >= next.length) return d;\n [next[i], next[j]] = [next[j], next[i]];\n return next;\n });\n }\n\n function handleSaveField(updated: FieldDescriptor) {\n if (editingIdx === null) return;\n setDraft((d) => { const next = [...d]; next[editingIdx] = updated; return next; });\n setEditingIdx(null);\n }\n\n function handleDone() { onSave(draft); onClose(); }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n\n return (\n <>\n <Dialog\n open={open}\n onClose={onClose}\n TransitionProps={{ onEnter: handleOpen }}\n maxWidth=\"sm\"\n fullWidth\n PaperProps={{ sx: { borderRadius: '12px', overflow: 'hidden', display: 'flex', flexDirection: 'column', maxHeight: '85vh' } }}\n >\n {/* Header */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2.5, py: 1.75, borderBottom: '1px solid #e2e8f0', flexShrink: 0 }}>\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>Edit Schema</Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>{draft.length} field{draft.length !== 1 ? 's' : ''} defined</Typography>\n </Box>\n <IconButton size=\"small\" onClick={onClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Box>\n\n {/* Body */}\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n {draft.length === 0 ? (\n <Box sx={{ border: '1.5px dashed rgba(0,0,0,0.12)', borderRadius: '8px', py: 4, textAlign: 'center' }}>\n <Typography sx={{ fontSize: 13, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n ) : (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.75 }}>\n {draft.map((field, i) => (\n <ListRow\n key={`${field.id ?? field.name}-${i}`}\n field={field}\n index={i}\n total={draft.length}\n onEdit={() => setEditingIdx(i)}\n onDelete={() => handleDelete(i)}\n onMoveUp={() => handleMove(i, -1)}\n onMoveDown={() => handleMove(i, 1)}\n />\n ))}\n </Box>\n )}\n </Box>\n\n {/* Footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={onClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </Dialog>\n\n {/* Edit field modal (nested) */}\n {editingIdx !== null && (\n <AddFieldModal\n open={editingIdx !== null}\n initial={draft[editingIdx]}\n onSave={handleSaveField}\n onClose={() => setEditingIdx(null)}\n editMode\n />\n )}\n </>\n );\n}\n","import { useState, useCallback, useMemo, useEffect, useRef } from 'react';\nimport { Tooltip } from '@mui/material';\nimport { MdAdd, MdSettings, MdAccountTree } from 'react-icons/md';\nimport { FaWpforms } from \"react-icons/fa6\";\nimport { AddFieldModal } from './AddFieldModal';\nimport { EditSchemaModal } from './EditSchemaModal';\nimport { FlowForm } from '../DynamicFormRenderer';\nimport { buildValidationSchema } from './buildValidationSchema';\nimport { buildEvaluationPayload, serializeConditionExpressions } from '../DynamicFormRenderer/formulaUtils';\nimport type { FieldSuggestion } from './AddFieldPanel';\nimport type { FieldDescriptor } from '../types';\nimport type { FormulaConfig, ConditionConfig } from '../types/formula';\nimport { VariablePickerProvider, type VariableGroup } from '../VariablePicker/VariablePickerContext';\nimport { VariablePicker } from '../VariablePicker/VariablePicker';\nimport { TabsEditContext } from './TabsEditContext';\n\nimport './SchemaBuilder.css';\n\nfunction buildInitialValues(fields: FieldDescriptor[]): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const f of fields) {\n const key = f.id ?? f.name ?? '';\n if (!key) continue;\n if (f.type === 'array') {\n result[key] = [];\n } else if (f.type === 'object' || f.type === 'schema') {\n result[key] = buildInitialValues((f.children ?? []) as FieldDescriptor[]);\n } else {\n result[key] = '';\n }\n }\n return result;\n}\n\nexport type { FieldSuggestion };\n\n// ─── Payload shape ────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderPayload {\n /** The FieldDescriptor[] schema — save this to DB to restore the editor */\n schema: FieldDescriptor[];\n /** Formula AST per field — part of editor state */\n formulaConfig: FormulaConfig;\n /** Condition rows per field — part of editor state */\n conditionConfig: ConditionConfig;\n /** Serialized condition expression string per field — ready for backend rule engine */\n conditionExpressions: Record<string, string>;\n /** Live form values entered by the user */\n values: Record<string, unknown>;\n /** Backend-ready evaluation payload (formulas resolved against values) */\n evaluationPayload: ReturnType<typeof buildEvaluationPayload>;\n}\n\nexport interface SchemaBuilderProps {\n value: FieldDescriptor[];\n onChange: (fields: FieldDescriptor[]) => void;\n suggestions?: FieldSuggestion[];\n label?: string;\n /** Fires on every change: schema edit, value input, formula/condition update */\n onPayload?: (payload: SchemaBuilderPayload) => void;\n /** Whether to auto-validate required fields (shows inline error messages) */\n validate?: boolean;\n /** Called whenever form validity changes — wire to enable/disable your Save button */\n onValidityChange?: (isValid: boolean) => void;\n /** Optional variable groups to seamlessly enable the Variable Picker for formula fields */\n variableGroups?: VariableGroup[];\n /** Saved form values to restore when reopening — keys match field ids */\n initialValues?: Record<string, unknown>;\n /** Saved formula config to restore when reopening */\n initialFormulaConfig?: FormulaConfig;\n /** Saved condition config to restore when reopening */\n initialConditionConfig?: ConditionConfig;\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function SchemaBuilder({\n value, onChange, suggestions, label = 'Fields',\n onPayload, validate = true, onValidityChange, variableGroups,\n initialValues: initialValuesProp,\n initialFormulaConfig,\n initialConditionConfig,\n}: SchemaBuilderProps) {\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n\n // Add-field-to-tab state (used when TabsField's \"+\" button is clicked inside the preview)\n const [tabAddTarget, setTabAddTarget] = useState<{ containerFieldId: string; tabId: string } | null>(null);\n const [formulaConfig, setFormulaConfig] = useState<FormulaConfig>(initialFormulaConfig ?? {});\n const [conditionConfig, setConditionConfig] = useState<ConditionConfig>(initialConditionConfig ?? {});\n\n // Keep a ref to the latest form values so the config-change effect can include them\n const latestValues = useRef<Record<string, unknown>>(initialValuesProp ?? {});\n\n const builtInitialValues = useMemo(() => buildInitialValues(value), [value]);\n // Merge: schema-built empty values as base, saved values override\n const initialValues = useMemo(\n () => initialValuesProp && Object.keys(initialValuesProp).length > 0\n ? { ...builtInitialValues, ...initialValuesProp }\n : builtInitialValues,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [builtInitialValues, initialValuesProp],\n );\n\n const validationSchema = useMemo(() =>\n validate ? buildValidationSchema(value) : undefined,\n [validate, value]);\n\n // Fire onPayload whenever conditions / formula config change (not just on value input)\n useEffect(() => {\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: latestValues.current,\n evaluationPayload: buildEvaluationPayload({ values: latestValues.current, conditionConfig }),\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conditionConfig, formulaConfig, value]);\n\n const handleValuesChange = useCallback((vals: Record<string, unknown>) => {\n latestValues.current = vals;\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilder] handleValuesChange — vals:', vals);\n }\n if (!onPayload) return;\n onPayload({\n schema: value,\n formulaConfig,\n conditionConfig,\n conditionExpressions: serializeConditionExpressions(conditionConfig),\n values: vals,\n evaluationPayload: buildEvaluationPayload({ values: vals, conditionConfig }),\n });\n }, [value, formulaConfig, conditionConfig, onPayload]);\n\n function handleAddField(field: FieldDescriptor) {\n onChange([...value, field]);\n }\n\n function handleAddFieldToTab(field: FieldDescriptor) {\n if (!tabAddTarget) return;\n const { containerFieldId, tabId } = tabAddTarget;\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: [...(t.fields ?? []), field] } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n setTabAddTarget(null);\n }\n\n function handleRemoveFieldFromTab(containerFieldId: string, tabId: string, fieldIndex: number) {\n const updated = value.map(f => {\n if ((f.id ?? (f as any).name) !== containerFieldId) return f;\n const tabs: any[] = (f as any).tabs ?? [];\n return {\n ...f,\n tabs: tabs.map(t =>\n t.id === tabId ? { ...t, fields: (t.fields ?? []).filter((_: any, i: number) => i !== fieldIndex) } : t\n ),\n };\n });\n onChange(updated as FieldDescriptor[]);\n }\n\n const tabsEditContextValue = useMemo(() => ({\n openAddFieldDialog: (containerFieldId: string, tabId: string) =>\n setTabAddTarget({ containerFieldId, tabId }),\n removeFieldFromTab: handleRemoveFieldFromTab,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), [value, onChange]);\n\n const inner = (\n <div className=\"schema-builder-root\">\n {/* Header row */}\n {value.length > 0 && (\n <div className=\"schema-builder-header\">\n <div className=\"schema-builder-actions\">\n <Tooltip title=\"Edit schema\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-outline\"\n onClick={() => setEditOpen(true)}\n >\n <MdSettings size={13} /> Edit Schema\n </button>\n </Tooltip>\n <Tooltip title=\"Add a new field\" placement=\"top\">\n <button\n className=\"sb-btn sb-btn-primary\"\n onClick={() => setAddOpen(true)}\n >\n <MdAdd size={14} /> Add Field\n </button>\n </Tooltip>\n </div>\n </div>\n )}\n\n {/* Rendered form using actual field components */}\n {value.length > 0 ? (\n <TabsEditContext.Provider value={tabsEditContextValue}>\n <FlowForm\n schema={{ layout: 'flat', fields: value }}\n initialValues={initialValues}\n onSubmit={() => { }}\n validationSchema={validationSchema}\n onValidityChange={onValidityChange}\n onValuesChange={onPayload ? handleValuesChange : undefined}\n formulaConfig={formulaConfig}\n onFormulaConfigChange={setFormulaConfig}\n conditionConfig={conditionConfig}\n onConditionConfigChange={setConditionConfig}\n />\n </TabsEditContext.Provider>\n ) : (\n <div className=\"schema-builder-empty-state\">\n <FaWpforms size={40} className=\"schema-builder-empty-icon\" />\n \n <p className=\"schema-builder-empty-title\">\n Tell us what fields should be in the list, and assign values to them.\n </p>\n \n <div className=\"schema-builder-empty-actions\">\n <button\n className=\"btn\"\n onClick={() => setAddOpen(true)}\n >\n Add field\n </button>\n \n {/* <div className=\"setup-manual-text\">\n or \n <span \n className=\"setup-manual-link\"\n onClick={() => setEditOpen(true)}\n >\n setup manually\n </span>\n </div> */}\n </div>\n </div>\n )}\n\n <AddFieldModal\n open={addOpen}\n onSave={handleAddField}\n onClose={() => setAddOpen(false)}\n />\n <EditSchemaModal\n open={editOpen}\n value={value}\n onSave={onChange}\n onClose={() => setEditOpen(false)}\n />\n {/* Modal for adding a field to a specific tab from the rendered preview */}\n <AddFieldModal\n open={!!tabAddTarget}\n onSave={handleAddFieldToTab}\n onClose={() => setTabAddTarget(null)}\n />\n </div>\n );\n\n if (variableGroups) {\n return (\n <VariablePickerProvider groups={variableGroups}>\n <VariablePicker width={260} mode=\"popover\" />\n {inner}\n </VariablePickerProvider>\n );\n }\n\n return inner;\n}\n","import { useState, useRef } from 'react';\nimport { Drawer, Box, Typography, IconButton, Divider, Chip, Tooltip } from '@mui/material';\nimport { MdSettings, MdArrowForward, MdClose, MdCheck, MdAdd, MdArrowBack } from 'react-icons/md';\nimport { SchemaBuilder } from './SchemaBuilder';\nimport type { SchemaBuilderProps, SchemaBuilderPayload } from './SchemaBuilder';\nimport { FieldConfigPanel } from './FieldConfigPanel';\nimport type { FieldDescriptor } from '../types';\n\n// ─── Compact summary shown in main drawer ────────────────────────────────────\n\nfunction FieldSummary({ fields, onOpen }: { fields: FieldDescriptor[]; onOpen: () => void }) {\n return (\n <Box sx={{ border: '1px solid #e2e8f0', borderRadius: '8px', bgcolor: '#fff', overflow: 'hidden' }}>\n {fields.length > 0 ? (\n <Box sx={{ px: 1.5, py: 1.25, display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {fields.map((f, i) => {\n const key = f.id ?? f.name ?? '';\n return (\n <Tooltip key={i} title={`${f.type} · ${key}`} placement=\"top\">\n <Chip\n label={(f.label as string) || key}\n size=\"small\"\n sx={{ fontSize: 11, fontWeight: 500, height: 22, bgcolor: '#f1f5f9', color: '#334155', border: '1px solid #e2e8f0', '& .MuiChip-label': { px: 1 } }}\n />\n </Tooltip>\n );\n })}\n </Box>\n ) : (\n <Box sx={{ px: 1.5, py: 1.5 }}>\n <Typography sx={{ fontSize: 12, color: '#94a3b8' }}>No fields defined yet</Typography>\n </Box>\n )}\n <Divider sx={{ borderColor: '#f1f5f9' }} />\n <Box onClick={onOpen} sx={{ display: 'flex', alignItems: 'center', gap: 0.75, px: 1.5, py: 1, cursor: 'pointer', '&:hover': { bgcolor: '#f8fafc' }, transition: 'background 0.12s' }}>\n {fields.length === 0 ? <MdAdd size={14} color=\"#6366f1\" /> : <MdSettings size={13} color=\"#6366f1\" />}\n <Typography sx={{ fontSize: 12, fontWeight: 600, color: '#6366f1', flex: 1 }}>\n {fields.length === 0 ? 'Add fields' : 'Configure fields'}\n </Typography>\n <MdArrowForward size={13} color=\"#94a3b8\" />\n </Box>\n </Box>\n );\n}\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nexport interface SchemaBuilderDrawerProps extends SchemaBuilderProps {\n label?: string;\n drawerTitle?: string;\n drawerWidth?: number;\n /**\n * Fired when the user clicks Done.\n * @param schema Save this to DB — pass it back to FlowForm/SchemaBuilder to restore the form\n * @param payload Send this to backend — contains conditionExpressions, formulaConfig, values, evaluationPayload\n */\n onDone?: (schema: FieldDescriptor[], payload: SchemaBuilderPayload | null) => void;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\ntype View = { type: 'list' } | { type: 'edit'; index: number };\n\nexport function SchemaBuilderDrawer({\n value,\n onChange,\n suggestions,\n onPayload,\n onDone,\n validate,\n onValidityChange,\n label = 'Fields',\n drawerTitle = 'Configure Fields',\n drawerWidth = 580,\n}: SchemaBuilderDrawerProps) {\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<View>({ type: 'list' });\n const [draft, setDraft] = useState<FieldDescriptor[]>(value);\n const latestPayload = useRef<SchemaBuilderPayload | null>(null);\n\n // Persisted state across open/close cycles — survives Cancel\n const savedValues = useRef<Record<string, unknown> | undefined>(undefined);\n const savedFormulaConfig = useRef<SchemaBuilderPayload['formulaConfig'] | undefined>(undefined);\n const savedConditionConfig = useRef<SchemaBuilderPayload['conditionConfig'] | undefined>(undefined);\n\n // Local draft of the field being edited\n const [fieldDraft, setFieldDraft] = useState<FieldDescriptor | null>(null);\n\n function handleOpen() {\n if (import.meta.env.DEV) console.log('[SchemaBuilderDrawer] handleOpen — savedValues.current:', savedValues.current);\n setDraft(value); setView({ type: 'list' }); setOpen(true);\n }\n\n function handleDone() {\n const p = latestPayload.current;\n // Persist the latest state so reopening restores it\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n if (import.meta.env.DEV) {\n console.log('[SchemaBuilderDrawer] handleDone — savedValues:', savedValues.current);\n }\n onChange(draft);\n setOpen(false);\n onDone?.(draft, p);\n if (import.meta.env.DEV) {\n console.group('🟣 SchemaBuilder — Done');\n console.log(\n '%c schema %c (save to DB → pass back to FlowForm to restore this form)',\n 'background:#6366f1;color:#fff;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n draft,\n );\n console.log(\n '%c payload %c (send to backend for evaluation)',\n 'background:#0f172a;color:#e2e8f0;padding:1px 6px;border-radius:3px;font-weight:700',\n 'color:#64748b;font-weight:400',\n {\n conditionExpressions: p?.conditionExpressions ?? {},\n formulaConfig: p?.formulaConfig ?? {},\n values: p?.values ?? {},\n evaluationPayload: p?.evaluationPayload ?? {},\n },\n );\n console.groupEnd();\n }\n }\n\n function handleClose() {\n // Save whatever the user had so far before closing\n const p = latestPayload.current;\n if (p) {\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n }\n setDraft(value);\n setOpen(false);\n }\n\n function handleEditField(index: number) {\n setFieldDraft({ ...draft[index] });\n setView({ type: 'edit', index });\n }\n\n function handleSaveField() {\n if (view.type !== 'edit' || !fieldDraft) return;\n const next = [...draft];\n next[view.index] = fieldDraft;\n setDraft(next);\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n function handleCancelEdit() {\n setView({ type: 'list' });\n setFieldDraft(null);\n }\n\n const hasChanges = JSON.stringify(draft) !== JSON.stringify(value);\n const editingField = view.type === 'edit' ? draft[view.index] : null;\n\n return (\n <>\n {/* Summary in main drawer */}\n <Box>\n <Typography sx={{ fontSize: 12, fontWeight: 700, color: '#64748b', textTransform: 'uppercase', letterSpacing: 0.5, mb: 0.75 }}>\n {label}\n </Typography>\n <FieldSummary fields={value} onOpen={handleOpen} />\n </Box>\n\n {/* Secondary drawer */}\n <Drawer\n anchor=\"right\"\n open={open}\n onClose={handleClose}\n PaperProps={{ sx: { width: drawerWidth, display: 'flex', flexDirection: 'column', boxShadow: '-4px 0 24px rgba(0,0,0,0.12)', overflow: 'hidden' } }}\n >\n {/* ── HEADER ────────────────────────────────────────────────── */}\n <Box sx={{ display: 'flex', alignItems: 'center', px: 2, py: 1.5, borderBottom: '1px solid #e2e8f0', flexShrink: 0, gap: 1 }}>\n {view.type === 'edit' && (\n <Tooltip title=\"Back to fields\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleCancelEdit} sx={{ color: '#64748b' }}>\n <MdArrowBack size={17} />\n </IconButton>\n </Tooltip>\n )}\n <Box sx={{ flex: 1 }}>\n <Typography sx={{ fontSize: 14, fontWeight: 700, color: '#0f172a' }}>\n {view.type === 'edit'\n ? ((fieldDraft?.label as string) || fieldDraft?.id || 'Edit field')\n : drawerTitle}\n </Typography>\n <Typography sx={{ fontSize: 11, color: '#94a3b8' }}>\n {view.type === 'edit' ? 'Configure field properties' : `${draft.length} field${draft.length !== 1 ? 's' : ''} defined`}\n </Typography>\n </Box>\n {view.type === 'list' && (\n <Tooltip title=\"Close\" placement=\"bottom\">\n <IconButton size=\"small\" onClick={handleClose} sx={{ color: '#94a3b8' }}>\n <MdClose size={17} />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n\n {/* ── BODY ──────────────────────────────────────────────────── */}\n {view.type === 'list' && (\n <>\n <Box sx={{ flex: 1, overflowY: 'auto', p: 2.5 }}>\n <SchemaBuilder\n value={draft}\n onChange={setDraft}\n suggestions={suggestions}\n onPayload={(p) => { \n latestPayload.current = p; \n // Persist immediately so adding/removing fields doesn't wipe current data\n savedValues.current = p.values;\n savedFormulaConfig.current = p.formulaConfig;\n savedConditionConfig.current = p.conditionConfig;\n onPayload?.(p); \n }}\n validate={validate}\n onValidityChange={onValidityChange}\n label={label}\n initialValues={savedValues.current}\n initialFormulaConfig={savedFormulaConfig.current}\n initialConditionConfig={savedConditionConfig.current}\n />\n </Box>\n\n {/* List footer */}\n <Box sx={{ borderTop: '1px solid #e2e8f0', px: 2.5, py: 1.5, display: 'flex', alignItems: 'center', gap: 1, flexShrink: 0, bgcolor: '#f8fafc' }}>\n {hasChanges\n ? <Typography sx={{ fontSize: 11, color: '#f59e0b', fontWeight: 500, flex: 1 }}>Unsaved changes</Typography>\n : <Box sx={{ flex: 1 }} />\n }\n <Box component=\"button\" onClick={handleClose} sx={{ background: 'none', border: '1px solid #dee2e6', cursor: 'pointer', fontSize: 13, fontWeight: 500, px: 2, py: 0.75, borderRadius: '7px', color: '#6c757d', '&:hover': { bgcolor: '#f8f9fa' } }}>\n Cancel\n </Box>\n <Box component=\"button\" onClick={handleDone} sx={{ border: 'none', cursor: 'pointer', fontSize: 13, fontWeight: 600, px: 2.5, py: 0.75, borderRadius: '7px', bgcolor: '#6366f1', color: '#fff', display: 'flex', alignItems: 'center', gap: 0.75, '&:hover': { bgcolor: '#4f46e5' } }}>\n <MdCheck size={15} /> Done\n </Box>\n </Box>\n </>\n )}\n\n {/* Edit view — FieldConfigPanel fills the drawer */}\n {view.type === 'edit' && fieldDraft && (\n <FieldConfigPanel\n field={fieldDraft}\n onChange={setFieldDraft}\n onSave={handleSaveField}\n onCancel={handleCancelEdit}\n />\n )}\n </Drawer>\n </>\n );\n}\n"],"names":["useFlowForm","schema","initialValues","onSubmit","showErrorsImmediately","fields","validationSchema","useMemo","buildValidationSchema","initialTouched","acc","f","key","resolveFieldKey","formulaConfig","setFormulaConfig","useState","conditionConfig","setConditionConfig","initialValuesRef","useRef","useEffect","formik","useFormik","values","evaluation","buildEvaluationPayload","submit","useCallback","reset","nextValues","FIELD_TYPE_OPTIONS","FlowForgeRegistry","input","lbl","sectionTitle","ARRAY_ITEM_TYPES","COL_OPTIONS","ColSpanPicker","value","onChange","current","Box","jsx","opt","Tooltip","_","i","OptionsEditor","options","update","val","o","idx","jsxs","e","MdClose","MdAdd","CONDITION_COL_TYPES","ConditionColEditor","col","onDelete","isSelect","isOperator","opts","ConditionBuilder","condition","enabled","toggle","addCol","type","defaultId","updateCol","next","removeCol","c","t","CheckRow","id","label","checked","TabsViewsEditor","views","v","add","view","ButtonGroup","groupLabel","FieldConfigPanel","field","onSave","onCancel","noFooter","showAdvanced","setShowAdvanced","fieldKey","ext","isOptionsField","customRegistryDef","customConfigSchema","set","Fragment","FlowForm","vals","newViews","existing","merged","prev","Collapse","MdCheck","COLOR","RADIUS","FONT_SIZE","INPUT_SX","defaultField","needsChildStep","childStepLabel","itemType","ChildFieldsStep","Typography","SchemaBuilder","children","itemFields","nestedItemType","_a","PRIMITIVE_TYPES","FieldPreview","colLabel","AddFieldModal","open","initial","onClose","editMode","step","setStep","draft","setDraft","handleOpen","hasChild","totalSteps","stepLabels","canNext","goNext","s","goBack","handleSave","activeStepIdx","isLastStep","isPreview","Dialog","IconButton","Stepper","Step","StepLabel","MdArrowBack","ListRow","index","total","onEdit","onMoveUp","onMoveDown","MdEdit","MdDeleteOutline","EditSchemaModal","editingIdx","setEditingIdx","handleDelete","d","handleMove","dir","j","handleSaveField","updated","handleDone","hasChanges","buildInitialValues","result","suggestions","onPayload","validate","onValidityChange","variableGroups","initialValuesProp","initialFormulaConfig","initialConditionConfig","addOpen","setAddOpen","editOpen","setEditOpen","tabAddTarget","setTabAddTarget","latestValues","builtInitialValues","serializeConditionExpressions","handleValuesChange","handleAddField","handleAddFieldToTab","containerFieldId","tabId","tabs","handleRemoveFieldFromTab","fieldIndex","tabsEditContextValue","inner","MdSettings","TabsEditContext","FaWpforms","VariablePickerProvider","VariablePicker","FieldSummary","onOpen","Chip","Divider","MdArrowForward","SchemaBuilderDrawer","onDone","drawerTitle","drawerWidth","setOpen","setView","latestPayload","savedValues","savedFormulaConfig","savedConditionConfig","fieldDraft","setFieldDraft","p","handleClose","handleCancelEdit","Drawer"],"mappings":"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"}